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

Max of a column, pivot ?

Hi all,

Excuse my bad english, I'm french.

I'm new in Qlik and I want to do something.

I have a table "Track" with a field, "id", "id_bill", "status" and a field "date_track"

In this table "Track" I have all the status of a bill.

 For example, the result is :
- 1 (id) - 123 (id_bill) - 12/02/2012 (date_track) - Creating (status)
- 2 (id) - 123 (id_bill) - 14/02/2012 (date_track) - In progress (status)
- 3 (id) - 123 (id_bill)  - 15/02/2012 (date_track) - Validate (status)
- 4 (id) - 124 (id_bill) - 16/02/2012 (date_track) - Creating (status)
- 5 (id) - 124 (id_bill) - 15/03/2012 (date_track) - In progress (status)
- 6 (id) - 124 (id_bill) - 20/05/2012 (date_track) - Validate (status)

I want :

The max date_track  between each status for a same id_bill.

- Between "Creating" and "In process" => 28  (id_bill 123)
- Between "In progress" and "Validate" => 66 (id_bill 124)
- Between "Creating" and "Validate" => 31 (id_bill 123)

I do this with a pivot ?

I don't know if i've got this right.

Thanks you very much.


1 Solution

Accepted Solutions
Taoufiq_Zarra

Bonjour,
Pour avoir la visualisation que tu as mentionné, il faut changé dans le modèle de donnée.
c'est pour cela je te propose cette visualisation , j'ai mis en PJ le fichier Qliksense

Capture.JPG

la formule pour avoir par exemple entre Envoyée et crée est :

 

Max(aggr(Date(only({<Etat={'Envoyée'}>} Date_etat))-Date(only({<Etat={'Crée'}>} Date_etat)),id_facture))

 

mais puisque d'après ce que tu as affiché tu évite les valeurs <0 par exemple entre crée et envoyée normalement crée vient avant envoyée donc c'est une valeur <0 , ce que tu fais c'est que tu inverse, donc la nouvelle formule sera :

 

 

=if(Max(aggr(Date(only({<Etat={'Envoyée'}>} Date_etat))-Date(only({<Etat={'Crée'}>} Date_etat)),id_facture))<0,
Max(aggr(Date(only({<Etat={'Crée'}>} Date_etat))-Date(only({<Etat={'Envoyée'}>} Date_etat)),id_facture)),
Max(aggr(Date(only({<Etat={'Envoyée'}>} Date_etat))-Date(only({<Etat={'Crée'}>} Date_etat)),id_facture)))

 

 

voilà, j'ai mis en PJ le fichier qliksense résultat

Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉

View solution in original post

16 Replies
Taoufiq_Zarra

@Talend45 

how you get the values 28 ?66 ?

puisque d'après ce que tu décrits tu cherches le max entre deux dates ?

et puis combien de status existe ? est ce toujours 3 ?

pour le tableau que tu as partagé ici qu'il est le résultat de sortie que tu veux ?

Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉
Talend45
Contributor III
Contributor III
Author

Hello,

Thanks for your help.

Look this :

725F155B-E0B5-4C6F-BED0-9EC29D5D1797.jpeg

I want this result  :

Between created and sended the max value is 20 -> for the id_bill 1 between created and sended there is 1 day 
-> for the id_bill 2 between created and sended there is 20 days

So the Max is 20 days 

Between sended and paid the max value is 6         -> for the id_bill 1 between created and sended there is 6 days                                                                          -> for the id_bill 2 between created and sended there is 2 days

So the max is 6 days

 

Taoufiq_Zarra

I haven't completely get it yet.

first line : Between created and sended the max value is 20 , how ?

Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉
Talend45
Contributor III
Contributor III
Author

Sorry if I’m not clear but it’s difficult not in my language.

The objective is to know the max time it takes from a status to another status

If you look the fist table, I have two bills (id_bill = 10 and id_bill = 11), for each I have 3 status (created, sended and paid) with a date of this status. The date corresponds when the bill is to this status. For exemple, the first bill (id_bill = 10) was created the 01/02/2019, modified the 02/02/2019 and paid the 08/01/2019

For the first bill (id_bill =10), you see it takes 1 day between the status created and sended (02/01/2019 - 01/01/2019)

For the second bill (id_bill =11), you see it takes 20 days between the status created and sended (26/01/2019 - 06/01/2019)

So the max time that a bill takes from the status created and sended is 20 days.

