Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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
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.
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á.
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.
Material com exemplos, sobre all e total pra reforçar!
Set Analysis QlikView: Entendendo ALL e TOTAL | Pedro Elsner, Profissional de TI
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
O importante é que funcionou!
Até mais