Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Leandro_Cordeiro
Contributor II
Contributor II

Calculo dinâmico conforme aplicação de Filtro

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.

2 Solutions

Accepted Solutions
Thiago_Justen_

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 Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago

View solution in original post

Thiago_Justen_

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 Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago

View solution in original post

13 Replies
Thiago_Justen_

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 Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
Leandro_Cordeiro
Contributor II
Contributor II
Author

@Thiago_Justen_ deu certo, amigo! muito obrigado!!!

Leandro_Cordeiro
Contributor II
Contributor II
Author

@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)

Thiago_Justen_

Olá @Leandro_Cordeiro.,

Você colocou esse filtro na expressão que mandei? Coloque a expressão completa por favor. 

Abs e Sucesso!!

Thiago Justen Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
Leandro_Cordeiro
Contributor II
Contributor II
Author

@Thiago_Justen_ 

 

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] ))

)

)

)

)

 

Thiago_Justen_

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 Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
Leandro_Cordeiro
Contributor II
Contributor II
Author

@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!!!

Thiago_Justen_

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 Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
Leandro_Cordeiro
Contributor II
Contributor II
Author

@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])),