Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Expressão como Dimensão

Boa tarde,

Gostaria de saber se é possível transformar uma expressão em uma dimensão de um gráfico.

Tipo agrupar uma expressão e transforma-la em dimensão.

Por exemplo, imaginem uma tabela simples de vendas: Cliente, Periodo e Valor de Vendas.

Gostaria de contar a qtd de clientes agrupados pelo valor, onde as dimensões seriam:

Valor de Vendas até 10K,

Valor de Vendas até 20K,

Valor de Vendas até 30K

Valor de Vendas acima de 30K

Este é somente um exemplo simplificado, pois a expressao que tenho atual não é possivel transforma-la em dimensão no momento do script, pois um dos pontos, é que ela deve ser dinamica conforme as seleções.

É possível? Tentei com a expressão calculada e não deu certo.

1 Solution

Accepted Solutions
marksouzacosta

Uma outra forma de fazer o mesmo chart seria criar um Bar Chart sem Dimension - é, isso é estranho - com a configuração abaixo:

1 - Criar Bar Chart sem Dimension
2 - Adicionar uma Expression pra cada categoria, sendo que a formula seria aproximadamente:

Count({<$(V_IDADE) = {"<=12"}>} TOTAL <PRODUTO> ContadorDeVenda)/Count(ContadorDeVenda)

Count({<$(V_IDADE) = {"<=24"}>} TOTAL <PRODUTO> ContadorDeVenda)/Count(ContadorDeVenda)

Count({<$(V_IDADE) = {"<=36"}>} TOTAL <PRODUTO> ContadorDeVenda)/Count(ContadorDeVenda)

Count({<$(V_IDADE) = {">36"}>} TOTAL <PRODUTO> ContadorDeVenda)/Count(ContadorDeVenda)

3 - Ir na aba Number do Bar Chart e configurar a formatação dos números para exibir como %

Nota 1: nesse caso eu acho que não precisa usar o TOTAL <PRODUTO> mas eu teria que testar pra ter certeza.
Nota 2: eu não sei o campo que você está utilizando para contar as vendas, no meu caso eu coloquei o pseudo campo ContadorDeVenda.

Abraço

Read more at Data Voyagers - datavoyagers.net

View solution in original post

13 Replies
Not applicable
Author

Sim é possível,

Para isso você usará a função Class ()

class( expressão, intervalo [ , rótulo [ , deslocamento ]] )

Cria uma classificação de expressões. A largura da caixa é determinada pelo número definido como intervalo. O resultado é mostrado como a<=x<b, em que a e b são os limites superior e inferior da caixa. O x pode ser substituído por um caracter arbitrário definido em rótulo. 0 normalmente é o ponto de partida padrão da classificação. Isso pode ser alterado incluindo um offset.

Exemplos:

class( var,10) with var = 23 retorna '20<=x<30'

class( var,5,'value') with var = 23 retorna '20<= value <25'

class(var,10,'x',5) with var = 23 retorna '15<=x<25'



Not applicable
Author

Bom Dia,

Tente desta forma:

Supondo que seus dados estejam pareceidos como este exemplo:

TEMP:

LOAD * INLINE [
Cliente, Periodo, Vendas
A, 01/12/2010, 15000
B, 01/12/2010, 18000
A, 04/12/2010, 23000
D, 01/12/2010, 33000
E, 01/12/2010, 28000
B, 05/12/2010, 12000
G, 01/12/2010, 8000
C, 08/12/2010, 4000
I, 01/12/2010, 21000
];

A sua dimensão calculada seria:

=IF(AGGR(SUM(Vendas), Cliente) <= 10000, 'até 10k',
IF(AGGR(SUM(Vendas), Cliente) <= 20000, 'até 20k',
IF(AGGR(SUM(Vendas), Cliente) <= 30000, 'até 30k',
IF(AGGR(SUM(Vendas), Cliente) > 30000, 'acima de 30k'))))

E a sua expressão:

COUNT(DISTINCT Cliente)

Not applicable
Author

Olá Eduardo, obrigado pelo retorno.

Seria exatamente isto, porém não posso fazer isto no script, pois estes dados serão dinamicos conforme a seleção.

Se eu fizer desta forma, sempre a classificação dos clientes será a mesma. Por exemplo, se eu selecionar Um determinado periodo, o cliente que estava Até 20K, poderá estar no até 10K, e assim por diante.

Vou pesquisar mais sobre o class para ver se é possivel.

De qualquer forma, muito obrigado e um abraço.

Ronaldo Massucato

Not applicable
Author

Ronaldo a sugestão do Eduardo é valida e funciona,

Você deve usar esta sintaxe em dimensões calculadas na aba dimensões nas propriedades do seu objeto.

Not applicable
Author

Ola,

Não entendi, não tem nada fixo em script os dados são alimentados em uma tabela simples e acabam respeitando a seleção.

A dimensão, vc não estaria inserindo no seu script e sim na opção de dimensão calculada do gráfico.

Not applicable
Author

Eduardo, me desculpe, como vi o load in line já associei ao script.

Funcionou perfeitamente.

Muito obrigado.

Ficou desta forma:

=IF(AGGR($(V_IDADE), PRODUTO) <= 12, 'até 12 Meses',
IF(AGGR($(V_IDADE), PRODUTO) <= 24, 'até 20 Meses',
IF(AGGR($(V_IDADE), PRODUTO) <= 36, 'até 36 Meses',
IF(AGGR($(V_IDADE), PRODUTO) > 36, 'acima de 36 Meses'))))

Com o class também funciona, só não consegui através de variavel, mas problema resolvido.

=Class($(V_IDADE),12,'idade') - NAO FUNCINOU

=Class([IDADE PRODUTO],12,'idade') - FUNCINOU

Abraços

Ronaldo Massucato

Not applicable
Author

Vou dar uma olhada em como ficaria com o comando Class e posto aqui também, afinal é um forum de discussão e todos os meios de achar uma solução é sempre bom ter conhecimento, pois mais pra frente pode ser util.

abraços!

Not applicable
Author

Tente colocar um sinal de "igual"

=Class($(=V_IDADE),12,'idade') - NAO FUNCINOU

Not applicable
Author

Rodrigo, também não funcionou.

=Class($(=V_IDADE),12,'idade') - NAO FUNCINOU

=Class($(V_IDADE),12,'idade') - NAO FUNCINOU