Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá amigos,
Preciso que o valor de um KPI seja calculado de forma dinâmica, conforme seleção de um filtro específico.
Tenho um KPI com a seguinte medida aplicada:
(Soma ({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'FALTAS'}>} [DIA X HORA.Abs]) * -1
+
Soma ({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATRASOS'}>} [DIA X HORA.Abs]) * - 1
+
Soma ({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATESTADOS' }>} [DIA X HORA.Abs]))
/
(Soma ({<Ano = {$ (= $ (vAnoAtual))}}, TIPO2 = {'SB'}>} [DIA X HORA.Abs]))
Quando eu selecionar no filtro "Faltas", "Atrasos" ou "Atestados", o KPI precisa realiza o cálculo dinâmico, exemplos:
Exemplo 1: Ao filtrar "Faltas", realizar o cálculo:
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'FALTAS'} >} [DIA X HORA.Abs]) *-1
/
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] ))
Exemplo 2: ao filtrar "Atrasos", realizar o cálculo:
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATRASOS'} >} [DIA X HORA.Abs])*-1
/
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] ))
Exemplo 3: ao filtrar "Atestados", realizar o cálculo:
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATESTADOS'} >} [DIA X HORA.Abs])
/
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] ))
Exemplo 4: quando não houver nenhum filtro realizar o cálculo:
(Soma ({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'FALTAS'}>} [DIA X HORA.Abs]) * -1
+
Soma ({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATRASOS'}>} [DIA X HORA.Abs]) * - 1
+
Soma ({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATESTADOS' }>} [DIA X HORA.Abs]))
/
(Soma ({<Ano = {$ (= $ (vAnoAtual))}}, TIPO2 = {'SB'}>} [DIA X HORA.Abs]))
Como poderia fazer isso para que fique dinâmico dessa forma?
Obs.: em anexo uma imagem do KPI e do Filtro em questão.
Olá @Leandro_Cordeiro,
Vamos usar o GetFieldSelections - Qlik Help para atingir teu objetivo:
Exemplo 1: Ao filtrar "Faltas", realizar o cálculo:
If( GetFieldSelections([TIPO2])='FALTAS',
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'FALTAS'} >} [DIA X HORA.Abs]) *-1)
/ (Sum( {<Ano ={$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( GetFieldSelections([TIPO2])='ATRASOS',
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATRASOS'} >} [DIA X HORA.Abs])*-1)
/ (Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( GetFieldSelections([TIPO2])='ATESTADOS',
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATESTADOS'} >} [DIA X HORA.Abs])
/ (Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( IsNull(GetFieldSelections([TIPO2])),
((Sum({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'FALTAS'}>} [DIA X HORA.Abs]) * -1) +
(Sum({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATRASOS'}>} [DIA X HORA.Abs]) * - 1) +
Sum({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATESTADOS' }>} [DIA X HORA.Abs])) /
Sum ({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'SB'}>} [DIA X HORA.Abs])
)
)
)
)
Espero que te ajude de alguma forma.
Abs e Sucesso!!
Se você quer excluir do filtro do campo TIPO2 talvez uma abordagem via script seja melhor.
Exemplo:
Sua_Tabela:
Load
Seus_campos,
If(TIPO2<>'SB, TIPO2, Null() ) as TIPO3
From Sua_Base;
Desse modo você pode usar esse campo como filtro na tela. Você precisará alterar o nome do campo na expressão que mandei também.
Espero que ajude.
Abs e Sucesso!!
Olá @Leandro_Cordeiro,
Vamos usar o GetFieldSelections - Qlik Help para atingir teu objetivo:
Exemplo 1: Ao filtrar "Faltas", realizar o cálculo:
If( GetFieldSelections([TIPO2])='FALTAS',
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'FALTAS'} >} [DIA X HORA.Abs]) *-1)
/ (Sum( {<Ano ={$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( GetFieldSelections([TIPO2])='ATRASOS',
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATRASOS'} >} [DIA X HORA.Abs])*-1)
/ (Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( GetFieldSelections([TIPO2])='ATESTADOS',
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATESTADOS'} >} [DIA X HORA.Abs])
/ (Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( IsNull(GetFieldSelections([TIPO2])),
((Sum({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'FALTAS'}>} [DIA X HORA.Abs]) * -1) +
(Sum({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATRASOS'}>} [DIA X HORA.Abs]) * - 1) +
Sum({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATESTADOS' }>} [DIA X HORA.Abs])) /
Sum ({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'SB'}>} [DIA X HORA.Abs])
)
)
)
)
Espero que te ajude de alguma forma.
Abs e Sucesso!!
@Thiago_Justen_ deu certo, amigo! muito obrigado!!!
@Thiago_Justen_ coloquei uma condição no meu filtro para ocultar a opção 'SB' e manter apenas as opções 'ATESTADOS', 'ATRASOS' e 'FALTAS', porém, quando coloquei essa condição no filtro o cálculo dinâmico parou de funcionar, só funciona se eu manter a lista de filtro original, teria como resolver isso?
Condição utilizada no filtro: if(TIPO2 <> 'SB',TIPO2)
Olá @Leandro_Cordeiro.,
Você colocou esse filtro na expressão que mandei? Coloque a expressão completa por favor.
Abs e Sucesso!!
Então, no filtro eu tenho essas 4 opções: ATESTADOS, ATRASOS, FALTAS e SB, porém como não quero a opção SB, coloquei essa condição no FILTRO ( if(TIPO2 <> 'SB',TIPO2) )para ocultar a opção SB, mas ao colocar essa condição, o cálculo dinâmico deixa de funcionar.
Segue expressão utilizada:
If( GetFieldSelections([TIPO2])='FALTAS',
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'FALTAS'} >} [DIA X HORA.Abs]) *-1
/
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )),
If( GetFieldSelections([TIPO2])='ATRASOS',
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATRASOS'} >} [DIA X HORA.Abs])*-1
/
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( GetFieldSelections([TIPO2])='ATESTADOS',
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATESTADOS'} >} [DIA X HORA.Abs])
/
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )),
If( IsNull(GetFieldSelections([TIPO2])),
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'FALTAS'} >} [DIA X HORA.Abs]) *-1
+
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATRASOS'} >} [DIA X HORA.Abs])*-1
+
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATESTADOS'} >} [DIA X HORA.Abs]))
/
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] ))
)
)
)
)
Se entendi bem, talvez isso funcione pra você:
If( GetFieldSelections([TIPO2])='FALTAS',
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'FALTAS'} >} [DIA X HORA.Abs]) *-1)
/ (Sum( {<Ano ={$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( GetFieldSelections([TIPO2])='ATRASOS',
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATRASOS'} >} [DIA X HORA.Abs])*-1)
/ (Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( GetFieldSelections([TIPO2])='ATESTADOS',
Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATESTADOS'} >} [DIA X HORA.Abs])
/ (Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] )) ,
If( IsNull(GetFieldSelections([TIPO2])) OR GetFieldSelections([TIPO2])<>'SB',
((Sum({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'FALTAS'}>} [DIA X HORA.Abs]) * -1) +
(Sum({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATRASOS'}>} [DIA X HORA.Abs]) * - 1) +
Sum({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'ATESTADOS' }>} [DIA X HORA.Abs])) /
Sum ({<Ano = {$ (= $ (vAnoAtual))}, TIPO2 = {'SB'}>} [DIA X HORA.Abs])
)
)
)
)
@Thiago_Justen_ não deu certo :/, parece que quando eu aplico essa condição no filtro para excluir/ocultar do filtro o que é SB, a expressão entende como uma mascara/nome diferente e por isso não gera o cálculo com base nos 'IFs'.
Vou ver o que faço por aqui, mas já me ajudou muito!!!
Se você quer excluir do filtro do campo TIPO2 talvez uma abordagem via script seja melhor.
Exemplo:
Sua_Tabela:
Load
Seus_campos,
If(TIPO2<>'SB, TIPO2, Null() ) as TIPO3
From Sua_Base;
Desse modo você pode usar esse campo como filtro na tela. Você precisará alterar o nome do campo na expressão que mandei também.
Espero que ajude.
Abs e Sucesso!!
@Thiago_Justen_ bom dia meu amigo,
Cara, preciso agora colocar uma condição caso seja selecionado duas opções do filtro, tentei de duas forma, mas não funcionou, veja:
Exemplo 1:
If( GetFieldSelections([TIPO2])='ATESTADOS' and 'ATRASOS',
sum(aggr(
((Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATESTADOS'} >} [DIA X HORA.Abs]))
+
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATRASOS'} >} [DIA X HORA.Abs])*-1))
/
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] ))
,[Mês])),
Exemplo 2:
If( GetFieldSelections([TIPO2])='ATESTADOS' and GetFieldSelections([TIPO2])='ATRASOS',
sum(aggr(
((Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATESTADOS'} >} [DIA X HORA.Abs]))
+
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'ATRASOS'} >} [DIA X HORA.Abs])*-1))
/
(Sum( {<Ano = {$(=$(vAnoAtual))}, TIPO2 = {'SB'} >} [DIA X HORA.Abs] ))
,[Mês])),