15 Replies Latest reply: Jan 8, 2015 1:04 PM by Hamilton Junior RSS

    Seleção da ultima data com Valor

    Hamilton Junior

      Bom dia,

      estou desenvolvendo um projeto para o RH onde o banco de dados é baseado em históricos,

      imaginem que eu tenho um histórico de salário,

      Mes 07 Salario 1500

      Mes 09 Salario 2000

      Neste exemplo eu tenho duas movimentações, em minha seleção, selecionando o mes 11 o salario vai trazer zerado, mas eu preciso que me traga o ultimo valor (2000), tentei fazer =Bottom(sum(Valor_Salario)) porém ele me retorna zero.

       

      Antes de tudo, Feliz Natal

        • Re: Seleção da ultima data com Valor
          Alan Feliciano

          Olá Hamilton,

           

          Você pode resolver este problema no script desta forma:

           

          Salario_TMP:

          LOAD *

          INLINE [

              DataTMP, SalarioTMP

              01/01/2014, 1000

              01/05/2014, 1500

              01/10/2014, 3000

          ];

           

          Salario:

          load

            DataTMP as DataIni,

            date(if (RowNo() = 1, MonthStart(Today()), Previous(DataTMP)-1))

            as DataFim,

            SalarioTMP as Salario

          Resident Salario_TMP

          order by DataTMP desc;


          drop Table Salario_TMP;

           

          LOAD MakeDate(2014, RowNo(), 01) as Data

          AutoGenerate(12);


          join (Salario)

          IntervalMatch (Data)

          LOAD

            DataIni,

            DataFim

          Resident Salario;

           

          DROP Fields DataIni, DataFim;

           

          O resultado fica assim:

           

          Envio o QVW em anexo para lhe apoiar no entendimento.

            • Re: Seleção da ultima data com Valor
              Hamilton Junior

              Boa Alan Feliciano Foi muito útil, porém quando eu tenho mais campos na tabela Salarios, por exemplo, Id_Funcionarios, como posso faer isso? Na forma deste exemplo ele só calcula a data para os primeiros registros.

                • Re: Seleção da ultima data com Valor
                  Alan Feliciano

                  Neste caso, temos que fazer o uso do Plano Cartesiano entre duas tabelas. Vamos criar um intervalo de datas para cada funcionário, assim teremos todos os funcionários preenchidos em todos os meses.

                   

                  O script fica assim:

                  Salario_TMP:

                  LOAD *

                  INLINE [

                      FuncIdTMP, DataTMP, SalarioTMP

                      1, 01/01/2014, 1000

                      1, 01/05/2014, 1500

                      1, 01/10/2014, 3000

                      2, 01/01/2014, 1000

                      2, 01/05/2014, 1900

                      2, 01/10/2014, 3600

                      3, 01/04/2014, 5000

                      3, 01/09/2014, 8600

                  ];

                   

                  Salario:

                  load

                    DataTMP as DataIni,

                    if (Previous(FuncIdTMP) <> FuncIdTMP, MonthStart(Today()), Previous(DataTMP)-1)

                    as DataFim,

                    SalarioTMP as Salario,

                    FuncIdTMP as FuncId

                  Resident Salario_TMP

                  order by FuncIdTMP, DataTMP desc;

                   

                   

                  drop Table Salario_TMP;

                   

                   

                  Datas:

                  LOAD MakeDate(2014, RowNo(), 01) as Data

                  AutoGenerate(12);

                   

                   

                  Join (Datas)

                  load

                    Distinct FuncId

                  Resident Salario;

                   

                   

                  join (Salario)

                  IntervalMatch (Data)

                  LOAD

                    DataIni,

                    DataFim

                  Resident Salario;

                   

                  DROP Fields DataIni, DataFim;

                   

                   

                  O resultado na tela fica assim:

                  Fazendo desta forma, você consegue atender sua necessidade.

                   

                  Abraço.

                  • Re: Seleção da ultima data com Valor
                    Alessandro Furtado

                    Boa noite.

                     

                    A solução do Alan muito boa. Usa intervalmatch.  Uma outra solução seria usar o iterno().

                     

                    //==================================================================

                    Salario:

                    load * inline

                    [

                    Funcionario,Data        ,Salario

                    A          ,"01/01/2014" , 1000

                    A          ,"01/03/2014" , 1100

                    A          ,"01/06/2014" , 1500

                    B          ,"01/01/2014" , 700

                    C          ,"01/01/2014" , 800

                    C          ,"01/03/2014" , 900

                    ];

                    //==================================================================

                    Tmp:

                    LOAD

                        Funcionario,

                        Salario,

                        Date#(Data)                                                                    as Data_Ini,

                        if(Previous(Funcionario) = Funcionario,date#(Previous(Data)),date(Today()))    as Data_Fim

                    Resident Salario Order by Funcionario,Data desc;

                    //

                    SalarioFinal:

                    NoConcatenate

                    LOAD

                      *

                      ,MonthStart(addmonths(Data_Ini, IterNo()-1))                                    as Data_Salario

                    Resident Tmp

                    WHILE MonthStart(addmonths(Data_Ini, IterNo()-1)) < Data_Fim;

                    //

                    DROP Tables Salario,Tmp;

                     

                     

                    EXIT Script;

                     

                    2014-12-25 22_32_15-QlikView x64 - [C__Furtado_Qlik_Bilden_Curso_Datas_Datas.qvw_].png

                     

                    Att,

                     

                    Alessandro Furtado

                • Re: Seleção da ultima data com Valor
                  Hamilton Junior

                  Bom dia,

                  os dois exemplos funcionaram perfeitamente,

                  apenas mais uma dúvida, utilizando o modelo do Alessandro Furtado,

                  Caso minha tabela de Salários tenha mais informações ou eu queira utilizar este mesmo recurso para outras tabelas, posso colocar todos os campos necessários dentro no IF correto?

                   

                   

                  Tmp:

                  LOAD

                      funcionario,

                      SalarioTMP,

                      id_numemp,

                      id_tipcol,

                      R038HSA_SEQALT,

                      Date#(DataTMP)                                                                    as Data_Ini,

                      if(Previous(funcionario) = funcionario

                      or Previous(id_numemp)=id_numemp

                      or Previous(id_tipcol)=id_tipcol

                      or Previous(SEQALT)=SEQALT

                      ,date#(Previous(DataTMP)),date(Today()))    as Data_Fim

                  Resident SALARIO Order by funcionario,DataTMP desc;

                    • Re: Seleção da ultima data com Valor
                      Alessandro Furtado

                      Bom dia.  Sim daria, mas tem que cuidar pois se um campo não for igual ele vai usar a data de hoje o que pode te gerar mais dados para o mesmo funcionário do que você precisa.

                       

                       

                       

                      AMF

                       

                       

                       

                       

                       

                       

                       

                      De: Hamilton Junior 

                      Enviada em: segunda-feira, 29 de dezembro de 2014 09:20

                      Para: ALESSANDRO FURTADO

                      Assunto: Re:  - Seleção da ultima data com Valor

                       

                       

                       

                       

                            

                       

                            

                        <http://community.qlik.com/resources/images/palette-1004/headerLogo-1391206184624-QlikCommunity_logo.gif>

                        • Re: Seleção da ultima data com Valor
                          Hamilton Junior

                          Voce tem alguma solução para quando eu tenho vários campos na tabela? ao contrario do que eu coloquei na resposta acima, eu coloco o AND no IF e não o OR

                           

                          if(Previous(funcionario) = funcionario

                              and Previous(id_numemp)=id_numemp

                              and Previous(id_tipcol)=id_tipcol

                              andPrevious(SEQALT)=SEQALT

                           

                          O problema é que tenho muitos dados, esta difícil validar isto.

                            • Re: Seleção da ultima data com Valor
                              Alessandro Furtado

                              Eu fiz um modelo de RH mas sempre usava a comparação do funcionário e não ele + outros campos.  Voce precisa validar todos se são iguais?

                               

                               

                               

                              AMF

                               

                               

                               

                              De: Hamilton Junior 

                              Enviada em: terça-feira, 30 de dezembro de 2014 17:51

                              Para: ALESSANDRO FURTADO

                              Assunto: Re:  - Seleção da ultima data com Valor

                               

                               

                               

                               

                                    

                               

                                    

                                <http://community.qlik.com/resources/images/palette-1004/headerLogo-1391206184624-QlikCommunity_logo.gif>

                                • Re: Seleção da ultima data com Valor
                                  Hamilton Junior

                                  Isso mesmo Alessandro, eu tenho várias tabelas que trabalham com históricos, mesma ideia do salario,

                                  exemplo, histórico de empresa, nela mostra todas as transferencias de filial que o funcionário teve, alguns campos que tenho nessa tabela é o codigo do funcionario, empresa, unidade, data, motivo, cargo, etc. Acredito que os campos sejam todos iguais para as linhas. Acha que eu posso usar a mesma logica?

                                  • Re: Seleção da ultima data com Valor
                                    Hamilton Junior

                                    Você tinha Razão, alguns dados Duplicaram, retirei os AND e deixei apenas como você sugeriu, porém carregando todos os campos da tabela:

                                    Vou validar os dados durante a tarde para ver se as informações estão coerentes.

                                     

                                     

                                     

                                     

                                     

                                    Tmp_HIST_LOCAL_R038HLO:

                                    LOAD

                                         id_numemp,

                                         id_tipcol,

                                         id_numcad, 

                                         R038HLO_TABORG,

                                         id_numloc,

                                         R038HLO_CONTOV,

                                         R038HLO_CONTOS,

                                         R038HLO_STAHIS,

                                         R038HLO_LOCTRA,

                                         R038HLO_MOTALT,

                                        Date#(dataTMP)                                                                 as Data_Ini,

                                        if(Previous(id_numcad) = id_numcad

                                         ,date#(Previous(dataTMP)),date(Today()))    as Data_Fim

                                    Resident HIST_LOCAL_R038HLO Order by id_numcad,dataTMP desc;

                                    HIST_LOCAL_ATUAL:

                                    NoConcatenate

                                    LOAD

                                      *,

                                      MonthStart(addmonths(Data_Ini, IterNo()-1))                                       as data

                                    Resident Tmp_HIST_LOCAL_R038HLO

                                    WHILE MonthStart(addmonths(Data_Ini, IterNo()-1)) < Data_Fim;

                                    DROP Tables HIST_LOCAL_R038HLO,Tmp_HIST_LOCAL_R038HLO;

                                    DROP Fields Data_Ini, Data_Fim;

                                      • Re: Seleção da ultima data com Valor
                                        Alessandro Furtado

                                        Hamilton,

                                         

                                        o RH que fiz foi na base da Sênior / Vetorh.  Os históricos de transferências, cargos , centros de custos, salários nominais estão todos em tabelas com a empresa, funcionário , data inicial , e valor (salario / CC / cargo,...).

                                         

                                        Eu sempre usava como comparativo uma chave  empresa & '-' & funcionário e deu tudo certo.

                                         

                                        Pelo que vi na sua tabela (R038HLO - histórico local de trabalho) você também esta fazendo sobre o Sênior.

                                        Talvez você devesse adicionar a empresa ao código do funcionário (salvo na sua base somente tiver uma empresa).

                                        AMF

                                          • Re: Seleção da ultima data com Valor
                                            Hamilton Junior

                                            Bom dia,

                                            você tem razão Alessandro, estou utilizando a Base Sênior / Vetorh, conhecendo ela ainda pois é um pouco complicada. Hoje temos apenas uma empresa cadastrada, estou utilizando os campos de numero da empresa, tipo do colaborador, numero do cadastro, codigo do centro de custo, o sistema gerou 18 chaves sintéticas, achei de mais.

                                            Em todo caso, eu carrego a tabela inteira e dentro o if eu apenas comparo if(Previous(id_numcad) = id_numcad) e os valores batem. Acredito que seja só questão de melhorar a estrutura agora.

                                             

                                            Sem título.png

                                              • Re: Seleção da ultima data com Valor
                                                Alessandro Furtado

                                                Boa noite Hamilton.

                                                 

                                                Eu juntei em uma tabela chamada Movimentacao as informações dos históricos de local de trabalho, CC , salario nominal, etc... ) eu criei a chave NUMEMP & '-' & NUMCAD mais o período (ano e mês) destas tabelas (eu criei usando o iterno() com as datas iniciais e finais delas...). Ela se linka com a tabela funcionário e calendário.

                                                 

                                                Assim, toda vez que eu selecionar um ano,mês, eu vou ter as informações de CC, local de trabalho,etc.. do funcionário naquele mês. Nesta tabela movimentação eu ainda concateno as ferias,afastamentos,demissão,atestados,cursos (treinamento),etc... 

                                                 

                                                Assim sei o que aconteceu a cada mês.

                                                 

                                                Att,

                                                 

                                                AMF