Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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"
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
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
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
Poxa que pena! Mas pelo menos ficou entendido! Muito obrigado
@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 ;