Version 8.1 par Aurelie Bertrand le 2024/09/20 10:17

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