Qlik Community

Brasil

Announcements
June 28, 10AM ET: Qlik Nation and Qlik Community present: CyberSleuth REGISTER TODAY
cancel
Showing results for 
Search instead for 
Did you mean: 
glaubercasula
Contributor III
Contributor III

Quantificar valores depois de usar a função FirstSortedValue

Bom dia Pessoal,

Preciso quantificar o número de pedidos, agrupados pelo ultimo Status. Para Identificar o último status (2º coluna) estou utilizando a função FirstSortedValue. Até aí tudo bem.... Então tenho os campos

Número Pedido |  Status      | Quantidade
0000000001         | Aberto      | 1
0000000002         | Aberto      | 1
0000000003         | Aberto      | 1
0000000004         | Fechado  | 1

Desse resultado preciso agrupar da seguinte forma:

Status        |  Quantidade
Aberto       | 3
Fechado   | 1

Como fazer essa segunda etapa?

Labels (2)
1 Solution

Accepted Solutions
TiagoCardoso
Creator II
Creator II

Certo, quando há mais de um status para exibir, você obrigatoriamente tem de incluir o qualificador 

 

 

DISTINCT

 

 

Pois a função FirstSortedValue() retorna somente um valor - havendo mais de um valor para retorno, a função retorna NULL(). Infelizmente é isso, havendo mais de 1 para ele retornar você tem que usar esse qualificador. 

Edit.: Da forma como você faz as seleções, a função vai acabar se 'perdendo', pois aquele status selecionado pode não ser o último daquele registro e pode ainda nem existir na lista de valores selecionados.

Caso queira deixar estático, pode usar o seguinte, mas a tabela passará a não respeitar os filtros e você não terá mais esse tipo de problema.

tiagocardoso_0-1597237486702.png

 

Usar o {1} tanto na dimensão quanto na medida COUNT({1} AGGR( ...) ...)e também dentro da função FirstSortedValue({1} ...)

View solution in original post

10 Replies
TiagoCardoso
Creator II
Creator II

Bom dia @glaubercasula ,

Você tendo os campos já prontos como disse, não seria o caso de ser colocado em uma tabela, por exemplo,  o status como dimensão e a métrica como sendo SUM(Quantidade)? 

glaubercasula
Contributor III
Contributor III
Author

Acredito que não, pois primeiro preciso identificar o ultimo status do registro pra depois quantificar.

Um Pedido tem a evolução de N status, aberto, cancelado, em andamento, fechado... preciso identificar o último e fazer a sumariação com ele somente.

TiagoCardoso
Creator II
Creator II

Ok, então preciso de mais informações

o firstsortedvalue é feito no script?

você quer essas informações em um gráfico/tabela?

você quer fazer via script? ou quer tratar depois dentro da aplicação?

glaubercasula
Contributor III
Contributor III
Author

Estou tratando em tabela. Exemplificando, tenho exatamente esse cenário:

Número Pedido |  Status      | Quantidade
0000000001         | Aberto      | 1
0000000002         | Aberto      | 1
0000000003         | Aberto      | 1
0000000004         | Fechado  | 1

* A coluna "Status" estou utilizando a função na expressão do campo "FirstSortedValue([Tipo Etapa],-[ID - Evolução])"

Dupliquei essa tabela e agora preciso quantificar pelo Status. O resultado teria que ser:

Status        |  Quantidade
Aberto       | 3
Fechado   | 1

Fazendo todo o tratamento dentro da aplicação.

TiagoCardoso
Creator II
Creator II

Olá, consegui simular algo bem próximo do que você propôs, espero que ajude.

Vou colocar o passo a passo e ao fim anexar o app para você analisar.

1º - Fiz uma carga similar a sua tabela e inseri um campo 'id' que seria o meu qualificador 'sort_weight' da função FirstSortedValue():

LOAD *
Inline [
id|"Número Pedido" |  Status      | Quantidade
1|0000000001         | Aberto      | 1
2|0000000002         | Aberto      | 1
3|0000000003         | Aberto      | 1
4|0000000004         | Fechado  | 1

5|0000000001         | Fechado      | 1
6|0000000002         | Fechado      | 1
7|0000000003         | Aberto      | 1
8|0000000004         | Aberto  | 1

9|0000000004         | Fechado  | 1
10|0000000004         | Fechado  | 1
](DELIMITER IS '|');

 

2º - Criei duas tabelas dentro da aplicação e comecei a explorar mais a função, aliada com o AGGR() :

tiagocardoso_0-1597159209681.png

 

tiagocardoso_1-1597159246175.png

 

Demorei um pouco a chegar no resultado justamente por não ter o campo controlador serial (id) que seria a base para ele buscar o último status.

 

Espero ter ajudado.

 

glaubercasula
Contributor III
Contributor III
Author

Legal Tiago, obrigado pelo exemplo... essa é a ideia.

Tentei aplicar em minha apresentação, mas em algum momento ele está se perdendo na exibição, quando há mais de um status para exibir...

TesteAggr.jpg

TiagoCardoso
Creator II
Creator II

Certo, quando há mais de um status para exibir, você obrigatoriamente tem de incluir o qualificador 

 

 

DISTINCT

 

 

Pois a função FirstSortedValue() retorna somente um valor - havendo mais de um valor para retorno, a função retorna NULL(). Infelizmente é isso, havendo mais de 1 para ele retornar você tem que usar esse qualificador. 

Edit.: Da forma como você faz as seleções, a função vai acabar se 'perdendo', pois aquele status selecionado pode não ser o último daquele registro e pode ainda nem existir na lista de valores selecionados.

Caso queira deixar estático, pode usar o seguinte, mas a tabela passará a não respeitar os filtros e você não terá mais esse tipo de problema.

tiagocardoso_0-1597237486702.png

 

Usar o {1} tanto na dimensão quanto na medida COUNT({1} AGGR( ...) ...)e também dentro da função FirstSortedValue({1} ...)

glaubercasula
Contributor III
Contributor III
Author

A seleção só foi um exemplo pq se deixar o filtro em aberto ou estático, o resultado é o mesmo.

Só aparece a descrição do "Status" quando tem um item selecionado, se tiver mais que um ele soma o total e deixa a coluna status como null.

Estranho né?

TiagoCardoso
Creator II
Creator II

Estranho mesmo.

Acredito que seja apenas questão de adaptar realmente sua expressão, aparentemente você está bem perto de conseguir o resultado almejado.

No exemplo que fiz aqui não tive esse tipo de problema, considerando que é bem pequeno também...

Se tiver algo mais em que possa ajudar, estou a disposição. Caso queira compartilhar algo mais que eu não consegui simular no meu exemplo...