Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá pessoal!!
Preciso somar os valores da Coluna C, porém, somente dos valores distintos da Caluna A. Como posso fazer isso?
Exemplo:
Total errado R$ 35,00
Total Correto (Distinto da col A) R$ 25,00
Desde já Obrigado!
ola, vc pode usar a funcao aggr para agrupar a coluna A... sum(aggr(C,A))
ola, vc pode usar a funcao aggr para agrupar a coluna A... sum(aggr(C,A))
Olá Fábio!
Obrigado pela ajuda. Esse método funciona, porém, a tabela possui mais de 6 milhoes de registros e toda vez que o Qlikview tenta executar essa função causa estouro de memória.
Teria outra maneira?
Você pode usar a função Previous, na Clausula WHERE.
LOAD
A,
B,
C
FROM
C:\Users\edison\Desktop\teste.txt
(txt, codepage is 1252, embedded labels, delimiter is '\t', msq)
WHERE(Previous(A)<>A);
Dessa forma, ele carregar somente um registro por ID(1º), mas o arquivo tem que estar ordenado.
Olá Davidson, tudo bem?
Você pode usar agrupamento:
LOAD MinString(Codigo) as Codigo,
MinString(Descrição) as Descrição,
MinString(Valor) as MenorValor,
MaxString(Valor) as MaiorValor,
sum(Valor) as SomaValor,
avg(Valor) as MediaValor
INLINE [
Codigo, Descrição, Valor
1, Dinheiro, "5,00"
1, Cupom, "15,00"
2, Cheque, "5,00"
3, Cartão, "5,00"
4, Boleto, "5,00"
4, Dinheiro, "5,00"
5, Cartão, "5,00"
]
Group By Codigo;
A vantagem é que você pode usar outras funções para tratar as repetições, como no exemplo que te passei, tem coluna com valor, menor, maior, suma, média... e todas as outras funções que podem ser usadas com agragação. Não esqueça de trocar o INLINE por o FROM em sua tabela.
Importante lembrar que para grande quantidade de dados, seu caso, tudo que puder ser feito no script é melhor, pois a diferença de desempenho é considerável.
Espero que ajude, grande abraço.
Olá Davidson, esta tabela que você postou está sendo carregada originalmente desta forma ou é resultado de alguma junção com outra tabela? Você já considerou a hipótese de separar estes dados para não ter o problema de tratar a duplicidade?
Abs.
Edison,
Obrigado, mas preciso levar todos os IDs, pois a forma de pagamento são diferentes e tb preciso levá-las.
Aderlan,
Obrigado tb, mas é a mesma questão... Não posso agrupar os IDs na tabela, a não ser que criasse outra só com o valor total por ID. Mas são muitos registros (+ de 6 milhões) e me traria mais problemas de performance.
Mas gostei da observação!
Cesar,
Precisa ser carregada desta forma.
Pessoal,
A função aggr que o fábio sugeriu resolve a questão. O problema é que o servidor atualmente está com 4GB de memória (por limitação do SO de 32bits) e está causando estouro de memória. Trocaremos a máquina para uma com 16GB, mas enquanto isso...
Sem problemas Davidson,
Basta você tirar a coluna de descrição do primeiro LOAD e fazer um segundo load apenas das descrições, vinculando as duas pelo código. O EXISTS é apenas para não carregar descrições que não tenham valores que foram carregados antes, como o volume de dados é muito grande, é bom não carregar o que não será útil, por isso também retirar as descrições do primeiro load. Mais uma dica, use o DISTINCT no segundo LOAD para não carregas a mesma descrição e o mesmo código duas vezes. Abraço.
Veja:
Valores:
LOAD MinString(Codigo) as Codigo,
MinString(Valor) as MenorValor,
MaxString(Valor) as MaiorValor,
sum(Valor) as SomaValor,
avg(Valor) as MediaValor
INLINE [
Codigo, Valor
1, "5,00"
1, "15,00"
2, "5,00"
3, "5,00"
4, "5,00"
4, "5,00"
5, "5,00"
]
Group By Codigo;
Descrições:
LOAD Codigo,
Descrição
INLINE [
Codigo, Descrição
1, Dinheiro
1, Cupom
2, Cheque
3, Cartão
4, Boleto
4, Dinheiro
5, Cartão
]
Where Exists(Codigo,Codigo);
Obrigado Aderlan!
Imagine, é sempre bom ajudar.
Não esqueça de marcar as resposta para também ajudar a outros na comunidade que estão com a mesma dúvida.