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

Contar itens de uma tabela somando/analisando a quantidade por linha

Bom dia pessoal, tudo bem?

Estou com dificuldade em um análise estou precisando do auxilio/conhecimento de vocês.  A princípio é simples e não sei onde estou falhando, a partir de uma tabela quero calcular um determinado campo (quantidade de vidas) e verificar em qual faixa ele enquadra e ir somando a quantidade (Contrato). Anexo qvf e prints para melhor entendimento.

[VIDAS]:
LOAD * INLINE [
Código do Contrato, Nome da Empresa, Qtd. Vidas
3005, Empresa A, 14033
2001, Empresa B, 11953
4031, Empresa C, 2029
2002, Empresa D, 205
3794, Empresa E, 300
3136, Empresa F, 451
3887, Empresa G, 201
2016, Empresa H, 101
4034, Empresa I, 102
3050, Empresa J, 31
3255, Empresa K, 99
3750, Empresa L, 5
3087, Empresa M, 21
2128, Empresa N, 22
];

[FAIXA_VIDA]:
LOAD * INLINE [
ID_FAIXA_VIDA, FAIXA_VIDA
1, Até 29 Vidas
2, De 30 a 100 Vidas
3, De 101 a 200 Vidas
4, De 201 a 1.000 Vidas
5, Mais de 1.000 Vidas
];

Analise:

=if(ID_FAIXA_VIDA = 1 AND sum({<[Código do Contrato]>}[Qtd. Vidas]) < 30, count({<[Código do Contrato]>}distinct[Código do Contrato]),
if(ID_FAIXA_VIDA = 2 AND sum({<[Código do Contrato]>}[Qtd. Vidas]) > 29 AND sum({<[Código do Contrato]>}[Qtd. Vidas]) < 101, count({<[Código do Contrato]>}distinct[Código do Contrato]),
if(ID_FAIXA_VIDA = 3 AND sum({<[Código do Contrato]>}[Qtd. Vidas]) > 100 AND sum({<[Código do Contrato]>}[Qtd. Vidas]) < 201, count({<[Código do Contrato]>}distinct[Código do Contrato]),
if(ID_FAIXA_VIDA = 4 AND sum({<[Código do Contrato]>}[Qtd. Vidas]) > 200 AND sum({<[Código do Contrato]>}[Qtd. Vidas]) < 1001, count({<[Código do Contrato]>}distinct[Código do Contrato]),
if(ID_FAIXA_VIDA = 5 AND sum({<[Código do Contrato]>}[Qtd. Vidas]) > 1000, count({<[Código do Contrato]>}distinct[Código do Contrato]), 0)))))

 

 

1 Solution

Accepted Solutions
TiagoCardoso
Creator II
Creator II

Boa tarde,

 

Ainda seguindo o mesmo raciocínio, utilizando expressão SET, e também sem ter a necessidade da tabela inline que fez para classificar, ficou assim:

 

Dimensão:

=ValueList('Até 5 Vidas', 'Mais de 5 Vidas')

Medida:

IF(ValueList('Até 5 Vidas', 'Mais de 5 Vidas')='Até 5 Vidas',
COUNT({<[Código do Contrato]={"=SUM([Qtd. Vidas])<=5"}>} DISTINCT [Código do Contrato]),
IF(ValueList('Até 5 Vidas', 'Mais de 5 Vidas')='Mais de 5 Vidas',
COUNT({<[Código do Contrato]={"=SUM([Qtd. Vidas])>5"}>} DISTINCT [Código do Contrato])))

 

View solution in original post

6 Replies
TiagoCardoso
Creator II
Creator II

Bom dia!

Encaminho o mesmo QVF com a solução.

Criei um gráfico de tabela e nele coloquei o seguinte:

- Dimensão

ValueList('Até 29 Vidas','De 30 a 100 Vidas','De 101 a 200 Vidas','De 201 a 1.000 Vidas','Mais de 1.000 Vidas')

- Medida:

