Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde,
Tenho a seguinte dimensão com os possíveis valores abaixo:
Faixa de Valor
0 até 100
100,01 até 200
200,01 até 300
300,01 Até 9999999
Eu tenho vários títulos de um determinado cliente que possuem valores diferentes, portanto estão em faixas de valores diferentes, porém a conta deve ser feita considerando o título de maior valor, ou seja, o maior valor do cliente.
Fazendo um exercício simples com a fonte de dados, demonstrando:
Cliente | Título | Valor | Faixa de Valor
Joao | X01 | 150 | 100,01 até 200
Joao | X02 | 250 | 200,01 até 300
Maria | X03 | 100 | 0 até 100
Cássia | X04 | 290 | 200,01 até 300
Roberto | X05 | 330 | 300,01 Até 9999999
O gráfico em tabelas deve mostrar da seguinte forma:
Faixa de Valor | Quantidade de Clientes
0 até 100 - 1 (Título da Maria, X03)
100,01 até 200 - 0
200,01 até 300 - 2 (Título do João, X02 e o Título da Cássia, X04)
300,01 Até 9999999 - 1 (Título do Roberto, X05)
Totalizando efetivamente 4 clientes da lista.
Eu usei AGGR para buscar o valor máximo, agrupado por cliente... consigo encontrar, porém na hora de encaixar no gráfico ele sempre calcula 1 em todas as dimensões de faixa de valor que o cliente tiver título.
Exemplo: COUNT(AGGR(MAX(Valor), Cliente, Faixa de Valor))
Apenas retornando que eu consegui fazer a expressão aqui, faltava utilizar a cláusula TOTAL dentro da expressão, ficando da seguinte forma:
Exemplo: COUNT( DISTINCT IF( AGGR(MAX( Value1 ), Customer , [Value range] ) = AGGR(MAX({<[Value range]=>} TOTAL<Customer > Value1 ), Customer , [Value range] ), Customer , NULL())
Mesmo assim agradeço pela tentativa de apoio.
One of doing this is like
RangeVal:
LOAD *, Subfield(ValRange, '|',1) AS Val1,
Subfield(ValRange, '|',2) AS Val2;
LOAD *, Replace(Replace([Value range], 'Up to','|'), 'to', '|') AS ValRange INLINE [
Customer | Title | Value1 | Value range
Joao | X01 | 150 | 100.01 to 200
Joao | X02 | 250 | 200.01 to 300
Maria | X03 | 100 | 0 to 100
Cássia | X04 | 290 | 200.01 to 300
Roberto | X05 | 330 | 300.01 Up to 9999999
] (delimiter is '|');
LEFT JOIN(RangeVal)
RangeVal1:
LOAD Customer,
Max(Value1) AS MaxVal
Resident RangeVal
Group By Customer;
Then using your Straight table chart Add
dim: [Value range]
Expr: = Sum(IF(MaxVal >= Val1 AND MaxVal <= Val2, 1, 0)) & ' [' & Concat(Customer & '|' & Title, ',') & ']'
Or in the script try below:
RangeVal:
LOAD *, Subfield(ValRange, '|',1) AS Val1,
Subfield(ValRange, '|',2) AS Val2;
LOAD *, Replace(Replace([Value range], 'Up to','|'), 'to', '|') AS ValRange INLINE [
Customer | Title | Value1 | Value range
Joao | X01 | 150 | 100.01 to 200
Joao | X02 | 250 | 200.01 to 300
Maria | X03 | 100 | 0 to 100
Cássia | X04 | 290 | 200.01 to 300
Roberto | X05 | 330 | 300.01 Up to 9999999
] (delimiter is '|');
LEFT JOIN(RangeVal)
RangeVal1:
LOAD Customer,
Max(Value1) AS MaxVal
Resident RangeVal
Group By Customer;
LEFT JOIN(RangeVal)
FinalRangeVal:
LOAD [Value range],
Sum(IF(MaxVal >= Val1 AND MaxVal <= Val2, 1, 0)) AS NoOfClients
Resident RangeVal
Group By [Value range];
Não é possível fazer dessa forma. Porque o cálculo deve ser dinâmico de acordo com as seleções realizadas pelo usuário.
O que eu quero dizer é que o group by proposto no script não faz sentido nesse caso, pois o agrupamento limitará sempre a uma data fixa do cliente.
Estou tentando fazer via agregação e um IF na agregação, estou quase chegando lá, algo como se fosse assim:
COUNT(DISTINCT IF(AGGR(MAX( Value1 ), Customer , [Value range] ) = Value1,Customer))
Share a sample you are working on and show us what you achieved till now and what you are expecting?
Vou tentar perguntar de forma objetiva:
Como fazer comparação utilizando 2 sintaxes AGGR na expressão e em uma delas desconsiderar a dimensão utilizada na tabela? Ou seja, nesse exemplo preciso desconsiderar a Faixa de Valor em uma expressão AGGR, para comparar Se o Maior Valor Agrupado por Faixa de Valor/Cliente é igual ao Maior Valor do Cliente, se esse predicado for verdadeiro então conta na expressão.
Exemplo: COUNT( DISTINCT IF( AGGR(MAX( Value1 ), Customer , [Value range] ) = AGGR(MAX({<[Value range]=>} Value1 ), Customer , [Value range] ), Customer , NULL())
Por fim, utilizando a base de dados exposta anteriormente, deve mostrar assim:
Faixa de Valor | Quantidade de Clientes | Quantidade de Títulos
0 até 100 - 1 - 1
100,01 até 200 - 0 - 1
200,01 até 300 - 2 - 2
300,01 Até 9999999 - 1 - 1
Apenas retornando que eu consegui fazer a expressão aqui, faltava utilizar a cláusula TOTAL dentro da expressão, ficando da seguinte forma:
Exemplo: COUNT( DISTINCT IF( AGGR(MAX( Value1 ), Customer , [Value range] ) = AGGR(MAX({<[Value range]=>} TOTAL<Customer > Value1 ), Customer , [Value range] ), Customer , NULL())
Mesmo assim agradeço pela tentativa de apoio.