6 Replies Latest reply: Jun 18, 2012 8:56 AM by calangokid RSS

    Intervalo de Datas

      Senhores, boa noite.

       

      Estou com a seguinte dúvida...tenho uma tabela de excel com as seguintes informações..

      Hóspede: Paulo Cruz, DataEntrada: 21/11/2010, Saída: 25/11/2010.

       

      Logo, queria um gráfico em linha que mostrasse que tenho 1 hospede dia 21, 22, 23, 24 e 25.

      Exatamente como no Exemplo abaixo feito em Excel.

       

      error loading image

      Obrigado desde já,

      Fabio Alamini

        • Intervalo de Datas

          Fabio,

          Esse é um típico problema que na primeira olhada parece ser bem simples, mas na verdade não é.

          Fiquei curioso com o problema, e resolvi simular por aqui.

          Consegui resolver, com algumas etapas, usando tabela temporária.

          Segue o script abaixo:

          ------------------------------------------------------------------------------------------------------------

          Clientes:
          LOAD Item,
          Cliente,
          Data_Entrada,
          Data_Saida
          FROM
          [teste-datas.xls]
          (biff, embedded labels, table is Plan1$);


          Datas:
          load
          distinct Data_Entrada as Data
          resident
          Clientes;

          Datas:
          load
          distinct Data_Saida as Data
          resident
          Clientes;

          Agenda_Temp:
          noconcatenate Load
          Data
          resident
          Datas;
          left join
          load * resident Clientes;

          Drop table Clientes;

          Agenda:
          Load
          Data,
          if (Data_Entrada <= Data and Data_Saida >=Data, 1,0) as Hospedes
          resident Agenda_Temp;

          Drop Table Agenda_Temp;

           

          ------------------------------------------------------------------------------------------------

          Foi um bom exercicio. Vai ser util para mim, tambem. Provavelmente deve ser possivel otimizar o codigo, para nao utilizar essas tabelas temporarias.

          Use um gráfico com a dimensao: Data e a expressao: sum(Hospedes)

          Se precisar, posso mandar o qvw (já na versao qlikview 10) do projeto para voce.

           

           

            • Intervalo de Datas
              fsimoes

              Fábio,

              O exemplo do Ricardo é melhor do que eu lhe mandei.

              Só tem o caso das datas intermediárias que ainda não existirão, caso precise delas precisará gerar o calendário como no exemplo que lhe enviei.

                • Intervalo de Datas

                  Bem observado, Fabio Simoes

                  Para as datas nao existentes (Data de Entrada ou Data de Saidas) nao apareceriam no grafico.

                  Será realmente necessário nesse caso utilizar um calendario, que contem todas as datas.

                   

                  • Intervalo de Datas
                    Caique Zaniolo

                    e ai Fábio?

                    não vi o seu exemplo, mas parece um caso clássico de Intervalmatch com uma tabela calendar master entre a menor e a maior data possível.

                    Abraços

                      • Intervalo de Datas

                        Senhores..

                        Com isto que o Tonial me passou funcionou redondinho..

                        Obrigado pela ajuda...

                         

                        DadosHist:
                        LOAD * INLINE [
                        Hospede, Entrada, Saída
                        Hospede 1, 20/11/2010, 25/11/2010
                        Hospede 2, 23/11/2010, 30/11/2010
                        ];


                        Calendario:
                        LOAD
                        Date(MonthStart(Today())+(RowNo()-1)) AS Data
                        Autogenerate(30);


                        //exit script;
                        DadosHist:
                        LEFT JOIN (DadosHist)
                        IntervalMatch (Data) LOAD Entrada, Saída RESIDENT DadosHist;

                        Dados:
                        LEFT JOIN (Calendario) LOAD DISTINCT Data, Hospede RESIDENT DadosHist;

                        DROP TABLE DadosHist;

                         

                          • Re: Intervalo de Datas

                            Olá pessoal,

                            Estou tentando adaptar esse script para uma situação que tenho. Preciso acompanhar o histórico do saldo de estoque, relatando a evolução, mas na base de dados só temos informação de saldo quando existe movimentação. Entretanto o saldo se mantém mesmo sem movimentação. Tentei fazer isso usando o intervalmatch e um calendário e a vaca foi pro brejo pois o volume de registro ultrapassou os 800 milhões de registros. Estou encaminhano abaixo meu script pois já não sei mais o q fazer e nem pra qual santo rezar!!!

                            Abraços e obrigado

                             

                             

                            SALDO_TEMP:

                            LOAD ID_EMPRESA,

                                 ID_ALMOXARIFADO,

                                 ID_PRODUTO,

                                 DT_HISTORICO_SALDO AS DT_INICIAL,

                                 QT_HISTORICO_SALDO,

                                 VL_MEDIO

                            FROM [..\QVD\HIST_SALDO.QVD] (qvd)

                            WHERE DT_HISTORICO_SALDO >= date('01/01/2012');

                             

                             

                            //FAÇO ISSO PARA IDENTIFICAR ATÉ QUANDO O ESTOQUE SE MANTEVE INALTERADO

                            SALDO:

                            LOAD *, IF( ID_EMPRESA = Previous(ID_EMPRESA) AND ID_ALMOXARIFADO = Previous(ID_ALMOXARIFADO) and ID_PRODUTO = Previous(ID_PRODUTO), date(Previous(DT_INICIAL)-1), Today() ) AS DT_FINAL

                            RESIDENT SALDO_TEMP

                            ORDER BY

                                 ID_EMPRESA DESC,

                                 ID_ALMOXARIFADO DESC,

                                 ID_PRODUTO DESC,

                                 DT_INICIAL DESC;

                            DROP TABLE SALDO_TEMP;

                             

                            //MONTO UM CALENDÁRIO COM TODAS AS DATAS ATÉ A DATA ATUAL

                            MinMaxTab:

                            LOAD Min([DT_INICIAL]) as MinTaskStart

                            RESIDENT SALDO GROUP BY 1;

                            Let varMinDate = peek('MinTaskStart');

                            Let varMaxDate = TODAY();

                            drop table MinMaxTab;

                             

                            LET VMinOrderDate = date($(varMinDate));

                             

                            Calendario:

                            Load  date('$(VMinOrderDate)' + Recno() - 1) as Data

                            AutoGenerate (varMaxDate - varMinDate + 1);

                             

                             

                             

                             

                             

                            //AQUI ENTRA O INTERVALMATCH PARA PREENCHER TODAS AS DATA DO INTERVALO

                            //exit script;

                            SALDO:

                            LEFT JOIN (SALDO)

                            IntervalMatch (Data)

                            LOAD DT_INICIAL, DT_FINAL

                            RESIDENT SALDO;