je ne saisi pas tout ce que tu as mis dans le code
Bon on va essayer d'avancer un peu.
Je suppose que tu as pris la première zone de code et que tu l'as collée dans un fichier texte. Tant que tu y seras, change Id client en IdClient, ça s'intégrera plus facilement.
Ensuite on y va étape par étape.
Dans l'éditeur de script j'ai créé une nouvelle feuille (mais ce n'est pas obligatoire). Menu Onglet/ajouter un onglet. Il y a aussi une icône mais l'image n'est pas facile à coller dans le forum.
Pour forcer QlikView à mettre le nom de table que tu veux, tu fait précéder le chargement par le nom désiré terminé obligatoirement par deux points :
Pour charger le fichier j'ai utilisé l'assistant, s'agissant d'un fichier plat Le bouton Fichier de tables en bas à droite fait l'affaire. Je me suis laisser guider par les fenêtres de l'assistant et ça m'a donné :
1 2 3 4 5 6 7
|
LOAD [Id client],
Année,
Mois
FROM
C:\Formation\QlikView\TestData.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq); |
Vu la granularité souhaitée, il faut retrouver le trimestre et construire une clé sur L'année et le mois. J'ai donc modifié le script en :
1 2 3 4 5 6 7 8 9 10 11
| MaSource:
LOAD // Chargée en 1er : Récupération des données texte (ça pourrait être de l''Excel)
[Id client],
Année,
Mois,
Ceil(Mois/3) as Trimestre,
10*Année+Ceil(Mois/3) as AnnéeTrim // La granularité minimum est à l''année et au trimestre. Ce champ servira de clé.
FROM
C:\Formation\QlikView\TestData.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq); |
Pour rajouter les deux champs qui me manquent.
Note que lors de l'utilisation de l'assistant, QV te ramène le nom de tous les champs qu'il trouve mais que tu n'est pas obligée de les charger tels quels. Quoi qu'il en soit, tu peux les utiliser et changer le nom des colonnes (aliasé par as).
Cette table est chargée dans QV mais j'ai besoin de faire des regroupements. Pour me simplifier la vie, je vais donc récupérer les éléments déjà chargés pour les retravailler dans QV et créer une table ma destination.
1 2 3 4 5 6 7 8 9
| MaDestination:
LOAD
Année,
Trimestre,
AnnéeTrim,
count([Id client]) as NbClients //Calcul du nombre de clients pour chaque trimestre
Resident MaSource // Resident est nécessaire pour permettre la clause Order by
Group by Année, Trimestre, AnnéeTrim
Order by AnnéeTrim; |
Note le Resident MaSource qui indique à QV d'utiliser la table déja chargée. Pour pouvoir le faire, il faut que le chargement de cette table source soit décrit avant le chargement de la table Ma Destination sinon QV ne trouve pas les données.
Une fois que j'ai fait les regroupements, je n'ai plus besoin de la table source
donc je la supprime :
Drop table MaSource; // ici : Plus besoin des données source.
et je calcule deux variables pour trouver le dernier trimestre de l'année en cours et l'année précédente.
1 2
|
let vAnnéeTrimMax = peek('AnnéeTrim',-1,MaDestination); //Récupération de l'année trimestre de la dernière ligne de MaDestination |
Pour créer une variable, tu utilises le préfixe LET.
Pour créer une constante, tu utilises le préfixe SET.
Ici on crée des variables :
Par défaut, QV ne permet pas de compléter les variables avec les données issu du chargement. Pour lui dire d'aller les récupérer, il faut utiliser la fonction PEEK qui reçoit 3 arguments : Le nom du champ ou se trouve la donnée, Le rang dans le jeu d'enregistrement où aller la chercher (1 premier, 2 deuxième, -1 dernier, -2 avant dernier), La table à interroger.
Le calcul de l'année précedente est trivial, je te laisse chercher
let vAnnéeRef = floor(vAnnéeTrimMax/10)-1; // Identification de l'année précédente
J'aurais probablement pu également extraire la moyenne et le nombre de clients dans le script mais j'ai choisi de le faire dans le rapport.
trace Trace => $(vAnnéeTrimMax), $(vAnnéeRef);
L'instruction trace est commode, elle écrit ce que tu lui demandes dans le rapport d'intégration. En développement de script, ça peut aider.
Note qu'ici je n'ai affiché que le contenu des deux variables. Pour cela, il est nécessaire d'encadrer le nom de la variable avec $(), chez QV, on appelle cela l'expansion de la variable. En d'autre termes dans la variable, on stocke la formule pour la calculer, et le jeu $() demande de l'évaluer. C'est vrai aussi des variables générées dans le document.
J'en ai fini avec le script.
On l'exécute et on va voir ce qui se passe dans le document.
On va créer un nouvel objet graphique de type tableau simple, contenant l'année, le trimestre, et le nombre de clients. Tu peux aussi ajouter des listes de sélection si tu le désires.
Ce n'est pas trop difficile, je te laisse faire.
La grande force de QV est de pouvoir faire très simplement des sélections à l'intérieur des divers objets constituant le document.
Ces sélections servent a filtrer les données affichées. Mais quelquefois on souhaite comparer les données filtrées avec le reste ou avec des données issues de sélections précédentes. Les concepteurs de QV ont prévu ça et ont inventé une syntaxe à l'intérieur des agrégations qui permet de faire à peu près tous les rapprochements que l'on souhaite.
Pour tester on va créer un champ texte : Dans une zone vide de la feuille -> Clic droit, nouvel objet de feuille, champ texte.
et on va y coller la formule :
='Nombre de clients'&Sum (NbClients)
Ca devrait t'afficher le nombre de clients de la sélection en cours. Pour tester, tu cliques sur une ou plusieurs lignes du tableau créé au dessus et normalement le nombre de clients suit le mouvement.
Pour le fun on va changer la formule en :
='Nombre de clients'&Sum ({$}NbClients)
Refais des sélections. Rien ne change par rapport au test précédent, c'est normal {$} représente la sélection active et c'est la valeur par défaut.
Maintenant on va modifier la formule en
='Nombre de clients'&Sum ({1}NbClients)
Si tu fais des sélections dans le tableau tu t'aperçois que ton texte ne change plus. {1} représente l'ensemble des données de ton jeu de données et ignore les sélections.
De la même manière, si tu voulais voir les données de la sélection précédente, tu saisirais {$1} et pour la sélection suivante {$_1}.
Sauf que maintenant je voudrais voir dans mon texte le nombre de clients de l'année 2011 sans tenir compte de la sélection.
C'est aussi prévu : On va saisir à l'intérieur de l'accolade un filtre qui sera placé entre chevrons. Chez QV on appelle ça un modificateur.
La formule devient :
='Nombre de clients'&Sum ({1<Année={2011}>}NbClients)
Note que le 2011 est un jeu de données (un set), il est placé lui aussi entre accolades mais nécessairement à l'intérieur des chevrons.
Regarde maintenant le résultat. Le texte affiche contre vents et marées le nombre de clients de 2011.
Tout ça c'est bien beau mais l'année de référence change tous les ans. Il faut donc remplacer le 2011 par la variable créée dans le script.
='Nombre de clients'&Sum ({1<Année={'$(vAnnéeRef)'}>}NbClients)
Note l'expansion de variable pour que QV aille bien chercher la valeur. Note aussi les simples cotes qui sont les séparateurs de données textuelles (laisser les cotes marche aussi si les données sont numériques, c'est du QV pas du java).
Maintenant, il n'y a plus qu'à créer une variable dans le générateur de documents pour ne pas avoir à retaper le formule dans tous les tableaux.
Menu Paramètres / Vue d'ensemble des variables cliquer sur ajouter : tu lui donne un nom et tu colles la formule
Sum ({1<Année={'$(vAnnéeRef)'}>}NbClients)
dans la fenêtre définition.
Voila, tu as créé tes premières variables, tu n'as plus qu'à créer des conditions reposant sur ces variables dans les tableaux dont tu veux voir un affichage conditionnel. Ce n'est pas très compliqué, les infos dans mon post précédent devraient suffire.
Cordialement,
PS : On a effleuré quelques concepts des set analysis mais il y aurait encore beaucoup à dire.
Partager