Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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.
Merci pour votre réponse.
c'est quoi DateCalendrier ? c'est l'objet calendrier que j'ai créé?
Merci d'avance
Parceque la portion du script contenant DateCalendrier ne passe pas
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
J'ai chargé les données mais je n'arrive pas à retrouver DateCalendrier dans le graphisme pour ajouter la dimension.
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
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.
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 ?
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