Skip to main content
Announcements
YOUR OPINION MATTERS! Please take the Qlik Experience survey you received via email. Survey ends June 14.
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Função ALL

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.

1 Solution

Accepted Solutions
rphpacheco
Creator III
Creator III

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.

View solution in original post

26 Replies
rphpacheco
Creator III
Creator III

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.

cesarc2sistemas
Contributor III
Contributor III

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)

Anonymous
Not applicable
Author

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.

Not applicable
Author

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

Anonymous
Not applicable
Author

luis

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

cesarc2sistemas
Contributor III
Contributor III

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>

Not applicable
Author

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

Obg

Anonymous
Not applicable
Author

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 -=

Not applicable
Author

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