Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Je possède un jeu de donnée dans lequel je dispose de plusieurs activités.
Ces activités possèdent plusieurs statuts d'activité (activité planifiée, activité commencée, activité terminée, activité facturée, etc.) associés à une date et une heure (format horodateur).
J'aimerai, avec le logiciel Qlik Sense, déterminer le temps qui s'est déroulé entre le statut "activité commencée" et le statut "activité terminée" sans prendre en compte les autres statuts qui ne m'intéressent pas.
Pouvez-vous m'aider s'il vous plait ?
PS : Je ne sais pas si ma question est très claire donc demandez plus de précisions si besoin.
Bonjour,
voici une solution
===========================
data:
LOAD ctivity_id,
statut,
date_time_statut
FROM
[test.txt]
(txt, codepage is 1252, embedded labels, delimiter is ';', msq);
donnée:
load *, if( not isnull(date_time_statut_deb),date_time_statut - date_time_statut_deb) as délai;
load ctivity_id,
statut,
if ( ctivity_id <> peek(ctivity_id), 1,0) as flagdebut,
if ( ctivity_id = peek(ctivity_id) and statut <> 'activité commencée', peek(date_time_statut)) as date_time_statut_deb,
date_time_statut
resident data where statut <> 'activité confirmé' and statut <> 'activité programmé'
order by ctivity_id, date_time_statut asc;
drop table data;
==================================
A+
bonjour Jérôme,
pour ma part, je ferai dans le script (si c'est dans la même table) :
load*,
if(activité='[activité commencée]',TonChampDateHeure)-if(activité='[activité terminée]',TonChampDateHeure) as DélaiTTT;
load Matable
from...
Florent
si non, je pense que tu peux le faire aussi dans l'expression.
J'essaye d'écrire la première formule et elle ne se compile pas mais il n'y a pas non plus de message d'erreur.
Que voulez-vous dire par '"dans l'expression" ?
Je vais tenter de mieux expliquer mon cas.
J'avais également oublié qu'il y avait un statut "pause" lorsque l'activité ne s'est pas fait d'une traite.
Par exemple je peux avoir pour une activité des données présentées ainsi :
activity_id | statut | date_time_statut
activity_1 | activité programmé | 14/07/2016 10:00:00
activity_1 | activité confirmé | 14/07/2016 15:00:00
activity_1 | activité commencée | 20/07/2016 11:00:00
activity_1 | pause | 20/07/2016 13:00:00
activity_1 |activité commencée | 20/07/2016 14:00:00
activity_1 |pause | 20/07/2016 17:30:00
activity_1 |activité commencée | 21/07/2016 09:30:00
activity_1 |activité terminée | 21/07/2016 10:29:00
Il se peut également que l'activité ce soit terminée un première fois mais qu'une seconde intervention soit finalement programmée pour une quelconque raison et que cela nous rajoute :
activity_1 | activité commencée | 22/07/2016 08:00:00
activity_1 | activité terminée | 22/07/2016 09:30
Du coup j'aimerai que pour cette activity_1 Qlik Sense me renvoi une durée d'activité de 6:29 si le premier cas est avéré ou 7:59 dans le cas où la deuxième intervention venait à se rajouter.
J'espère que l'exemple rend la question plus claire
Bonjour,
voici une solution
===========================
data:
LOAD ctivity_id,
statut,
date_time_statut
FROM
[test.txt]
(txt, codepage is 1252, embedded labels, delimiter is ';', msq);
donnée:
load *, if( not isnull(date_time_statut_deb),date_time_statut - date_time_statut_deb) as délai;
load ctivity_id,
statut,
if ( ctivity_id <> peek(ctivity_id), 1,0) as flagdebut,
if ( ctivity_id = peek(ctivity_id) and statut <> 'activité commencée', peek(date_time_statut)) as date_time_statut_deb,
date_time_statut
resident data where statut <> 'activité confirmé' and statut <> 'activité programmé'
order by ctivity_id, date_time_statut asc;
drop table data;
==================================
A+
Merci pour cette réponse,
J'ai légèrement modifié votre code pour obtenir ce qu'il me fallait.
Si ça intéresse quelqu'un, j'ai procédé ainsi :
Délai:
load activity_id,
date_time_status,
status_id,
Statut,
if ( activity_id = peek(activity_id),if(status_id <> 60, Time(date_time_status-peek(date_time_status)),'00:00'),'00:00') as délai
resident ActivityStatus where (status_id = 60 or (status_id=68 or (status_id=70)))
order by activity_id, date_time_status;
Load activity_id, Time(sum(délai)) as délai_total resident Délai Group By activity_id;