Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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!
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
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
Kleiton,
Você pode aplicar uma solução front-end pra isso:
Eis a fórmula:
Only({<TEMPO_NU_ANO={$(=MAX(TEMPO_NU_ANO))}>}NATREC_NM)
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?
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!
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
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
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
;
Oi Thiago,
Perfeito, acredito que tenha resolvido o problema,
Obrigado!
A resposta do Thiago Gonalo me parece ser a que você precisa mesmo. Já que necessita de algo no script.
Boa xará!