17 Replies Latest reply: Apr 11, 2018 9:12 AM by Felip Drechsler RSS

    Classificar através de expressão

    Paulo Roberto

      Pessoal bom dia,

       

      Tenho um gráfico que conta as Parts ao longo do tempo, e minha dimensão é calculada, sendo ela:

      = if ( not isNull ( [Tarefa] ) and [Tarefa] <> '' ,   Date ( [Mes_Falha]  , 'MMM/YYYY'  )  )

       

      Pois preciso contar as Parts somente quando contém algo na tarefa (ou não é nula ou não é vazia)

      Expressão: Count ( Parts )

       

      Porém, fazendo assim na dimensão, os meses acabam ficando duplicados, como por exemplo:

       

      a.png

      Em contrapartida, dessa maneira consigo Classificar por valor numérico e atende a ordem cronológica.

       

      Tentei alterar a dimensão para:

      = if ( not isNull ( [Tarefa] ) and [Tarefa] <> '' ,   text ( Date ( [Mes_Falha]  , 'MMM/YYYY'  )  )  )


      Isso resolve meu problema de agregação, mas não consigo ordenar a dimensão de maneira correta.


      Tentei fazer um match dos valores na Classificação por Expressão mas não deu certo!


      Poderiam me ajudar?

       

      Paulo.

        • Re: Classificar através de expressão
          THIAGO TEIXEIRA

          Paulo, lembro desse seu problema...

           

          Faça um teste:

          Mantenha como dimensão [Mes_Falha] - sem o if feito acima.


          Como expressão use o seguinte:

          Count(if(Not IsNull([Mes_Falha]),Tarefa)


          Daí seu problema de classificação deve cessar.

          • Re: Classificar através de expressão
            Felip Drechsler

            Imagino que seu mês esteja duplicando pois sua dimensão de data retorna vários valores.

             

            Exemplo:

            Se você tiver um calendário com várias datas

             

            01/01/2018

            02/01/2018

            03/01/2018

            04/01/2018


            Se eu fizer a dimensão em cima desses valores, apenas formatando a data como você está fazendo irá "multiplicar" os valores. Na verdade está correto, pois há valores diferentes de datas, apenas formatados diferente.


            É necessário criar uma data única para utilizar como dimensão de mês.


            Usando o código abaixo:

            load

            *,

            MonthStart(Data) as MesAno;

            Load * Inline

            [

            Data,Valor

            01/01/2018,1

            01/04/2018,3

            01/05/2018,4

            01/06/2018,5

            ];

             

            sample.png

             

            A dimensão MonthStart(Data) as MesAno me retorna apenas um valor com a soma de todos.

            O gráfico da direita apresenta a dimensão de mês com um único valor, enquanto o da esquerda está próximo do que você está fazendo.


            Espero ter ajudado.


            Felipe.

              • Re: Classificar através de expressão
                Paulo Roberto

                Felipe, obrigado pela resposta!

                 

                Não tenho muito conhecimento teórico de Qlik, mas vejamos se consigo te explicar a minha realidade:

                 

                Tenho um campo de Entrega do produto (data)

                Ex:

                Entrega

                07/2016

                04/2001

                04/2006

                 

                E para cada produto tenho um campo que me diz o mês de falha deste produto, porém este valor varia de 1 a 240 para todo produto, então consequentemente os valores de Mes de Falha irão se repetir, por exemplo:


                Entrega    Mes_Previsao       Mes_Falha

                05/2008            4                   09/2008

                08/2001            5                   01/2002

                01/2008            8                   09/2008


                Os registros são diferentes, pois são produtos com IDs diferentes e datas de entrega diferentes, mas em determinada previsão, eles irão falhar na mesma data, e preciso agregar esses valores para ter a visão de quantos produtos irão falhar naquela determinada data...


                Consegui esclarecer?

                  • Re: Classificar através de expressão
                    Felip Drechsler

                    Entendi sua necessidade Paulo,

                     

                    Porém o que pode estar acontecendo é que a sua data de onde você deriva os campos Entrega e Mes_Falha, pode acontecer de serem dias distintos, fazendo com que os campos tenham valores em formato numérico diferentes.

                     

                    Os campos de data no qlik são representados por texto e número, sendo assim, as suas datas podem apresentar o mesmo texto mas não o mesmo número, sendo assim diferentes.

                    Exemplo

                     

                    Data: 01/01/2018 e 02/01/2018

                     

                    Fazendo um campo data deles dois com o formato mês ano eles ficariam em representação dupla

                    01/01/2018 - 43101

                    02/01/2018 - 43102

                     

                    E quando você formata o campo de data para apenas conter o mês ano, o Qlik fará dois campos em cima do número, apesar de ele ser igual textualmente.

                     

                    Você consegue disponibilizar o arquivo para poder dar uma olhada?

                     

                    Felipe.

                      • Re: Classificar através de expressão
                        Paulo Roberto

                        Ah, entendi!! De forma embutida, são registros diferentes...

                         

                        Deve ser por isso que transformando para texto, as duplicatas eram removidas, porém ai eu não conseguia ordenar de maneira correta.. Seria viável converter para texto como:

                         

                        = if ( not isNull ( [Tarefa] ) and [Tarefa] <> '' ,  Text ( Date ( [Mes_Falha]  , 'MMM/YYYY'  )  ) )


                        E aplicar uma classificação através de match ou alguma solução de expressão?


                        Posso disponibilizar sim, segue anexo



                          • Re: Classificar através de expressão
                            Felip Drechsler

                            Olá Paulo,

                             

                            Estava olhando seus dados e eles parecem estar um pouco estranhos.

                            Vejo que para uma data de entrega, está sendo atrelada várias datas de entregas que ate onde entedi, estão todas as possibilidades do seu calendário.

                             

                            Veja se faz sentido a associação que está no excel (simplesmente criei uma tabela simples e coloquei os dados das datas de entrega e falha e a tarefa).

                             

                            Felipe.

                              • Re: Classificar através de expressão
                                Paulo Roberto

                                Felip, dei uma olhada no excel, pra mim não faz muito sentido pois a informação que relaciona o Mes_Entrega e o Mes_Falha é o campo numérico que citei que varia de 1 a 240 para todos os registros. (campo Mes).

                                 

                                Existem no documento 3 datas:

                                 

                                Data de Entrega (É a data completa da entrega do produto):

                                Ex: 01/04/1999

                                 

                                Mês Entrega (É apenas um campo derivado da Data de Entrega que apresenta somente mês e ano)

                                Script: Date([T-Zero], 'MM/YYYY') as Mes_Entrega //No caso T-Zero é como a Data de Entrega veio da fonte, mas nada mais é do que: T-Zero = Data de Entrega

                                Ex: 04/1999

                                 

                                Mês Falha (É o mês e ano que o produto vai falhar, que adiciona o valor do campo Mes ao campo Mes Entrega)

                                Script: Date(addmonths([Mes_Entrega], [Mês]), 'MM/YYYY') as Mes_Falha

                                Ex:

                                para Mês: 1 -> Mes_Falha: 05/1999

                                para Mês: 2 -> Mes_Falha: 06/1999

                                para Mês: 7 -> Mes_Falha: 11/1999


                                Eu sei que é bem confuso, mas foram as alternativas que consegui utilizar usando pouco conhecimento... hehe

                      • Re: Classificar através de expressão
                        Paulo Roberto

                        felipedl e thiago.justen

                         

                        Senhores, volto a comentar aqui para agradecer a atenção e compartilhar a solução, talvez não a mais adequada mas funcional, pois é algo que estava precisando com uma certa urgência.

                         

                        Na criação do campo Mes_Entrega, deixei de utilizar o comando Date() para evitar os dados embutidos, fiz da seguinte maneira:

                         

                        Date#(Month([T-Zero]) &'/'& Year([T-Zero]), 'MMM/YYYY') as Mes_Entrega

                         

                        Utilizei as funções Month() e Year() para ler apenas mês e ano da data completa, concatenei uma barra no meio e fiz a interpretação da entrada de texto através do Date#(). Não sei dizer o por que de ter funcionado com o Date#() e não com o Date(), talvez pelo fato da entrada do primeiro ser texto e a do segundo numérica.

                         

                        Assim as duplicatas do Mes_Falha foram removidas, e como ficou formatado como um campo de data pude classificar em ordem cronológica sem problemas.

                         

                        Reitero o agradecimento pela atenção, abraço!