Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
kkmoraes
Contributor III
Contributor III

Dúvida com retorno da função Max

Pessoal,

Boa tarde!

Estou com uma problema no uso da função Max no seguinte caso:

Possuo uma base com códigos de receita e suas respectivas descrições que podem variar de acordo com o Ano.

O código 17213301 por exemplo, possui a descrição "PISO DE ATENÇÃO BÁSICA-PAB-FIXO" nos anos de 2008 e 2010, e a descrição "PISO DE ATENÇÃO BÁSICA FIXO - PAB FIXO" para os demais períodos, dessa forma, eu tentei retornar o dado mais atual através da função Max, abaixo deixo um Inline dos dados, e a forma como estou realizando o tratamento

Dados:

LOAD * INLINE [

    NATREC, NATREC_NM, TEMPO_NU_ANO

    17213301, PISO DE ATENÇÃO BÁSICA-PAB-FIXO, 2008

    17213301, PISO DE ATENÇÃO BÁSICA-PAB-FIXO, 2010

    17213301, PISO DE ATENÇÃO BÁSICA FIXO - PAB FIXO, 2015

    17213301, PISO DE ATENÇÃO BÁSICA FIXO - PAB FIXO, 2016

    17213301, PISO DE ATENÇÃO BÁSICA FIXO - PAB FIXO, 2017

];

TESTE:

LOAD Distinct

     max(TEMPO_NU_ANO)                     AS TEMPO6,

     NATREC,

     Upper(Only(NATREC_NM))                AS Receita_Nome

Resident Dados

group by NATREC;

Meu problema é que apesar de retornar o valor máximo corretamente, a associação com a descrição está vindo vazia.

Abaixo uma imagem com o retorno que estou obtendo.

receita_desc.PNG

Apesar de existir a descrição associada ao Ano retornado no Max, ela está vindo vazia.

Podem me informar no que me equivoquei, por favor?

Obrigado!

Labels (2)
1 Solution

Accepted Solutions
thiago_mlg
Creator II
Creator II

Kleiton,

Basta fazer assim:

TESTE: 

LOAD Distinct 

     max(TEMPO_NU_ANO)                     AS TEMPO6,  

     NATREC

Resident Dados 

group by NATREC; 

// abaixo você da um join da descrição apenas para tempo6 e natrec da tabela acima.

left join (TESTE)

LOAD

     TEMPO_NU_ANO                     AS TEMPO6,  

     NATREC,

     Upper(NATREC_NM)                AS Receita_Nome 

Resident Dados;

Espero ter ajudado.

Thiago Gonalo

View solution in original post

10 Replies
rogerioalmeida
Creator
Creator

Kleiton,

Uma possível solução pode ser utilizando firstsortedvalue.


Ficaria mais ou menos assim.

TESTE: 

LOAD Distinct 

     TEMPO_NU_ANO                    AS TEMPO6,  

     NATREC, 

firstsortedvalue (Upper(Only(NATREC_NM))   , - DATA) as Receita_Nome 

Resident Dados 

;


Desta forma ele vai trazer o último registro conforme a Data, se você o sinal de menos '-' ele trara o primeiro registo.

Espero ter ajudado

Thiago_Justen_

Kleiton,

Você pode aplicar uma solução front-end pra isso:

Capturar3.PNG

Eis a fórmula:

Only({<TEMPO_NU_ANO={$(=MAX(TEMPO_NU_ANO))}>}NATREC_NM)

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

Oi Francisco,

O campo "Data" que você usou na função Firstsortedvalue seria o meu do ano, né isso?

Eu executei aqui e ta dando erro de agregação aninhada não permitida, será que falta algo?

erro.PNG

kkmoraes
Contributor III
Contributor III
Author

Oi Thiago,

Infelizmente nesse caso eu realmente estou precisando que o campo já venha do script com o valor associado corretamente, em outros locais do script já faço outros tratamentos que dependem desse valor atribuído.

Obrigado!

rogerioalmeida
Creator
Creator

Kleiton,

Esqueci de colocar no script o gruop by, esta função é uma agregação então você precisa colocar.

Ela funciona com data completa, verifica isso.

Desculpa

thiago_mlg
Creator II
Creator II

Kleiton,

Basta fazer assim:

TESTE: 

LOAD Distinct 

     max(TEMPO_NU_ANO)                     AS TEMPO6,  

     NATREC

Resident Dados 

group by NATREC; 

// abaixo você da um join da descrição apenas para tempo6 e natrec da tabela acima.

left join (TESTE)

LOAD

     TEMPO_NU_ANO                     AS TEMPO6,  

     NATREC,

     Upper(NATREC_NM)                AS Receita_Nome 

Resident Dados;

Espero ter ajudado.

Thiago Gonalo

kkmoraes
Contributor III
Contributor III
Author

Oi Francisco,

Sem problemas, agradeço pela presteza na ajuda, testei aqui com a data completa, mas o erro da agregação aninhada ainda permanece.

Apesar de o campo original ser apenas o ano, alterei diretamente no inline para testar se a data completa iria influenciar, ficou dessa forma:

Dados:

LOAD * INLINE [

    NATREC, NATREC_NM, TEMPO_NU_ANO

    17213301, PISO DE ATENÇÃO BÁSICA-PAB-FIXO, 01/01/2008

    17213301, PISO DE ATENÇÃO BÁSICA-PAB-FIXO, 01/01/2010

    17213301, PISO DE ATENÇÃO BÁSICA FIXO - PAB FIXO, 01/01/2015

    17213301, PISO DE ATENÇÃO BÁSICA FIXO - PAB FIXO, 01/01/2016

    17213301, PISO DE ATENÇÃO BÁSICA FIXO - PAB FIXO, 01/01/2017

];

TESTE:

LOAD Distinct

    TEMPO_NU_ANO                    AS TEMPO6, 

    NATREC,

    Firstsortedvalue(Upper(Only(NATREC_NM))   , - TEMPO_NU_ANO) as Receita_Nome

Resident Dados

Group by NATREC

;

kkmoraes
Contributor III
Contributor III
Author

Oi Thiago,

Perfeito, acredito que tenha resolvido o problema,

Obrigado!

Thiago_Justen_

A resposta do Thiago Gonalo me parece ser a que você precisa mesmo. Já que necessita de algo no script.

Boa xará!

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