Qlik Community

Groupe des Utilisateurs Francophones

Announcements
June 28, 10AM ET: Qlik Nation and Qlik Community present: CyberSleuth REGISTER TODAY
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Créer une table avec de nouvelles variables pour sélection pertinente

Bonjour,

Je suis assez nouveau sur QlikView et je suis confronté au problème suivant :

Dans mon fichier source (ci-joint), j'ai 3 variables : ID_Restitution_, Indicateurs et periode. Je crée en plus une variable Date pour avoir le format YYYY/MM/DD.

L'idée est de représenter les données en fonction de certaines formules (somme des indicateurs en fonction de certains ID_Restitution_) en fonction de la date.

J'ai 3 formules par exemple dont le code est le suivant :

//Formule1 :

SET formule1=Sum({$<ID_Restitution_={"KP_01_001*","KP_01_002*"}>}[Indicateurs]);

//Formule2 :

SET formule2=Sum({$<ID_Restitution_={"KP_01_003*","KP_01_004*","KP_01_005*"}>}[Indicateurs]);

//Formule3 :

SET formule3=Sum({$<ID_Restitution_={"KP_01_006*","KP_01_007*","KP_01_008*","KP_01_009*","KP_01_010*"}>}[Indicateurs]);

J'arrive à bien les représenter dans un graphique en prenant la dimension Date puis dans les Expressions, mettre les références aux 3 formules ci-dessus.

Cependant avec cette méthode, je n'arrive pas à avoir une sélection sur les formules : n'afficher que la formule1, que la formule1 et 3 etc.

Ma question est : comment fabriquer une sélection par type de formule? Ou plus précisément comment créer une nouvelle table qui contiendrait le variable Date (qui sert de clé), une variable libellé_formule (contenant formule1, formule2, etc.) et une variable volumétrie (qui correspondrait à la somme des indicateurs comme ci-dessus)?

Guillaume

Labels (1)
1 Solution

Accepted Solutions
Not applicable
Author

Ça y est je tiens ce que je souhaitais. Encore merci David ton post m'a bien servi.

Pour faire l'étape 1 :

//Lecture du fichier source

Donnees_sources :

