Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Calculer l'évolution des abonnés par année

Bonjour,

je travaille sur Qlik Sense  Desktop et je souhaite afficher dans un graphique en barre le nombre d'abonnés pour toutes les années d'abonnement pour voir leur évolution.

Par exemple : [Nombre d'abonnés(2017) ] -- Nombre d'abonnés(2016)] ... ............[Nombre d'abonnés(1990) ]

Dans mon script, je récupère une table agrserviceagr ou je recupere les champs sur l'abonnés :


Ref_PDS     : Reference de l'abonné

Date_debut : Date debut de l'abonnement

Date_Fin     : Date fin de l'abonnement   

Un abonné pour une année N est celui dont la debut de son abonnement <= '31/12/Annee' et la date fin de son abonnement doit etre null ou >='01/01/Annee'. Voici un exemple sous forme de requete sql pour l'année 2016:


select count(*)||'-'||2016 from agrserviceagr where Date_debut <='31/12/2016'  and nvl(Date_debut ,sysdate)>='01/01/2016'


Comment pourrait je l'appliquer pour toutes les années et l'adapter sur la fonction du graphisme dans Qlik.


Merci d'avance

14 Replies
christophebrault
Specialist
Specialist

Bonjour,

Tu touches là une problématique pas forcément évidente à résoudre dans Qlik, puisque tu veux montreer uen évolution et donc un historique à partir de données comprenant un interval de date.

Pour moi deux solutions :

Utiliser intervalmatch(), avec lequel je ne suis pas familier.

Personnellement, je préfère "créer" des données sur l'historique.

L'idée est de créer une table sur une date (fin d'année, de mois, etc) qui stocke les informations. Dans ton cas :

TEMP:

LOAD

Ref_PDS,

Date_debut

Date_Fin

FROM sourceDeDonnées;


join // Multiplie les lignes de ta table selon le calendrier contenant les dates voulues

load * inline[

DateCalendrier

31/12/2015

31/12/2016

20/10/2017

];


TableDefinitive:

LOAD

Ref_PDS,

DateCalendrier,

Date_debut

Date_Fin

resident TEMP

where Date_debut<=DateCalendrier

And (len(Date_Fin)=0 // date de fin nulle

     or Date_Fin>DateCalendrier);

drop table TEMP;


Attention, cette méthode, sur de gros volume de données ou un calendrier très fin ( à la journée) va être très gourmand


On peut arriver au même résultat en faisant une boucle, selon les contraintes de perf.


Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
Anonymous
Not applicable
Author

Merci pour votre réponse.

c'est quoi DateCalendrier ? c'est l'objet calendrier que j'ai créé?

Merci d'avance

Anonymous
Not applicable
Author

Parceque la portion du script contenant DateCalendrier ne passe pas

christophebrault
Specialist
Specialist

load * inline [

DateCalendrier

31/12/2015

31/12/2016

20/10/2017

];

j'ai oublié l'espace après inline...

C'est un exemple de date, tu peux le générer différemment.

Dans ton graphique, tu as juste à faire count(distinct Ref_PDS) avec DateCalendrier en dimension

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
Anonymous
Not applicable
Author

J'ai chargé les données mais je n'arrive pas à retrouver DateCalendrier dans le graphisme pour ajouter la dimension.

christophebrault
Specialist
Specialist

Peux tu partager ton fichier de données (en ayant juste les références tu ne devrai pas avoir de problème de confidentialité)

je pourrai ainsi t'envoyer l'appli test pour que tu vois mieux

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
Anonymous
Not applicable
Author

C'est maintenant j'ai chargé les données.

Mais j'ai besoin de deux dates (01/01/Annee et 31/12/Annee) donc j'ai du mettre la jointure dans la table TEMP : DateCalendrierDebut et DateCalendrierFin mais mon probleme c'est au niveau du graphisme je met quel dimension(Annee doit etre en meme temps Annee(DateCalendrierDebut) et Annee(DateCalenfrierFin) ???



Merci d'avance.

christophebrault
Specialist
Specialist

La question, c'est pourquoi tu a deux dates de calendrier différentes.

En l'état, je ne peux pas t'aider beaucoup plus, j'ai du mal à comprendre ce que tu veux faire, et comment est modéliser ton application.

Peux tu partager ton application, ou mettre une image de ton modèle de données à minima ?

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
Anonymous
Not applicable
Author

Comme j'ai mentionné dans ma requete sql j'aurai besoin de date pour comparer : Par exemple pour l'année 2016, j'aurai besoin du '31/12/2016'  pour le comparer à la date début de l'abonnement et de 01/01/2016 pour le comparer à la date fin de l'abonnement:

select count(*)||'-'||2016 from agrserviceagr where Date_debut <='31/12/2016'  and nvl(Date_fin,sysdate)>='01/01/2016'.


Merci d'avance