Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
jamirjunior
Creator
Creator

Eficiência no group by

Bom dia Pessoal !

Preciso mostrar num painel as placas que mais cometeram infração. (apenas as 15 maiores)

Tenho uma tabela enorme com as infrações. Fiz um gráfico com dimensão= placa, limitando = 15 maiores, expressão =sum(contador) porém está muito pesado/lento. Qual seria a metodologia mais adequada?

Obs: este painel não tem interação do usuário.

- gerar uma tabela na fase anterior, usando group by e como pegar apenas os 15 primeiros?

- algum comando no painel que não fique pesado?

- outra sugestão?

Obrigado !

1 Solution

Accepted Solutions
Thiago_Justen_

Pode usar a ideia do cuv‌ com uma pequena variação então:

Tabela_Com_Totalizador_Temp:

Load

     Placa,

     Sum(contador) as totalizador_agrupado

resident suafato group by Placa;

Tabela_Com_Totalizador:

First 15

NoConcatenate

Load

*

Resident Tabela_Com_Totalizador_Temp Order By totalizador_agrupado Desc;

DROP TABLE Tabela_Com_Totalizador_Temp;

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

View solution in original post

7 Replies
Clever_Anjos
Employee
Employee

Se não tem nenhuma interação ou filtro o melhor é pré calcular uma tabela fato adicional com

Load

     Placa

     Sum(contador) as totalizador_agrupado

resident suafato

group by Placa

Dai use essa tabela no seu gráfico

claudemir_dioto
Contributor III
Contributor III

Olá Jamir.

Aconselho efetuar esse filtro no script.

Pode usar funções analíticas pra "numerar" as linhas, e depois, basta filtrar pegando as que são <= 15.

Veja esse documento:

download/funcoes_ANALITICAS.html

No seu caso, eu faria algo assim:

CÓDIGO: SELECIONAR TODOS
SELECT
  COD_VENDA  
, DATA  
, ITEM  
, VALOR
, ROW_NUMBER()
    OVER (PARTITION BY cod_venda
          ORDER BY valor DESC) "Seq"
FROM TABELA


Essa query vai retornar um campo chamado SEQ, com o número de 1 a N. (Sendo 1, o maior valor para COD_VENDA, 2 o segundo maior, etc)

Veja se funciona!

jamirjunior
Creator
Creator
Author

Isso que estou tentando fazer, mas já q vou ler novamente a fato, posso gerar uma tabela com apenas os 15 registros, como faz isso?

Poderia usar um desses comandos: rank(), FirstSortedValue() , aggr()

jamirjunior
Creator
Creator
Author

Esses comandos são do oracle, queria resolver pelo qlik.

Thiago_Justen_

Pode usar a ideia do cuv‌ com uma pequena variação então:

Tabela_Com_Totalizador_Temp:

Load

     Placa,

     Sum(contador) as totalizador_agrupado

resident suafato group by Placa;

Tabela_Com_Totalizador:

First 15

NoConcatenate

Load

*

Resident Tabela_Com_Totalizador_Temp Order By totalizador_agrupado Desc;

DROP TABLE Tabela_Com_Totalizador_Temp;

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

2018-09-17 15:49:13 0013 Multa:

2018-09-17 15:49:13 0014 LOAD

2018-09-17 15:49:13 0015 Multa_Placa,

2018-09-17 15:49:13 0016 Contador

2018-09-17 15:49:13 0017 FROM

2018-09-17 15:49:13 0018 T_Multa.qvd(qvd)

2018-09-17 15:49:13 0019 where Multa_DadoInconsistente = 'Consistentes'

2018-09-17 15:49:13 0020 and Multa_Data_AAAAMMDD >= year(today())&'0000'

2018-09-17 15:49:13 0021

2018-09-17 15:49:59      2 campos encontrados: Multa_Placa, Contador,

2018-09-17 15:49:59      2.450.308 registros lidos

2018-09-17 15:50:00 0023 tabela0:

2018-09-17 15:50:00 0024 LOAD Multa_Placa,

2018-09-17 15:50:00 0025      sum(Contador) as Placas_15

2018-09-17 15:50:00 0026 resident Multa

2018-09-17 15:50:00 0027 group by Multa_Placa

2018-09-17 15:50:20      2 campos encontrados: Multa_Placa, Placas_15,

2018-09-17 15:50:20      1.218.535 registros lidos

2018-09-17 15:50:20 0029 tabela:

2018-09-17 15:50:20 0030 First 15

2018-09-17 15:50:20 0031 NoConcatenate

2018-09-17 15:50:20 0032 Load

2018-09-17 15:50:20 0033 *

2018-09-17 15:50:20 0034 Resident tabela0 Order By Placas_15 Desc

2018-09-17 15:50:21      2 campos encontrados: Multa_Placa, Placas_15,

2018-09-17 15:50:21      15 registros lidos

2018-09-17 15:50:21 0036 Drop Table Multa,tabela0

Fiz assim, funcionou! O tempo de leitura baixou pq filtrei apenas este ano, de qq forma são 3 'LOAD', não existe outra funcionalidade para diminuir isso ?

jamirjunior
Creator
Creator
Author

Obrigado.