26 Replies Latest reply: Oct 22, 2013 4:10 PM by Kaauan Matzenbacher RSS

    Função ALL

    marcos nakao

      Srs. Bom dia.

       

      Sou novo no Qlikview e estou com uma função que esta me fazendo quebrar a cabeça. Preciso trazer os valores de VALORPREV que estão na FUNÇÃO = 9 somados aos valores das funções menores do que 9 que tem CLASSDESPESA = '4.4.90.51' E CLASSDESPESA = '4.4.90.512. Esse CLASSDESPESA é uma classificação existente dentro da FUNÇÃO. No script abaixo consigo fazer isso usando a função All, porém foi necessário mudar a consulta e agora preciso selecionar outras informações e essa função não se aplica mais. Segue o script.

       

      if(funcao.COD_FUNCAO = 9, sum(ALL if((classdespesa.CD_CLASSDESPESA = '4.4.90.51' or classdespesa.CD_CLASSDESPESA = '4.4.90.52')or funcao.COD_FUNCAO = 9, recfindespesa.VALORPREV)), 

        if(funcao.COD_FUNCAO < 9, sum(if((classdespesa.CD_CLASSDESPESA = '3.1.90.11' or

        classdespesa.CD_CLASSDESPESA = '3.1.90.13' or

        classdespesa.CD_CLASSDESPESA = '3.1.90.16' or

        classdespesa.CD_CLASSDESPESA = '3.3.50.41.03' or

        classdespesa.CD_CLASSDESPESA = '3.3.90.30' or

        classdespesa.CD_CLASSDESPESA = '3.3.90.36' or

        classdespesa.CD_CLASSDESPESA = '3.3.90.39' or

        classdespesa.CD_CLASSDESPESA = '4.5.90.61'), recfindespesa.VALORPREV)), Sum(recfindespesa.VALORPREV)))

       

      Alguém tem alguma ideia?

      Desde já obrigado.

        • Re: Função ALL
          Raphael Pacheco

          Bom dia Marcos.
          Em funções de agregação simples (Sum(), Avg(), etc) podemos utilizar Distinct, All e Total.
          Distinct serve para trazer a agregação por valores distintos. Já o All trará todos os valores do seu Data Cloud ignorando as seleções existentes no documento. Já o Total trará os totais de uma dimensão para uma determinada seleção.

          • Re: Função ALL
            Cesar Anton

            Marcos!

            É claro que fica difícil sugerir algo sem estar vendo o resultado para correções ou sem conhecer a estrutura que você tem, mas segue abaixo uma sugestão, usando somente setanalisys

             

            Soma todos os valores cuja função são diferentes de 9 com classdespesa igual aos dois valores informados

            sum({< (COD_FUNCAO -= {9} , CD_CLASSDESPESA = {"4.4.90.51","4.4.90.52"} >} VALORPREV)

            +

            Soma todos os valores da função igual a 9 independente do classdespesa

            sum({< COD_FUNCAO = {9} >}

            +

            Soma todos os valores da função menor que 9 que sejam diferentes das duas classdespesa calculadas acima na função igual a 9

            sum({< (COD_FUNCAO = {"<9"} , CD_CLASSDESPESA -= {"4.4.90.51","4.4.90.52"} >} VALORPREV)

              • Re: Função ALL
                marcos nakao

                Bom dia Cesar e raphael.

                 

                Utilizei as funções surgeridas, porém não funcionou. Como disse sou iniciante e estou assimilando grande parte das coisas. Bom, continuando com o problema, peguei o script acima, retirei os comentarios e adaptei os campos de dados com os nomes corretos. O estranho foi que o QV não reconheceu o comando -=. Lembrando que estou fazendo esta programação dentro da aba Expressão no item Definição.

                 

                Obrigado pelo apoio.

                  • Re: Função ALL
                    Luis Cavaleiro

                    em vez de CD_CLASSDESPESA -= {"4.4.90.51","4.4.90.52"} , use


                    CD_CLASSDESPESA = {*} - CD_CLASSDESPESA = {"4.4.90.51","4.4.90.52"} .

                     

                     

                    LC

                      • Re: Função ALL
                        marcos nakao

                        luis

                         

                        ele já da erro no incio da função, em COD_FUNCAO -= {9}. O erro apresentado é: error in set modifier expression.

                          • Re: Função ALL
                            Cesar Anton

                            Bom dia!

                             

                             

                             

                            Estranho não ter funcionado, utilize a sugestão do Luis Cavaleiro que também deveria funcionar

                             

                            CD_CLASSDESPESA = {*} - CD_CLASSDESPESA = {"4.4.90.51","4.4.90.52"} .

                             

                             

                             

                             

                             

                            De: marcos nakao 

                            Enviada em: sexta-feira, 18 de outubro de 2013 10:09

                            Para: Cesar Anton

                            Assunto: Re:  - Função ALL

                             

                             

                             

                             

                             

                             

                            <http://community.qlik.com/> QlikCommunity

                             

                             

                             

                            Função ALL

                             

                             

                            reply from marcos nakao <http://community.qlik.com/people/marcosnakao?et=watches.email.thread>  in Qlikview Brasil - View the full discussion <http://community.qlik.com/message/408633?et=watches.email.thread#408633>

                              • Re: Função ALL
                                Luis Cavaleiro

                                Podes anexar a expressão de setanalysis que estás a usar sff?

                                 

                                Obg

                                  • Re: Função ALL
                                    marcos nakao

                                    Segue o setanalysis:

                                     

                                    sum({< ( funcao.COD_FUNCAO -= {9} , classdespesa.CD_CLASSDESPESA = {"4.4.90.51","4.4.90.52"} >} recfindespesa.VALORPREV)

                                     

                                    +

                                     

                                    sum({< funcao.COD_FUNCAO = {9} >}

                                     

                                    +

                                     

                                    sum({< (funcao.COD_FUNCAO = {"<9"} , classdespesa.CD_CLASSDESPESA -= {"4.4.90.51","4.4.90.52"} >} recfindespesa.VALORPREV)

                                     

                                    Após a sugestão do luis, ficou assim:

                                     

                                    sum({< ( funcao.COD_FUNCAO -= {9} , classdespesa.CD_CLASSDESPESA = {*} - classdespesa.CD_CLASSDESPESA = {"4.4.90.51","4.4.90.52"} recfindespesa.VALORPREV)

                                     

                                    +

                                     

                                    sum({< funcao.COD_FUNCAO = {9} >}

                                     

                                    +

                                     

                                    sum({< (funcao.COD_FUNCAO = {"<9"} , classdespesa.CD_CLASSDESPESA = {*} - classdespesa.CD_CLASSDESPESA = {"4.4.90.51","4.4.90.52"} recfindespesa.VALORPREV)

                                     

                                    lembrando que el não deixa passar nem no primeiro -=

                                      • Re: Função ALL
                                        Luis Cavaleiro

                                        tenta

                                         

                                        sum({< ( funcao.COD_FUNCAO {*} - funcao.COD_FUNCAO = {9} , classdespesa.CD_CLASSDESPESA = {*} - classdespesa.CD_CLASSDESPESA = {"4.4.90.51","4.4.90.52"} recfindespesa.VALORPREV)

                                        +

                                        sum({< funcao.COD_FUNCAO = {9} >}

                                        +

                                        sum({< (funcao.COD_FUNCAO = {"<9"} , classdespesa.CD_CLASSDESPESA = {*} - classdespesa.CD_CLASSDESPESA = {"4.4.90.51","4.4.90.52"} recfindespesa.VALORPREV)

                                         

                                         

                                        outra hipótese é marcar (1 e 0) em script as linhas a somar e assim o cálculo em Set era mais directo

                                          • Re: Re: Função ALL
                                            marcos nakao

                                            Segue o print da minha tela onde estou fazendo a edição.

                                              • Re: Re: Função ALL
                                                Luis Cavaleiro

                                                Tenta assim:


                                                sum({< ( funcao.COD_FUNCAO -= {9} , classdespesa.CD_CLASSDESPESA -= {"4.4.90.51","4.4.90.52"} recfindespesa.VALORPREV)

                                                + ...

                                                 

                                                LC

                                                  • Re: Função ALL
                                                    Luis Cavaleiro

                                                    dessculpa é "=-" e não  "-="

                                                     

                                                    LC

                                                      • Re: Função ALL
                                                        Luis Cavaleiro

                                                        Marcos,

                                                         

                                                        esta sugestão resolveu o problema?

                                                         

                                                        LC

                                                          • Re: Função ALL
                                                            marcos nakao

                                                            continua dando o erro no =- . Tentei das duas maneiras.

                                                              • Re: Função ALL
                                                                Raphael Pacheco

                                                                Bom dia Marcos.

                                                                Tens como postar um QVW exemplo com dados fake para ficar mais fácil acharmos a solução do problema?

                                                                  • Re: Re: Função ALL
                                                                    marcos nakao

                                                                    Segue o qvw.

                                                                      • Re: Re: Função ALL
                                                                        Cesar Anton

                                                                        Bom dia

                                                                        Por favor tente a expressão abaixo, pelo qvw que você mandou acho que é isso.

                                                                        Ainda assim, olhando melhor acho que na sua expressão original o que estava errado era o "encadeamento" dos if.

                                                                         

                                                                        Qual a ideia, quando a função for 9 vai ler os registro da função 9 desconsiderando as duas contas e vai somar com o total das duas contas sem levar em conta a função (inclusive a 9)

                                                                        Para as outras funções (<> 9), vai somar tudo exceto as duas contas que só devem ser somadas na função 9.

                                                                        Espero que seja isso, aqui funcionou

                                                                        Até mais

                                                                         

                                                                        if (funcao.COD_FUNCAO = '9',

                                                                            sum({$< classdespesa.CD_CLASSDESPESA = {"*"} -{"4.4.90.51","4.4.90.52"} > } recfindespesa.VALORPREV)

                                                                            +

                                                                            sum({$< classdespesa.CD_CLASSDESPESA = {"4.4.90.51","4.4.90.52"} > } total recfindespesa.VALORPREV),

                                                                            sum({$<classdespesa.CD_CLASSDESPESA = {"*"} -{"4.4.90.51","4.4.90.52"}> } recfindespesa.VALORPREV)

                                                                        )

                                                                         

                                                                          • Re: Função ALL
                                                                            marcos nakao

                                                                            Bom dia Cesar.

                                                                             

                                                                            Não sei se expliquei direito no inicio do post, então vou tentar novamente.

                                                                             

                                                                            Preciso que a função faça o seguinte: quando não tiver nenhuma seleção, ele vai ler todos os registros e dar o total. Quando estiver selecionado a função 9, ele vai somar todos os registros da 9 mais as contas "4.4.90.51" e "4.4.90.52" das outras contas. Quando houver qualquer outra seleção, ele vai somar tudo menos o que houver nessas contas. Desculpe se não expliquei isso direito no inicio do post. Com relação ao script, tentei aqui e dentro da ideia que vc pensou deu certinho aqui tb.

                                                                             

                                                                            Obrigado.

                                                                          • Re: Re: Re: Função ALL
                                                                            Raphael Pacheco

                                                                            Dá uma olhada nisso Marcos.

                                                                            Utilize a seguinte expressão:

                                                                            Sum({<FUNÇÃO={'9'}>} VALORPREV) + Sum({<FUNÇÃO={'<9'}, CLASSDESPESA={'4.4.90.51','4.4.90.512'}>} VALORPREV)
                                                                            
                                                                            

                                                                             

                                                                            Segue Também QVD Exemplo.

                                                                             

                                                                            Lembrando que não estou utilizando '$' ou All ou Total, pois não sei sua real necessidade. Mas caso você necessite dentro do seu projeto, explico novamente a função destas cláusulas:

                                                                            '$' e '1' quando usados em um set analysis significam '$' Contexto atual das seleções e '1' Contexto Total do Data Cloud.

                                                                            Existe tmbm '$_1' Que é o contexto das seleções anteriores onde o número irá representar a nível do contexto anterior.

                                                                             

                                                                            Já o All e o Total segue a mesma explicação que fiz no início do post

                                                                              • Re: Função ALL
                                                                                marcos nakao

                                                                                raphael,

                                                                                 

                                                                                Show sua explicação sobre os comandos. Nem sempre conseguimos absorver o que os comandos fazem pela explicação dos manuais ou no que achamos na internet.

                                                                                Quanto ao script, acho que foi a mesma situação do Cesar, onde vc não entendeu ( ou eu não passei direito) a real função do script. Veja o que escrevi no post dele:

                                                                                 

                                                                                "Preciso que a função faça o seguinte: quando não tiver nenhuma seleção, ele vai ler todos os registros e dar o total. Quando estiver selecionado a função 9, ele vai somar todos os registros da 9 mais as contas "4.4.90.51" e "4.4.90.52" das outras contas. Quando houver qualquer outra seleção, ele vai somar tudo menos o que houver nessas contas."

                                                                                 

                                                                                Obrigado

                                                                                  • Re: Re: Função ALL
                                                                                    Raphael Pacheco

                                                                                    Bom, agora acho que entendi a sua necessidade.

                                                                                    Segue a expressão:

                                                                                    If(IsNull(GetCurrentSelections()),
                                                                                     Sum(recfindespesa.VALORPREV),
                                                                                     If(funcao.COD_FUNCAO = 9
                                                                                      ,Sum({<funcao.COD_FUNCAO={'9'}>} recfindespesa.VALORPREV) + Sum({<classdespesa.CD_CLASSDESPESA ={'4.4.90.51','4.4.90.512'}>} recfindespesa.VALORPREV)
                                                                                      ,Sum({<funcao.COD_FUNCAO-={'9'}>} recfindespesa.VALORPREV) + Sum({<classdespesa.CD_CLASSDESPESA -={'4.4.90.51','4.4.90.512'}>} recfindespesa.VALORPREV)
                                                                                     )
                                                                                    )
                                                                                    

                                                                                     

                                                                                    Nela verificamos se há uma seleção, se não houver ele irá apenas somar o VALORPREV.

                                                                                    Senão ele verificará se a opção 9 está selecionada, caso estiver ele irá somar tudo que estiver nessa conta mais as CLASSDESPESA 4.4.90.51 e 4.4.90.512. E por último, se outras contas estiverem selecionadas ele irá somar tudo menos a opção 9 e as CLASSDESPESA citadas.

                                                                                     

                                                                                    Espero que agora seja isso rsrsrsrsr.

                                                      • Re: Re: Função ALL
                                                        Raphael Pacheco

                                                        Bom Marcos, então não entendi bem o teu problema.

                                                        Pelo que entendi você quer pegar a soma do VALORPREV, onde a Função seja = 9

                                                        Para isso segue o primeiro Set Analysis:

                                                        Sum({<funcao.COD_FUNCAO={'9'}>} recfindespesa.VALORPREV)
                                                        

                                                         

                                                         

                                                        Depois entendi que você quer somar este valor aos valores de  VALORPREV, onde a Função seja menor que 9 e CLASSDESPESA sejam = 4.4.90.51 e 4.4.90.512.

                                                         

                                                        Sendo assim, segue o segundo Set Analysis:

                                                        Sum({<funcao.COD_FUNCAO={'<9'}, classdespesa.CD_CLASSDESPESA ={'4.4.90.51','4.4.90.512'}>} recfindespesa.VALORPREV)
                                                        

                                                         

                                                        Foi isso que entendi, caso não seja, explique melhor para que possamos fechar este tópico.

                                                          • Re: Função ALL
                                                            marcos nakao

                                                            Raphael,

                                                             

                                                            Vou mudar a explicação para ver se facilito o entendimento.

                                                             

                                                            Situação 1 - Nenhuma seleção.

                                                             

                                                            Simples soma do VALORPREV e pelo que entendi fica assim:

                                                            Sum (recfindespesa.VALORPREV)

                                                             

                                                            Situação 2 - Selecionado função = 9.

                                                             

                                                            Soma do VALORPREV (com todas as CLASSDESPESA da função = 9) + as CLASSDESPESA = 4.4.90.51 e 4.4.90.52 de todas as outras funções.

                                                             

                                                            Suponho que fique assim:

                                                            Sum({<funcao.COD_FUNCAO={'9'}, classdespesa.CD_CLASSDESPESA ={'4.4.90.51','4.4.90.512'}>} recfindespesa.VALORPREV) 

                                                             

                                                            Este codigo não deu certo, por isso disse o suponho ...

                                                             

                                                            Situação 3 - Selecionado qualquer função que não seja a 9:

                                                             

                                                            Soma do VALORPREV da função escolhida - (menos) as CLASSDESPESA = 4.4.90.51 e 4.4.90.52.

                                                             

                                                            Novamente, suponho que fique assim:

                                                            if (funcao.COD_FUNCAO = '9',

                                                                sum({$< classdespesa.CD_CLASSDESPESA = {"*"} -{"4.4.90.51","4.4.90.52"} > } recfindespesa.VALORPREV)

                                                             

                                                            Bom, é isso. Mais uma vez peço desculpa se não soube explicar a situação, mas como disse sou iniciante e espero que possa num futuro proximo ajudar assim como vcs tem me ajudado.

                                                             

                                                            Obrigado desde já.

                                                              • Re: Função ALL
                                                                marcos nakao

                                                                Srs, com a ajuda de todos chegamos na função que resolveu o dito problema. Ela é a seguinte:

                                                                 

                                                                If(IsNull(GetCurrentSelections()),

                                                                  Sum(recfindespesa.VALORPREV),

                                                                  If(funcao.COD_FUNCAO = 9,

                                                                  Sum({<funcao.COD_FUNCAO={'9'}>} recfindespesa.VALORPREV) + Sum({<classdespesa.CD_CLASSDESPESA ={'4.4.90.51','4.4.90.52'}>} recfindespesa.VALORPREV),

                                                                  if(funcao.COD_FUNCAO <> 9,

                                                                  Sum({<funcao.COD_FUNCAO =- {'9'}>} recfindespesa.VALORPREV) - Sum({<classdespesa.CD_CLASSDESPESA ={'4.4.90.51','4.4.90.52'}>} recfindespesa.VALORPREV))))

                                                                 

                                                                Desde já obrigado.

                                                                Marcos Nakao

                                                        • Re: Função ALL
                                                          Kaauan Matzenbacher

                                                          Material com exemplos, sobre all e total pra reforçar!

                                                           

                                                          Set Analysis QlikView: Entendendo ALL e TOTAL | Pedro Elsner, Profissional de TI