Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
MarceloK
Creator
Creator

Group By - Dúvida

Oi amigos, estou com uma duvida na função de script group by:

Estou fazendo o seguinte script:

 

LOAD

id_SaudeOpex,

if(metricasOpex = 0 or npsOpex = 0,
AVG(adimplenciaOpex),

IF(churn_anunciado<>null(),

AVG(npsOpex + solucaoOperandoOpex + metricasOpex + adimplenciaOpex*0.5 + crescimentoContaOpex*0.5 + csTicketsOpex + csatTicketsOpex),

AVG(npsOpex*2 + solucaoOperandoOpex*2 + metricasOpex*2 + adimplenciaOpex*1.5 + crescimentoContaOpex*0.5 + csTicketsOpex*2 + csatTicketsOpex))) as saudeOpex
Group by id_SaudeOpex;

Quando eu faço o código dessa forma, eu recebo erro de "Invalid Expression"

MarceloK_0-1627398785298.png

 

Quando eu faço somente

LOAD

id_SaudeOpex,

 

AVG(npsOpex*2 + solucaoOperandoOpex*2 + metricasOpex*2 + adimplenciaOpex*1.5 + crescimentoContaOpex*0.5 + csTicketsOpex*2 + csatTicketsOpex))) as saudeOpex


Group by id_SaudeOpex;

O código funciona...

A dúvida que ficou é: existe alguma limitação a usar IF(Isnull) ou IF(<>NULL()) or IF= 'alguma coisa' dentro do script?

Porque quando eu uso sem  condiçoes o codigo roda normalmente

1 Solution

Accepted Solutions
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Marcelo,

o if() é registro a registro e quando damos o group by, estamos agegando e por isto precisamos de funções de agregação como o sum,count e avg por exemplo.  Se dentro destes comandos voce colocar o if não vai dar erro. Mas fora, sim, vai dar erro pois de um modo bem grosseiro seria como se o if esperasse 1 registro para comparar e recebe dezenas ou milhares de uma vez.

Resumo: o if espera uma entrada por vez e as funções de agregação (sum/count/avg/....) esperam varias de entrada

furtado@farolbi.com.br

View solution in original post

3 Replies
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Marcelo,

o if() é registro a registro e quando damos o group by, estamos agegando e por isto precisamos de funções de agregação como o sum,count e avg por exemplo.  Se dentro destes comandos voce colocar o if não vai dar erro. Mas fora, sim, vai dar erro pois de um modo bem grosseiro seria como se o if esperasse 1 registro para comparar e recebe dezenas ou milhares de uma vez.

Resumo: o if espera uma entrada por vez e as funções de agregação (sum/count/avg/....) esperam varias de entrada

furtado@farolbi.com.br
MarceloK
Creator
Creator
Author

Poxa que pena! Mas pelo menos ficou entendido! Muito obrigado

junior_ehlke
Creator III
Creator III

@MarceloK , você precisa agrupar todas as dimensões que não estejam no AVG, por isso que o seu segundo código funciona e o primeiro não:

 

LOAD

id_SaudeOpex,

if(metricasOpex = 0 or npsOpex = 0,
AVG(adimplenciaOpex),

IF(churn_anunciado<>null(),

AVG(npsOpex + solucaoOperandoOpex + metricasOpex + adimplenciaOpex*0.5 + crescimentoContaOpex*0.5 + csTicketsOpex + csatTicketsOpex),

AVG(npsOpex*2 + solucaoOperandoOpex*2 + metricasOpex*2 + adimplenciaOpex*1.5 + crescimentoContaOpex*0.5 + csTicketsOpex*2 + csatTicketsOpex))) as saudeOpex
Group by

id_SaudeOpex,
metricasOpex,
npsOpex,
churn_anunciado ;