Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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 !
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;
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
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:
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!
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()
Esses comandos são do oracle, queria resolver pelo qlik.
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;
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 ?
Obrigado.