It’s the same logic for other status. I want the max time between all status

In really I don’t have 2 bills but 100000 and 5 status but I think the method will be the same.

 

Taoufiq_Zarra

Je vais regarder demain

Je parle français 😉

Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉
Talend45
Contributor III
Contributor III
Author

Ah super,

En fait comme je disais, j’ai plusieurs factures qui passent par différents états avec la date à chaque fois du passage à cet état.

Le but c’est de savoir quel est le temps maximal que ça a mis pour passer par exemple de l’état « Cree » à la état « Modifié ». Pour cela il faut donc regarder pour chaque facture la différence entre la date de l’état « Modifié » et l’état « Crée » puis prendre le maximum.

J’avais pensé à utiliser un pivot dans Qlik pour avoir le deuxième tableau de ma photo avec les différents résultats, mais je n’y arrive pas.

J’aurais ensuite la même chose avec le min et la moyenne (avg). 

Merci de ton aide 🙂

Taoufiq_Zarra

Bonjour, est ce que tu peux partager un exemple de tes data (excel par exemple) quand tu dis "pour cela il faut donc regarder pour chaque facture la différence entre la date de l’état « Modifié » et l’état « Crée » puis prendre le maximum" => Max veut dire que tu as plusieur valeur est ce que la facture peut passer par un état 'crée' par exemple plusieurs fois ?
Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉
Talend45
Contributor III
Contributor III
Author

Bonjour,

Les données sont en base de données et sont malheureusement confidentielles, je te joins donc un exemple qui illustre mon cas.

excel.PNG

Une facture passe forcément par 3 états "Crée", "Envoyée" et "Payée".
Lorsqu'une facture est crée,  elle est insérée dans la table "Suivi" avec l'état "Crée" et la date correspondant.
Lorsqu'elle est envoyée, elle est insérée dans la table "Suivi" avec l'état "Envoyée" et la date correspondant.
Lorsqu'elle est payée, elle est insérée dans la table "Suivi"avec l'état "Payée" et la date correspondant.

La table "Suivi" est une sorte d'historique qui permet de voir les différents états par lesquels est passée une facture.

Dans le tableau, on voit que la facture 10 (id_facture) est passée par les états :
- Crée, le 01/01/2019
- Envoyée, le 02/01/2019
- Payée, le 08/01/2019

On voit que la facture 11 (id_facture) est passé par les états :
- Crée, le 06/01/2019
- Envoyée, le 26/01/2019
- Payée, le 28/01/2019

Si on regarde :
- La facture 10 a mis 1 jour pour passer de l'état "Crée" à l'état "Envoyée" (02/01/2019  - 01/01/2019)
- La facture 11 a mis 20 jours pour passer de l'état "Crée" à l'état "Envoyée" (26/01/2019 - 06/01/2019)

Le maximum qu'une facture à mise pour passé de l'état "Crée" à l'état "Envoyée" est donc de 20 jours.

C'est la même chose pour les autres états.

J'aimerais avoir le résultat sous cette forme :

excel2.PNG

Taoufiq_Zarra

Bonjour,
Pour avoir la visualisation que tu as mentionné, il faut changé dans le modèle de donnée.
c'est pour cela je te propose cette visualisation , j'ai mis en PJ le fichier Qliksense

Capture.JPG

la formule pour avoir par exemple entre Envoyée et crée est :

 

Max(aggr(Date(only({<Etat={'Envoyée'}>} Date_etat))-Date(only({<Etat={'Crée'}>} Date_etat)),id_facture))

 

mais puisque d'après ce que tu as affiché tu évite les valeurs <0 par exemple entre crée et envoyée normalement crée vient avant envoyée donc c'est une valeur <0 , ce que tu fais c'est que tu inverse, donc la nouvelle formule sera :

 

 

=if(Max(aggr(Date(only({<Etat={'Envoyée'}>} Date_etat))-Date(only({<Etat={'Crée'}>} Date_etat)),id_facture))<0,
Max(aggr(Date(only({<Etat={'Crée'}>} Date_etat))-Date(only({<Etat={'Envoyée'}>} Date_etat)),id_facture)),
Max(aggr(Date(only({<Etat={'Envoyée'}>} Date_etat))-Date(only({<Etat={'Crée'}>} Date_etat)),id_facture)))

 

 

voilà, j'ai mis en PJ le fichier qliksense résultat

Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