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: 
rafits_ctba
Contributor II
Contributor II

Duvida na montagem de script

Boa Tarde galera, hoje é meu primeiro Post, estou com dificuldade no seguinte scrip:

CampeoesAux:

Directory;

LOAD Ano, //anos de 1950 até 2011

     Piloto  ,//Nome do piloto campeao

     Equipe,//Equipe que os pilotos correu no ano

     if((sum(Pontos)), Sum(Pontos))          as Campeoes //Realizar calculo para armazenar somente o piloto com a maior quantodade de pontos

FROM

qvd\Certos\Classificacao.qvd

(qvd);

então minha duvida consiste no seguinte problema, não estou conseguindo fazer o calculo para armazenar o Piloto campeão de cada ano!

Alguem pode ajudar?

Obrigado!

1 Solution

Accepted Solutions
Not applicable

Rafael, bom dia!

Derepente uma idéia que eu fiz para buscar somente a maior data de uma tabela e daí trazer o valor daquela data lhe ajude. Veja o exemplo:

TMP_DIAS_UTEIS:

-- aqui busco os meses e anos  e dia com informaçoes do dia util.
LOAD
     ACID_DT_MES_ACIDENTE             AS AU_DT_MES_ACIDENTE,
     ACID_DT_ANO_ACIDENTE             AS AU_DT_ANO_ACIDENTE,
     ACID_DT_ACIDENTE                      AS AU_DT_DIA_ACIDENTE,
     NUM(ACID_DIAS_UTEIS_MES)       AS AU_DIAS_UTEIS_MES    
RESIDENT ACIDENTE;


DIAS_UTEIS:

- aqui faço um load da tabela que criei acima, buscando somente o maior dia e depois monto a tabela novamente.
LOAD AU_DT_ANO_ACIDENTE        AS  DIAU_DT_ANO_ACIDENTE,
     AU_DT_MES_ACIDENTE        AS  DIAU_DT_MES_ACIDENTE,
     MAX(AU_DT_DIA_ACIDENTE)   AS  DIAU_DT_DIA_ACIDENTE
RESIDENT TMP_DIAS_UTEIS
GROUP BY AU_DT_ANO_ACIDENTE, AU_DT_MES_ACIDENTE;
LEFT JOIN
LOAD
NUM(MONTH(AU_DT_MES_ACIDENTE))  &'-'&
AU_DT_ANO_ACIDENTE        AS  ACID_CHAVE_ANOMES_ACIDENTE,
AU_DT_ANO_ACIDENTE     AS  DIAU_DT_ANO_ACIDENTE,
AU_DT_MES_ACIDENTE        AS  DIAU_DT_MES_ACIDENTE,
AU_DT_DIA_ACIDENTE        AS  DIAU_DT_DIA_ACIDENTE,
AU_DIAS_UTEIS_MES         AS  DIAU_DIAS_UTEIS_MES
RESIDENT TMP_DIAS_UTEIS;
DROP TABLE TMP_DIAS_UTEIS;

Creio que podes fazer a mesma coisa, só que em vez dos dias você usa a maior somatória de pontos do piloto

para aquele ano.

Att,

Juliana.

View solution in original post

4 Replies
Not applicable

Rafael, bom dia!

Derepente uma idéia que eu fiz para buscar somente a maior data de uma tabela e daí trazer o valor daquela data lhe ajude. Veja o exemplo:

TMP_DIAS_UTEIS:

-- aqui busco os meses e anos  e dia com informaçoes do dia util.
LOAD
     ACID_DT_MES_ACIDENTE             AS AU_DT_MES_ACIDENTE,
     ACID_DT_ANO_ACIDENTE             AS AU_DT_ANO_ACIDENTE,
     ACID_DT_ACIDENTE                      AS AU_DT_DIA_ACIDENTE,
     NUM(ACID_DIAS_UTEIS_MES)       AS AU_DIAS_UTEIS_MES    
RESIDENT ACIDENTE;


DIAS_UTEIS:

- aqui faço um load da tabela que criei acima, buscando somente o maior dia e depois monto a tabela novamente.
LOAD AU_DT_ANO_ACIDENTE        AS  DIAU_DT_ANO_ACIDENTE,
     AU_DT_MES_ACIDENTE        AS  DIAU_DT_MES_ACIDENTE,
     MAX(AU_DT_DIA_ACIDENTE)   AS  DIAU_DT_DIA_ACIDENTE
RESIDENT TMP_DIAS_UTEIS
GROUP BY AU_DT_ANO_ACIDENTE, AU_DT_MES_ACIDENTE;
LEFT JOIN
LOAD
NUM(MONTH(AU_DT_MES_ACIDENTE))  &'-'&
AU_DT_ANO_ACIDENTE        AS  ACID_CHAVE_ANOMES_ACIDENTE,
AU_DT_ANO_ACIDENTE     AS  DIAU_DT_ANO_ACIDENTE,
AU_DT_MES_ACIDENTE        AS  DIAU_DT_MES_ACIDENTE,
AU_DT_DIA_ACIDENTE        AS  DIAU_DT_DIA_ACIDENTE,
AU_DIAS_UTEIS_MES         AS  DIAU_DIAS_UTEIS_MES
RESIDENT TMP_DIAS_UTEIS;
DROP TABLE TMP_DIAS_UTEIS;

Creio que podes fazer a mesma coisa, só que em vez dos dias você usa a maior somatória de pontos do piloto

para aquele ano.

Att,

Juliana.

aderlanrm
Partner - Specialist
Partner - Specialist

Rafael,

Sem dúvida o código da Juliana lhe ajuda.

No seu mesmo, só faltou o Group By, para funcionar.

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
aderlanrm
Partner - Specialist
Partner - Specialist

Desculpe, agora que li com calma o seu Post.

Correção no seu código:

CampeoesAux:

Directory;

LOAD Ano, //anos de 1950 até 2011

     Piloto  ,//Nome do piloto campeao

     Equipe,//Equipe que os pilotos correu no ano

     maxstring(sum(Pontos)) as Campeoes //Realizar calculo para armazenar somente o piloto com a maior quantodade de pontos

FROM

qvd\Certos\Classificacao.qvd

(qvd)

Group By Ano, Piloto, Equipe;

Você não precisa do IF, tem que usar MAX ou MAXSTRING, conforme a necessidade, e o GROUP BY, deve ter o três primeiro campos, ou seja, os campos que agrupam os pontos.

Não testei, se der algum erro, anexe o arquivo QVD e QVW para darmos uma olhada nos códigos, se for possível, senão, tentamos ajudar por texto mesmo... rsrsrsrs...

Grande abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
rafits_ctba
Contributor II
Contributor II
Author

Valeu galera deu certo,

Obrigado pela Dica!

Segue como montei o script:

CampeoesAux:

Directory;

LOAD    distinct(Ano)     as ano_test,

                     Piloto               as pilot_test,

             sum(Pontos)     as campeao_teste    

FROM

     qvd\Certos\Classificacao.qvd

     (qvd)Group By Ano, Piloto;

Left Join

LOAD    Ano                as ano_test,

             Piloto             as pilot_test,

             Equipe           as equip_test

FROM

     qvd\Certos\Classificacao.qvd (qvd);

Campeoes:

LOAD      ano_test                            as Anoo,

               MAX(campeao_teste)         as Campeao

Resident CampeoesAux

     Group By ano_test;

Left Join

LOAD     ano_test                                        as Anoo,

              pilot_test           as Pilot,

              equip_test         as Equip,

                     campeao_teste   as Campeao

Resident CampeoesAux;

DROP Table CampeoesAux;