LOAD ID_Restitution_,

     Indicateurs,

     periode,

     Date(Date#(periode,'YYYYMMDD')) as Date,

     IF(WildMatch(ID_Restitution_,'KP_01_001*','KP_01_002*')<>0,'Formule1',

      IF(WildMatch(ID_Restitution_,'KP_01_003*','KP_01_004*','KP_01_005*')<>0,'Formule2','Formule3')) as [Type formule],

     IF(WildMatch(ID_Restitution_,'KP_01_008*')<>0,-Indicateurs,Indicateurs) as Indic_new

FROM

(biff, embedded labels);

Pour faire l'étape 2 :

Donnees_suite2 :

LOAD Date,

  [Type formule],

  Sum(Indicateurs) as Somme_bis

Resident Donnees_sources

Group By Date, [Type formule];

Conclusion :

Ainsi je peux faire une sélection sur [Type formule].

Dans mon graphique j'ai en dimension la variable Date ainsi que [Type formule].

Et en expression Sum(Indicateurs).

Remarque :

L'étape 2 n'est pas nécessaire.

L'étape 1 non plus si on ne souhaite pas faire les sélections. Il suffit de faire comme David a dit.

Dans le graphe prendre en dimension, la Date une une dimension calculée qui a la forme suivante :

IF(WildMatch(ID_Restitution_,'KP_01_001*','KP_01_002*')<>0,'Formule1',

      IF(WildMatch(ID_Restitution_,'KP_01_003*','KP_01_004*','KP_01_005*')<>0,'Formule2','Formule3'))

Puis en expression Sum(Indicateurs).

View solution in original post

8 Replies
Not applicable
Author

Si je peux rajouter une peu plus de détail pour vous montrer où j'en suis dans mon script :

Donnees :

LOAD ID_Restitution_,

     Indicateurs,

     periode,

     Date(Date#(periode,'YYYYMMDD')) as Date

FROM

(biff, embedded labels);

Donnees_suite :

LOAD Date,

  'Formule1' as Libellé_formule,

  Sum(Indicateurs) as volumetrie

Resident Donnees

Group By Date;

L'idée est de créer dans la table Donnees_suite un libellé par type de formule avec une certaine somme qui correspond aux Set Analysis mis dans mon premier message ci-dessus.

larouge69
Contributor III
Contributor III

Bonjour Guillaume,

Je te conseille de travailler avec des dimensions représentant des axes d'analyse et non pas des indicateurs.

Tu devrais définir dans ton script des dimensions telles que :

Wildmatch('ID_Restitution_','KP_01_001*','KP_01_002*') as[Dim 1]

...

Dans ton graph, il suffit de mettre en dimension [Dim 1] et en expression l'indicateur que tu souhaites :

sum([Indicateur])

La fonction wildmatch compare ['ID_Restitution_'] à la chaîne saisie entre quote (' ') + *. Si ok, elle renvoie 1, 2,... selon le nombre de chaines comparées.

Si tu dois faire des set analysis sur tes dimensions par la suite, tu peux selectionner uniquement les valeurs comparées et recherchées

Par exemple sum({<[Dim 1]>}={'1']) [indicateur] pour l'analyse des KP_01_001*

C'est la seule façon que j'ai trouvé de mon côté pour faire ce genre de manip.

L'idéal serait d'avoir dans le script quelque chose du genre :

if('ID_Restitution_' CONTIENT 'KP_01_001', ALORS = DIMENSION)


J’espère t'aider avec ça

Not applicable
Author

Bonjour David,

Je te remercie pour ta réponse. Je vais voir ce que je peux faire avec tes indications. Je vais regarder plus de détails sur la fonction Wildmatch. Ainsi que sur les IF.

Guillaume

Not applicable
Author

Finalement, je n'arrive pas à faire fonctionner correctement la fonction Wildmatch. Ou du moins, je ne vois pas comment m'en servir correctement pour arriver à mes fins.

Je n'ai peut-être pas été assez précis dans mon problème. Je joins donc le fichier source (Exemple.xls) et un fichier source suite (Exemple_suite.xls) obtenu à la main.

Je joins aussi le rapport QlikView (Exemple.qvw) pour visualiser ce que je souhaite : regarder le graphique à atteindre qui change en fonction des formules sélectionnées.

En fait, ce que je souhaite faire sous QlikView c'est de créer une table qui correspond au fichier Exemple_suite.xls en partant du fichier source. Afin de faire un graphique qui dépend des sélections de formules.

Est-ce que c'est possible?

Est-ce nécessaire? Si non, quelle méthode employer?

Merci

J'espère avoir été plus clair avec mes exemples.

Pour information, je n'ai que la version gratuite de QlikView. La licence se fait attendre... Mais je ne peux plus ouvrir de rapport QVW actuellement.

Guillaume

Not applicable
Author

J'aurai une idée d'algorithme, mais je ne sais pas si c'est faisable sous QlikView :

Etape 1 :

Si ID_Restitution_ contient 'KP_01_001*' ou 'KP_01_002' alors formule1

Sinon Si ID_Restitution_ contient 'KP_01_003*' ou 'KP_01_004' ou 'KP_01_005' alors formule2

         Sinon formule3

     AS [Type formule]

Etape 2 :

Ensuite je crée une nouvelle table où je fais la somme des indicateurs GROUP BY Date, [Type formule]

Le problème c'est que je ne sais pas faire l'étape 1 :

Je dois avoir un soucis avec WildMatch() ne serait-ce que pour tester la première partie des IF :

IF(WildMatch('ID_Restitution_','KP_01_001*','KP_01_002*')<>0,'Formule1','Formule2') as [Type formule]

J'ai toujours Formule2 dans mon résultat...

Not applicable
Author

Ça y est je tiens ce que je souhaitais. Encore merci David ton post m'a bien servi.

Pour faire l'étape 1 :

//Lecture du fichier source

Donnees_sources :

LOAD ID_Restitution_,

     Indicateurs,

     periode,

     Date(Date#(periode,'YYYYMMDD')) as Date,

     IF(WildMatch(ID_Restitution_,'KP_01_001*','KP_01_002*')<>0,'Formule1',

      IF(WildMatch(ID_Restitution_,'KP_01_003*','KP_01_004*','KP_01_005*')<>0,'Formule2','Formule3')) as [Type formule],

     IF(WildMatch(ID_Restitution_,'KP_01_008*')<>0,-Indicateurs,Indicateurs) as Indic_new

FROM

(biff, embedded labels);

Pour faire l'étape 2 :

Donnees_suite2 :

LOAD Date,

  [Type formule],

  Sum(Indicateurs) as Somme_bis

Resident Donnees_sources

Group By Date, [Type formule];

Conclusion :

Ainsi je peux faire une sélection sur [Type formule].

Dans mon graphique j'ai en dimension la variable Date ainsi que [Type formule].

Et en expression Sum(Indicateurs).

Remarque :

L'étape 2 n'est pas nécessaire.

L'étape 1 non plus si on ne souhaite pas faire les sélections. Il suffit de faire comme David a dit.

Dans le graphe prendre en dimension, la Date une une dimension calculée qui a la forme suivante :

IF(WildMatch(ID_Restitution_,'KP_01_001*','KP_01_002*')<>0,'Formule1',

      IF(WildMatch(ID_Restitution_,'KP_01_003*','KP_01_004*','KP_01_005*')<>0,'Formule2','Formule3'))

Puis en expression Sum(Indicateurs).

larouge69
Contributor III
Contributor III

Salut Guillaume,

Bravo pour ton analyse. Je me resservirais certainement de la combinaison du if et du wildmatch. Je n'y avais pas pensé.

Je vois que tu post à côté une réflexion similaire.

Je vais regarder avec les fichiers xls en exemple que je n'ai pas pu consulter plus tot.

Not applicable
Author

Salut David,

Merci, mais c'est surtout toi qui m'a orienté avec ton post quand tu as marqué dans ton post :

L'idéal serait d'avoir dans le script quelque chose du genre :

if('ID_Restitution_' CONTIENT 'KP_01_001', ALORS = DIMENSION)


Donc j'ai par la suite regardé la syntaxe du IF, du WildMatch. Et après quelques tests le tour était joué.