14 Replies Latest reply: Mar 6, 2015 8:19 AM by Antonio Mercadante RSS

    Gravar foto mensal

    Antonio Mercadante

      Sr.(as)

      Boa tarde!

       

      Alguém pode me orientar a melhor forma de resolver a necessidade abaixo.

       

      Tenho os seguintes campos:

       

      Numero Contrato,

      Data Venda Contrato,

      Data Pedido Cancelamento,

      Data Desistência do Cancelamento,

      Data Cancelamento Contrato,

      Etc.

       

      Preciso armazenar uma foto mensal destes dados

       

      Pensei em duas formas de resolver

       

      1º Opção

      Criar uma variavel com o Mês/Ano e utilizar a mesma para compor o nome do QVD. Desta forma quando virar o mês, um novo qvd será criado.

      Só que as informações será duplicadas. Exemplo 50.000 linhas no qvd Janeiro 50.000 linhas no qvd de fevereiro e assim por diante.

       

      2º Opção

      Criar uma chave com todos os campos mais uma data de carga, desta forma é possivel criar uma validação e a linha sera gravada se houver alteração de algum campo.

      Assim será duplicado somente os registros que sofreram alterações.

       

       

      OBS.: A Data Venda Contrato, Data Pedido Cancelamento e Data Cancelamento compõe meu calendário.

       

       

      Quando selecionar um mês do meu calendário, quero saber quantos contratos foram vendidos, quantos foram cancelados, quantos desistiram do cancelamento e assim por diante.

       

       

      Alguém pode me mostrar qual caminho seguir?

       

       

      Obrigado!

      Mercadante

        • Re: Gravar foto mensal
          Alessandro Furtado

          Antonio,

           

           

           

          Eu fiz uma rotina para tirar uma foto diária do estoque.

           

           

           

          Eu tenho um modelo que roda todo dia as 23:55 e grava a posicao em qvd.  Ele roda bem rápido (menos de 1minuto...).

           

           

           

          Seria pegar a rotina e adaptar para mensal....

           

           

           

           

           

           

           

           

           

          //************************************************

          //************************************************

          ODBC CONNECT TO  (XUserId is DeKCPWdNHLaQHBA, XPassword is RbOBHWdNHLaQXfC);

          //************************************************

          //************************************************

          //************************************************

          //

          Let Data = year(today()1) & '-' & num(month(today()1),'00') & '-' & num(day(today()+1),'00');

          //

          Item:

          LOAD

              "COD_EMPRESA" & '-' & "COD_ITEM"  as PK_Item,

              "QTD_SALDO"                       as Item_Saldo_Estoque,

              "COD_LOCAL"                       as PK_Local,

              "IES_SITUA_QTD"                   as Item_Estoque_Situacao;

          SQL SELECT "COD_EMPRESA","COD_ITEM","COD_LOCAL","IES_SITUA_QTD","QTD_SALDO" FROM LOGIX."ESTOQUE_LOTE_ENDER";

           

          PosicaoEstoque:

          LOAD

              PK_Item,

              PK_Local,

              date(today()+1,'DD/MM/YYYY')      as PosicaoEstoque_Data,

              sum(Item_Saldo_Estoque)           as PosicaoEstoque_Saldo

          resident Item Where PK_Local = 9 or PK_Local = 1 or PK_Local = 2 or PK_Local = 3 group by PK_Item,PK_Local;

          //

          trace '$Data';

          store PosicaoEstoque into posicaoestoque\PosicaoEstoque$(Data).qvd (qvd);

           

           

           

           

           

           

           

           

          Att,

           

           

           

           

           

          AMF

           

           

           

           

           

          De: Antonio Mercadante 

          Enviada em: terça-feira, 3 de fevereiro de 2015 16:46

          Para: ALESSANDRO FURTADO

          Assunto:  - Gravar foto mensal

           

           

           

           

           

           

          <http://community.qlik.com/?et=watches.email.thread> Qlik Community

           

           

           

           

           

           

          Gravar foto mensal

           

           

          criado por Antonio Mercadante <http://community.qlik.com/people/Mercadante?et=watches.email.thread>  em Qlik Brasil - Visualize a discussão completa <http://community.qlik.com/message/706613?et=watches.email.thread#706613>

          • Re: Gravar foto mensal
            Thiago Manoel Gonçalo

            Antonio, bom dia!

             

            Criei uma aplicação onde eu guardo uma foto diária das informações, porem seria tranquilo aplicar para o mês. Neste caso vc terá a duplicidade dos dados, porem este ira gerar um problema apenas se a sua base for enorme, Caso não, num terá problema de desempenho pois vc faz antes num qvd e depois fica tranquilo pra puxar pra um qvw.

             

            Basicamente eu faço o seguinte.

             

            Seto uma variável QVD_Date = Text(Date(Today(),'YYYY-MM-DD')); neste caso o ideal seria vc fazer um monthname aii que a data viria ex. fev/2015

             

            aii na hora de gravar a tabela vc usa um: STORE tabela INTO caminho\tabela_$(QVD_Date).qvd;

            isso vai gravar o arquivo com a data fev/2015, quando virar o mes mar/2015

             

            e na tabela que vc vai gravar.. vc adiciona um campo no load

            load

            *,

            monthname(today)    as DATA_REFERENCIA

             

             

            quando vc for puxar a informação vc puxa todos os arquivos: desta forma

             

            load * from

            caminho\tabela_*.qvd(qvd);

             

            ai a visão vai carregar os dados em duplicidade..  porem como vc quer trabalhar com a FOTO MENSAL.. vc coloca na visão uma lista contendo DATA_REFERENCIA.. com a ultima data_referencia setado da seguinte forma. que um valor sempre esteja setado e que nao possa setar dois ao mesmo tempo (propriedades da lista)

             

            então dentro da mesma visão vc poderá trabalhar com as fotos simultaneamente, inclusive fazendo comparações entre elas, usando o estado alternativo (alternate state)..

             

            espero ter ajudado..

             

            tambem criei uma rotina para que possa deletar os arquivos mais antigos, ou seja, a partir de uma quantidade de arquivos definida...

             

            se quiser me avise que te explico.

             

            Abraços

            • Re: Gravar foto mensal
              Raphael Pacheco

              Veja se este exemplo que montei lhe atende!

               

              Abraço! !

                • Re: Gravar foto mensal
                  Antonio Mercadante

                  Bom dia Raphael!

                   

                  Desculpe minha ignorância, mas nesse seu modelo se eu quiser ver algum status de um mês anterior como ele vai se comportar.

                  Porque digo isso,

                  Um cliente pode pedir o cancelamento e desistir posteriormente indeterminadas vezes. Quer dizer que o campo data pedido cancelamento pode ter varias datas.

                   

                  Não sei se consegui expor minha duvida

                    • Re: Gravar foto mensal
                      Raphael Pacheco

                      Bom dia Antonio Mercadante.

                       

                      Bom, explicando o exemplo que montei.

                      O primeiro load que faço é Responsável por gerar a foto mensal. Existe a variável Mês_Base que irá gerar Qvds conforme o mês que seja feita a carga.

                      Após isto, com um diretório contendo todos os meses carregados, eu leio estas informações novamente (Aba Agrupamento) e agrupo todas as informações apenas pelo número do contrato.

                      As demais datas eu pego apenas a mais atual, ou seja, mesmo que mude, ele irá verificar esta alteração e irá mudar a data.

                      Obs: estou contando com o fato de não existir data retroativa, ex: se hoje foi add a data "09/02/2015" e amanhã ela mudou para "01/02/2015", ele irá pegar a maior data.

                       

                      Bom, espero ter ajudado!

                       

                      Abraço!

                        • Re: Gravar foto mensal
                          Antonio Mercadante

                          Entendi,

                           

                          Mas não resolveria meu caso. Estou partindo para a foto diária.

                          Criei uma chave com os campos que podem sofrer alterações, e comparo diariamente. se houve alteração na data ele grava, se não descarta. Acredito que desta forma meu QVD não vai duplicar a cada mês, pois hoje já carrego 55.000 linhas.

                           

                          Ainda não esta muito claro como vou trabalhar com o calendário. Pois na mesma tabela fato tenho quatro campos de data que compõem meu calendário. 

                            • Re: Gravar foto mensal
                              Raphael Pacheco

                              Bom Antonio, pensei que tinha visto no título do post que era uma foto mensal. Mas agora percebi que a sua necessidade é obter a foto diária.

                              Bom, mesmo sendo assim, creio que todas as mudanças ocorridas seguem uma ordem cronológica. Sendo assim, você pode utilizar esta lógica para pegar os dados únicos e atualizados.

                               

                              Caso não tenha entendido bem a sua necessidade, por favor nos passe mais informações sobre ela

                      • Re: Gravar foto mensal
                        Antonio Mercadante

                        Srs. Boa tarde!

                         

                        Consegui resolver em partes meu problema.

                         

                        Criei uma primeira carga concatenando todos os campos da minha tabela.

                        Agora eu faço um

                        [base]

                        Load

                             chave

                             .   

                             .

                        residente

                             [arquivo];

                        concatenate (base)

                        load

                        chave

                        *

                        *

                        where

                        not exists ('chave', <campos>);

                        select

                        ......

                         

                        Desta forma ele incrementa somente se houve alteração na linha.

                         

                        Porem me deparei com outro problema e não estou vendo saída.

                         

                        Um dos campos que compoem a chave é o DIA_VENCIMENTO

                        peguei um cliente que o dia vencimento era 5 alterei para 10 e minha carga gravou as duas linhas.

                        Quando eu volto ele para o dia 5 ele não grava mais, pois já tenho esta linha na minha tabela.

                         

                        Alguém tem ideia de como posso resolver isso?