Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Implémenter un "champ compteur" dans un calendrier

Bonjour,

Débutant sur l'outil Qlik Sense je souhaiterai vous exposer mon "problème" (en espérant que celui-ci n'en soit pas un).

Je charge une première base listant des événements avec leur date de création (Rapport:)

Je génère ensuite automatique un calendrier définis par une date de début et une date de fin. (Calendrier:)

Je souhaiterai ajouter au Calendrier: (via le script de chargement de données) un champ comptant le nombre d’événements crées depuis le début et jusqu’à chacune des date (et jusqu’à aujourd'hui) du calendrier (et ce grâce aux infos contenues dans Rapport:)

En espérant avoir été clair et en espérant que vous puissiez m'aider.

Cordialement,

Rémi

1 Solution

Accepted Solutions
brunobertels
Master
Master

Re,

Je pense que je comprend mieux ton problème ou ton besoin plutôt.

Si je t'ai bien suivi tu veux pouvoir cumuler ton nombre d'évènements par date ? c'est bien çà ?

Si c'est le cas voici un nouveau fichier adapté avec deux formules faisant la même chose : Cumuler des événements par date. Ici j'utilise le même fichier avec des dates et des ventes. Il faudra l'adapter utiliser count(evenement) ou count(distinct(evenement) : on affinera au besoin

dans le fichier joint j'ai enlever dans la table la dimension ID faite avec autonumber

j'ai donc :

date ( tu prendras le champs date de ton calendrier)

sales avec sum(sales) additionne les ventes par date ( a adapter pour toi avec un count(évènement) pour avoir le nombre d'évènement par date)

rangesum(above(sum(sales),0,RowNo())) : cette mesure cumule les ventes en additionnant la somme des lignes précédentes à la ligne actuelle. Sachant que chaque ligne = une date

sum(aggr(rangesum(above(sum(sales),0,RowNo())),date)) : cette mesure fait la même chose mais en créant une table en mémoire pour cumuler les ventes à chaque date ( voir AGGR() dans l'aide  )

Si tu sélectionnes une plage de date les deux formules cumuleront les ventes ou les évènements de la 1er date sélectionnée à la dernière date sélectionnée.

et la même :

sum(aggr(rangesum(above(sum( {$<date>} sales),0,RowNo())),date)) : celle ci est un peu différente puisque si tu sélectionnes une plage de dates elle comptera le cumul à partir du CUMUL des ventes existants à cette date jusqu'a la dernier date sélectionnée.

Pour aller plus loin :

billet de blog en anglais trés bien fait  par Henric Cronström :

Accumulations

above fonction :

The Above Function

The As OF table : ( permet de générer un calendrier Cumulatif sans doute plus proche de ce que tu cherches)

The As-Of Table

Bruno

View solution in original post

6 Replies
brunobertels
Master
Master

Bonjour Remi

Regarde du coté de cette fonction : autonumber

dans le script :

autonumber(événements) as événements_cumul

il est possible aussi de le faire dans les tableaux ou graphique avec la fonction rangesum() et above() pour cumuler les événements par date

Bruno

Anonymous
Not applicable
Author

Bonjour Bruno,

Je vais de ce pas essayer de comprendre comment fonctionne la fonction autonumber.

En espérant que la solution soit la bonne (et que je comprenne son utilisation bien sur).

Merci encore,

Rémi

brunobertels
Master
Master

Bonjour

Ci joint un petit exemple avec la fonction autonumber

LA situation

une base avec des dates et des ventes :

 

datesales
01/05/20150
02/05/201510
03/05/201510
04/05/201510
05/05/201510
06/05/201510
07/05/20150
08/05/20150
09/05/20150
10/05/20150

objectif Avoir un numéro ID pour les dates lorsque les ventes sont > 0

ce qui donne ceci dans le script :

LOAD

if(sales>0,autonumber("date"))as ID,

    "date",

    sales

FROM [lib://Help Test/autonumber.xls]

(biff, embedded labels, table is Feuil1$);

permettant d'avoir ceci an tableau ds Qlik Sense ::

Anonymous
Not applicable
Author

Merci Bruno,

Cet exemple illustre parfaitement ce que j'ai pu lire ce matin sur la fonction autonumber (exemple plus clair que celui exposé dans l'aide Qlik). Mais je n'arrive pas à imaginer que cela pourrait me permettre de compter les 'événements' parus avant une date donnée.

De ce que j'ai compris, autonumber me permet de donner un ID pour chacune de dates dont le critère "fixe" est sales >0 (dans ton exemple).

Dans mon cas, le critères est "variable" car est différent pour chaque date donnée (donc a chaque ligne de mon calendrier)

Par ailleurs, mon point de blocage concerne surtout le fait que je travaille avec deux bases. Je m'explique:

Je charge une première base contenant mes evenements ([Rapport])

[Rapport]:

LOAD

[Statut événement],

date([Date déclaration],'DD/MM/YYYY') as [Date jour déclaration]

FROM [lib://...]

(ooxml, embedded labels, header is 14 lines, table is [Rapport])

Puis je crée de manière indépendante à [Rapport] un [Calendrier] (afin d'avoir toute les dates dans celui-ci): [Calendrier]

/* variable date min et max pour l'interval */

Let varMinDate = Num('01/01/2015');

Let varMaxDate = Num('31/12/2030');

// generation des dates au format dd/mm/aaaa

TempCalendar:

REPLACE LOAD

Date($(varMinDate) + IterNo() - 1) as TempDate

AutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate);

//table avec detail date

Calendrier:

REPLACE LOAD

Year(TempDate) as year,

Month(TempDate) as month,

DATE(TempDate, 'DD/MM/YYYY hh:mm') as dtime

Resident TempCalendar

Order By TempDate ASC;

Ce que je souhaite faire, si l'autonumber répond a mon besoin, est de pouvoir rajouter à [Calendrier] une colonne (l'autonumber en l'occurence) dont la formule serait:

- de compter le nombre d'evenements dont [Date jour déclaration] < [dtime]


[Date jour déclaration] appartenant à [Rapport]

[dtime] appartenant à [Calendrier]

J'espère ne pas trop t’embêter avec mon problème mais c'est assez difficile d'expliquer avec des mots.

Merci en tout cas pour ton soutien.

Je vais essayer de me replonger dans la partie "Association entre les tables" si je trouve un tutoriel bien fait.

Rémi

brunobertels
Master
Master

Re,

Je pense que je comprend mieux ton problème ou ton besoin plutôt.

Si je t'ai bien suivi tu veux pouvoir cumuler ton nombre d'évènements par date ? c'est bien çà ?

Si c'est le cas voici un nouveau fichier adapté avec deux formules faisant la même chose : Cumuler des événements par date. Ici j'utilise le même fichier avec des dates et des ventes. Il faudra l'adapter utiliser count(evenement) ou count(distinct(evenement) : on affinera au besoin

dans le fichier joint j'ai enlever dans la table la dimension ID faite avec autonumber

j'ai donc :

date ( tu prendras le champs date de ton calendrier)

sales avec sum(sales) additionne les ventes par date ( a adapter pour toi avec un count(évènement) pour avoir le nombre d'évènement par date)

rangesum(above(sum(sales),0,RowNo())) : cette mesure cumule les ventes en additionnant la somme des lignes précédentes à la ligne actuelle. Sachant que chaque ligne = une date

sum(aggr(rangesum(above(sum(sales),0,RowNo())),date)) : cette mesure fait la même chose mais en créant une table en mémoire pour cumuler les ventes à chaque date ( voir AGGR() dans l'aide  )

Si tu sélectionnes une plage de date les deux formules cumuleront les ventes ou les évènements de la 1er date sélectionnée à la dernière date sélectionnée.

et la même :

sum(aggr(rangesum(above(sum( {$<date>} sales),0,RowNo())),date)) : celle ci est un peu différente puisque si tu sélectionnes une plage de dates elle comptera le cumul à partir du CUMUL des ventes existants à cette date jusqu'a la dernier date sélectionnée.

Pour aller plus loin :

billet de blog en anglais trés bien fait  par Henric Cronström :

Accumulations

above fonction :

The Above Function

The As OF table : ( permet de générer un calendrier Cumulatif sans doute plus proche de ce que tu cherches)

The As-Of Table

Bruno

Anonymous
Not applicable
Author

Merci Bruno pour ton aide précieuse!

Ce n'est pas très intuitif comme formule mais cela correspond à ce que je cherchais.