Version 7.1 par crandon le 2022/04/26 11:58

Afficher les derniers auteurs
1 {{toc/}}
2
3 ----
4
5 Il est possible de réaliser des mesures calculées avancées en utilisant des fonctions javascripts.
6 Nous pouvons exécuter des tests "if" par exemple, ou des boucles "for".
7 Mais il y a aussi des fonction digdash permettant d'explorer des dimensions.
8
9 = Vérifier le contenu de la mesure calculée avec les logs =
10
11 Il est possible d'afficher une ligne dans les logs digdash grâce à la fonction :
12
13 {{code language="js"}}
14 Packages.com.digdash.utils.MessageStack.getInstance().addText("Je suis dans les logs !!! ");
15 {{/code}}
16
17 Exemple :
18
19 [[image:1600944409879-673.png]]
20
21
22 Rendu dans les logs lors de l'affichage de cette mesure dans un graphique :
23
24 [[image:1600944499398-123.png]]
25
26 Cela peut vous permettre de vérifier les différentes étapes de calcul de votre mesure calculée.
27
28 = Connaitre les dimensions filtrées =
29
30 * Exemple:
31
32 {{code language="js"}}
33 for (var i = 0; i < this.selection.dimsToFilter.length; i++)
34 {
35 var dimId = this.selection.dimsToFilter[i].dim.id;
36 Packages.com.digdash.utils.MessageStack.getInstance().addText("Nom dimension: " + dimId);
37 }
38 {{/code}}
39
40 * Résultat:
41 Nom dimension: Date
42 Nom dimension: Produit
43 Nom dimension: Régions
44
45 * Usage:
46
47 Peut être utile lorsqu’on veut renvoyer une valeur différente si une ou plusieurs dimensions sont filtrées. Nous pourrions ainsi tester la valeur de dimId est renvoyé une mesure différente en fonction.
48
49
50 A partir de la version **2022R1**, il est possible d'utiliser un objet spécifique (**filters**) contenant la liste des dimensions filtrées.
51
52 * Exemple:
53
54 {{code language="js"}}
55 var filter = filters[dimId];
56 var hierarchy = filter.hierarchy;
57 var level = filter.level;
58 var mode = filter.mode;
59
60 //filtre de type liste
61 var members = filter.selectedMembers;
62
63 //filtre de type intervalle
64 var min = filter.min;
65 var max = filter.max;
66
67 //filtre de type Ensemble
68 var setId = filter.setId;
69
70 //filtre de type Règle
71 var operators = filter.operators;
72 var values = filter.values;
73
74 {{/code}}
75
76 * Usage:
77
78 Il est préférable d'utiliser cette version de scripts, elle permet une optimisation des calculs des mesures.
79
80 = Connaitre les dimensions explorées =
81
82 * Exemple:
83
84 {{code language="js"}}
85 for (var i = 0; i < this.selection.dimsToExplore.length; i++)
86 {
87 var dimId = this.selection.dimsToExplore[i].dim.id;
88 Packages.com.digdash.utils.MessageStack.getInstance().addText("Nom dimension: " + dimId);
89 }
90 {{/code}}
91
92 * Résultat:
93
94 Nom dimension: Date
95 Nom dimension: Produit
96 Nom dimension: Régions
97
98 * Usage:
99
100 Peut être utile lorsqu’on veut renvoyer une valeur différente si une ou plusieurs dimensions sont explorées dans le graphique.
101
102
103 A partir de la version **2022R1**, il est possible d'utiliser un objet spécifique (**dimsExplorer**) contenant la liste des dimensions explorées dans le graphique.
104
105 * Exemple:
106
107 {{code language="js"}}
108 var dimExplorer = dimsExplorer[dimId];
109 var hierarchy = dimExplorer.hPos;
110 var level = dimExplorer.lPos;
111
112 {{/code}}
113
114 * Usage:
115
116 Il est préférable d'utiliser cette version de scripts, elle permet une optimisation des calculs des mesures.
117
118 = Le double passage =
119
120 * Exemple:
121
122 {{code language="js"}}
123 // needSecondPass : DO NOT REMOVE THIS LINE
124 if (phase == 0)
125 {
126 // do something
127 }
128 else
129 {
130 // do something
131 }
132 {{/code}}
133
134 * Résultat:
135
136 Oblige à passer à deux reprise dans la mesure calculée
137
138 * Usage:
139
140 Peut être utile pour enregistrer des valeurs la 1ère fois (dans un tableau par exemple) puis dans un second temps renvoyer des résultats suivant les valeurs dans ce tableau (voir fiche sur le [[rang>>https://doc.digdash.com/xwiki/wiki/howtos/view/howtos/Studio/Calculate_Rank/]])
141
142 = Objet Global =
143
144 * Exemple:
145
146 {{code language="js"}}
147 if (!_global.count)
148 {
149 _global.count = 0;
150 }
151 else
152 {
153 _global.count = _global.count + 1;
154 }
155 return _global.count;
156 {{/code}}
157
158 * Résultat:
159
160 1
161 2
162 3
163 … (suivant le nombre de valeur à représenter dans la visualisation)
164
165 * Usage:
166
167 Permet de sauver des valeurs dans des variables au cours de l'exécution d’une mesure calculée
168
169 = Cumul sur n’importe quel axe =
170
171 Exemple : Exploration de numéros de semaine (NUM_WEEK) et de dates (DAY_DT), nous souhaitons cumuler le CA sur chacune des semaines.
172 ! Attention ! La date doit être ordonnée de manière croissante dans la source
173
174 {{code language="js"}}
175 // needSecondPass : DO NOT REMOVE THIS LINE
176 var section = NUM_WEEK(dmember) + "";
177 var key = DAY_DT(dmember) + "";
178 var val = CA TTC [N](NO_AGG);
179 if (phase == 0)
180 {
181 function add(accumulator, a)
182 {
183 return accumulator + a;
184 }
185 if (!_global.vals)
186 {
187 _global.vals = {};
188 _global.run = {};
189 }
190 if (!_global.vals[section])
191 {
192 _global.vals[section] = {};
193 _global.run[section] = new Array();
194 _global.run[section].push(0);
195 }
196 if (!_global.vals[section][key])
197 {
198 _global.vals[section][key] = _global.run[section].reduce(add) + val;
199 _global.run[section].push(val);
200 }
201 Packages.com.digdash.utils.MessageStack.getInstance().addText("***PHASE0 _global.vals[" + section + "][" + key + "]: " + _global.vals[section][key] + " val: " + val);
202 }
203 else
204 {
205 Packages.com.digdash.utils.MessageStack.getInstance().addText("***PHASE1 _global.vals[" + section + "][" + key + "]: " + _global.vals[section][key]);
206 return _global.vals[section][key];
207 }
208 {{/code}}