IF(
	ValueList('Até 29 Vidas','De 30 a 100 Vidas','De 101 a 200 Vidas','De 201 a 1.000 Vidas','Mais de 1.000 Vidas')='Até 29 Vidas',
    	Count({<[Qtd. Vidas]={">0<=29"}>}[Código do Contrato]),
IF(
	ValueList('Até 29 Vidas','De 30 a 100 Vidas','De 101 a 200 Vidas','De 201 a 1.000 Vidas','Mais de 1.000 Vidas')='De 30 a 100 Vidas',
    	Count({<[Qtd. Vidas]={">=30<=100"}>}[Código do Contrato]),
IF(
	ValueList('Até 29 Vidas','De 30 a 100 Vidas','De 101 a 200 Vidas','De 201 a 1.000 Vidas','Mais de 1.000 Vidas')='De 101 a 200 Vidas',
    	Count({<[Qtd. Vidas]={">=101<=200"}>}[Código do Contrato]),
IF(
	ValueList('Até 29 Vidas','De 30 a 100 Vidas','De 101 a 200 Vidas','De 201 a 1.000 Vidas','Mais de 1.000 Vidas')='De 201 a 1.000 Vidas',
    	Count({<[Qtd. Vidas]={">=201<=1000"}>}[Código do Contrato]),
IF(
	ValueList('Até 29 Vidas','De 30 a 100 Vidas','De 101 a 200 Vidas','De 201 a 1.000 Vidas','Mais de 1.000 Vidas')='Mais de 1.000 Vidas',
    	Count({<[Qtd. Vidas]={">1000"}>}[Código do Contrato]),
)))))

Resultado conforme seu print anexado:

TiagoCardoso_0-1608117255349.png

 

Abraços.

RafaMartins
Creator II
Creator II

Bom dia, o problema do seu modelo de dados é que você não tem ligação entre as tabelas.

1.PNG

Para resolver isso precisamos que as tabelas se liguem de alguma forma, nesse caso como a depende de um numero de intervalo vamos utilizar a função IntervalMatch (Vide QVF).

Assim criamos um ligação,

2.PNG

e agora podemos apenas contar os valores para cada faixa.

3.PNG

Paulo_Henrique_89
Contributor
Contributor
Author

Boa tarde @TiagoCardoso  e @RafaMartins 

entendi a soluções de vocês mas tem uma questão que não expliquei direito na minha publicação. A "Qtd. Vidas" na verdade é um sum(Qtd. Vidas), exemplo:

Quando disse:

[VIDAS]:
LOAD * INLINE [
Código do Contrato, Nome da Empresa, Qtd. Vidas
3750, Empresa L, 5
];

Na verdade é:

[VIDAS]:
LOAD * INLINE [
Usuário, Código do Contrato, Nome da Empresa, Qtd. Vidas
Ana, 3750, Empresa L, 1

Maria, 3750, Empresa L, 1

João, 3750, Empresa L, 1

Paulo, 3750, Empresa L, 1

Camila, 3750, Empresa L, 1
];

tentei fazer um qvf parecido com minha análise para não expor os dados e acabei falhando na explicação, anexo novo qvf com a devida análise que preciso.

TiagoCardoso
Creator II
Creator II

Boa tarde,

 

Ainda seguindo o mesmo raciocínio, utilizando expressão SET, e também sem ter a necessidade da tabela inline que fez para classificar, ficou assim:

 

Dimensão:

=ValueList('Até 5 Vidas', 'Mais de 5 Vidas')

Medida:

IF(ValueList('Até 5 Vidas', 'Mais de 5 Vidas')='Até 5 Vidas',
COUNT({<[Código do Contrato]={"=SUM([Qtd. Vidas])<=5"}>} DISTINCT [Código do Contrato]),
IF(ValueList('Até 5 Vidas', 'Mais de 5 Vidas')='Mais de 5 Vidas',
COUNT({<[Código do Contrato]={"=SUM([Qtd. Vidas])>5"}>} DISTINCT [Código do Contrato])))

 

Paulo_Henrique_89
Contributor
Contributor
Author

Isso mesmo que estava precisando @TiagoCardoso , muito obrigado.

TiagoCardoso
Creator II
Creator II

Às ordens, disponha!