Code source wiki de Fonctions Mesure calculée avancés
Version 8.1 par Aurelie Bertrand le 2024/09/20 10:17
Afficher les derniers auteurs
author | version | line-number | content |
---|---|---|---|
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}} |