@ui5/mcp-server 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +25 -20
  3. package/lib/registerTools.d.ts +2 -2
  4. package/lib/registerTools.js +4 -0
  5. package/lib/registerTools.js.map +1 -1
  6. package/lib/resources/documentation/getDocumentation.d.ts +1 -1
  7. package/lib/resources/documentation/getDocumentation.js +2 -2
  8. package/lib/resources/documentation/getDocumentation.js.map +1 -1
  9. package/lib/tools/create_integration_card/create_integration_card.d.ts +8 -0
  10. package/lib/tools/create_integration_card/create_integration_card.js +74 -0
  11. package/lib/tools/create_integration_card/create_integration_card.js.map +1 -0
  12. package/lib/tools/create_integration_card/index.d.ts +3 -0
  13. package/lib/tools/create_integration_card/index.js +42 -0
  14. package/lib/tools/create_integration_card/index.js.map +1 -0
  15. package/lib/tools/create_integration_card/schema.d.ts +8 -0
  16. package/lib/tools/create_integration_card/schema.js +20 -0
  17. package/lib/tools/create_integration_card/schema.js.map +1 -0
  18. package/lib/tools/create_ui5_app/create_ui5_app.js +2 -0
  19. package/lib/tools/create_ui5_app/create_ui5_app.js.map +1 -1
  20. package/lib/tools/create_ui5_app/templateProcessor.d.ts +2 -0
  21. package/lib/tools/create_ui5_app/templateProcessor.js.map +1 -1
  22. package/lib/tools/get_integration_cards_guidelines/guidelines.d.ts +1 -0
  23. package/lib/tools/get_integration_cards_guidelines/guidelines.js +6 -0
  24. package/lib/tools/get_integration_cards_guidelines/guidelines.js.map +1 -0
  25. package/lib/tools/get_integration_cards_guidelines/index.d.ts +3 -0
  26. package/lib/tools/get_integration_cards_guidelines/index.js +31 -0
  27. package/lib/tools/get_integration_cards_guidelines/index.js.map +1 -0
  28. package/lib/tools/run_ui5_linter/resultContext.js +1 -1
  29. package/lib/tools/run_ui5_linter/resultContext.js.map +1 -1
  30. package/lib/utils/ui5Manifest.d.ts +1 -0
  31. package/lib/utils/ui5Manifest.js +14 -0
  32. package/lib/utils/ui5Manifest.js.map +1 -0
  33. package/npm-shrinkwrap.json +381 -313
  34. package/package.json +20 -19
  35. package/resources/docs/1.136.11/22f50c0f0b104bf3ba84620880793d3f.md +131 -0
  36. package/resources/docs/1.136.11/738ed025b36e484fa99046d0f80552fd.md +173 -0
  37. package/resources/docs/{1.136.7 → 1.136.11}/index.json +14 -0
  38. package/resources/guidelines.md +6 -0
  39. package/resources/integration_cards_guidelines.md +1679 -0
  40. package/resources/template-card/package.json +12 -0
  41. package/resources/template-card/src/analytical.ejs +157 -0
  42. package/resources/template-card/src/calendar.ejs +90 -0
  43. package/resources/template-card/src/dt/Configuration.js +43 -0
  44. package/resources/template-card/src/i18n/i18n.properties +2 -0
  45. package/resources/template-card/src/list.ejs +27 -0
  46. package/resources/template-card/src/manifest.json +38 -0
  47. package/resources/template-card/src/object.ejs +44 -0
  48. package/resources/template-card/src/table.ejs +36 -0
  49. package/resources/template-card/src/timeline.ejs +42 -0
  50. package/resources/template-card/test/App.js +50 -0
  51. package/resources/template-card/test/index.css +57 -0
  52. package/resources/template-card/test/index.html +45 -0
  53. package/resources/template-js/webapp/manifest.json +2 -2
  54. package/resources/template-ts/webapp/manifest.json +2 -2
  55. /package/resources/docs/{1.136.7 → 1.136.11}/00737d6c1b864dc3ab72ef56611491c4.md +0 -0
  56. /package/resources/docs/{1.136.7 → 1.136.11}/0187ea5e2eff4166b0453b9dcc8fc64f.md +0 -0
  57. /package/resources/docs/{1.136.7 → 1.136.11}/032be2cb2e1d4115af20862673bedcdb.md +0 -0
  58. /package/resources/docs/{1.136.7 → 1.136.11}/28fcd55b04654977b63dacbee0552712.md +0 -0
  59. /package/resources/docs/{1.136.7 → 1.136.11}/676b636446c94eada183b1218a824717.md +0 -0
  60. /package/resources/docs/{1.136.7 → 1.136.11}/a87ca843bcee469f82a9072927a7dcdb.md +0 -0
  61. /package/resources/docs/{1.136.7 → 1.136.11}/b0fb4de7364f4bcbb053a99aa645affe.md +0 -0
  62. /package/resources/docs/{1.136.7 → 1.136.11}/fe1a6dba940e479fb7c3bc753f92b28c.md +0 -0
@@ -0,0 +1,1679 @@
1
+ # UI Integration Cards Development Guidelines
2
+
3
+ > *This document outlines the fundamental rules and best practices an AI agent must follow when developing or modifying Integration Cards. Adherence to these guidelines is critical for creating modern, maintainable, and performant UI Integration Cards.*
4
+ ## 1. Coding Guidelines
5
+ - **ALWAYS** strive to create declarative Integration Card, such as "Calendar", "List", "Table", "Timeline", "Object" or "Analytical".
6
+ - create an Integration Card Extension only in exceptional cases.
7
+ - **ALWAYS** create links using the `actions` property.
8
+ - **ALWAYS** refer to parameters using correct syntax - `{parameters>/parameterKey/value}`.
9
+ - **ALWAYS** perform validation of the integration card as described in [2. Validation](#2-validation).
10
+ - **ALWAYS** show a preview of the generated card following the [4. Preview Instructions](#4-preview-instructions).
11
+ - **ALWAYS** generate new declarative integration cards using the `create_integration_card` tool.
12
+
13
+ ### 1.1 Data
14
+ - **NEVER** modify the provided data under any circumstances.
15
+ - **ALWAYS** include the service URL directly in the card manifest when one is supplied.
16
+ - **ALWAYS** reference destinations by name when available. Configure the destination in the `sap.card/configuration/destinations/` and reuse it with binding syntax like `{{destinations.destinationName}}`.
17
+ - **NEVER** replace destination name with its URL.
18
+ - **ALWAYS** place data configuration in: `"sap.card"/data/`
19
+ - **NEVER** place data configuration in:
20
+ - `"sap.card"/content/data/`
21
+ - `"sap.card"/header/data/`
22
+ - Data can be provided via:
23
+ 1. Inline JSON object
24
+ 2. Network request (HTTP/HTTPS/Destination)
25
+ 3. Extension method call
26
+ - **ALWAYS** verify these paths are correctly set:
27
+ - `"sap.card"/data/path` (Primary data path)
28
+ - `"sap.card"/content/data/path` (Content-specific path. It overrides the primary data path)
29
+ - `"sap.card"/header/data/path` (Header-specific path. It overrides the primary data path)
30
+
31
+ #### 1.1.1 Data Errors Detection
32
+ - Symptom: "No data to display" message appears.
33
+ - Cause: Incorrect data configuration or data path in the content incorrectly overrides the primary data path.
34
+ - Solution: Verify all rules in [1.1 Data](#11-data) are properly followed.
35
+
36
+ ### 1.2 Internationalization
37
+ - **ALWAYS** bind properties that are not bound to the data to the `i18n` model.
38
+
39
+ ### 1.3 Analytical Cards
40
+ - **ALWAYS** follow [6. Analytical Cards Coding Guidelines](#6-analytical-cards-coding-guidelines) when developing Analytical cards.
41
+
42
+ ## 2. Validation
43
+ - **ALWAYS** ensure that `manifest.json` file is valid JSON.
44
+ - **ALWAYS** ensure that in `manifest.json` file the property `sap.app/type` is set to `"card"`.
45
+ - **ALWAYS** avoid using deprecated properties in `manifest.json` and elsewhere.
46
+ - **NEVER** treat Integration Cards' project as UI5 project, except for cards of type "Component".
47
+
48
+ ## 3. Card Explorer
49
+ - The Card Explorer provides detailed documentation for the Integration Cards schema, including descriptions of every property, guidance for integrating cards into hosting environments, configuration editor documentation with examples, and broader best practices. It is available at: https://ui5.sap.com/test-resources/sap/ui/integration/demokit/cardExplorer/webapp/index.html
50
+
51
+ ## 4. Preview Instructions
52
+ - **ALWAYS** check the card folder for an existing preview file and any accompanying instructions or scripts, and reuse them if available.
53
+ * for example, in NodeJS-based projects, search the `package.json` file for `start` or similar script. If such is available, use it
54
+ * also search in the `README.md` file.
55
+ - If preview instructions are not available, you have to create an HTML page that contains a `ui-integration` card element which references the card manifest. Then serve the HTML page using `http` server.
56
+
57
+ ## 5. Configuration Editor
58
+ - When a Configuration Editor is available, make as many Integration Card fields editable as possible.
59
+
60
+ ## 6. Analytical Cards Coding Guidelines
61
+ - **ALWAYS** set `sap.card/content/chartType` property.
62
+ - **ALWAYS** adjust `sap.card/content/measures`, `sap.card/content/dimensions` and `sap.card/content/feeds` to match the `sap.card/content/chartType` property and data structure. This is critical for proper data display.
63
+ - **ALWAYS** use `sap.card/content/chartProperties` to adjust labels, colors, the legend, and other chart aspects.
64
+ - **ALWAYS** define each feed with its type (Dimension or Measure), its unique identifier (uid), and the associated values using defined measures and dimensions. Example:
65
+ ```json
66
+ "feeds": [
67
+ {
68
+ "type": "Dimension",
69
+ "uid": "color",
70
+ "values": [
71
+ "Store Name"
72
+ ]
73
+ },
74
+ {
75
+ "type": "Measure",
76
+ "uid": "size",
77
+ "values": [
78
+ "Revenue"
79
+ ]
80
+ }
81
+ ]
82
+ ```
83
+ - **ALWAYS** ensure the `uid` in `feeds` exactly matches the UID required for the selected chartType (e.g., color, size, dataFrame).
84
+
85
+ ### 6.1 Comprehensive List of All Chart Types, UIDs and Examples
86
+
87
+ 1. donut/pie
88
+ * UIDs: size, color, dataFrame
89
+ * Example:
90
+ ```json
91
+ {
92
+ "measures": [
93
+ {
94
+ "name": "Revenue",
95
+ "value": "{revenueDataField}"
96
+ }
97
+ ],
98
+ "dimensions": [
99
+ {
100
+ "name": "Product Category",
101
+ "value": "{productCategoryField}"
102
+ }
103
+ ],
104
+ "feeds": [
105
+ {
106
+ "type": "Measure",
107
+ "uid": "size",
108
+ "values": ["Revenue"]
109
+ },
110
+ {
111
+ "type": "Dimension",
112
+ "uid": "color",
113
+ "values": ["Product Category"]
114
+ }
115
+ ]
116
+ }
117
+ ```
118
+
119
+ 2. heatmap
120
+ * UIDs: categoryAxis, categoryAxis2, color
121
+ * Example:
122
+ ```json
123
+ {
124
+ "measures": [
125
+ {
126
+ "name": "Temperature",
127
+ "value": "{temperatureField}"
128
+ }
129
+ ],
130
+ "dimensions": [
131
+ {
132
+ "name": "Location",
133
+ "value": "{locationField}"
134
+ },
135
+ {
136
+ "name": "Product",
137
+ "value": "{productField}"
138
+ }
139
+ ],
140
+ "feeds": [
141
+ {
142
+ "type": "Dimension",
143
+ "uid": "categoryAxis",
144
+ "values": ["Location"]
145
+ },
146
+ {
147
+ "type": "Dimension",
148
+ "uid": "categoryAxis2",
149
+ "values": ["Product"]
150
+ },
151
+ {
152
+ "type": "Measure",
153
+ "uid": "color",
154
+ "values": ["Temperature"]
155
+ }
156
+ ]
157
+ }
158
+ ```
159
+
160
+ 3. treemap
161
+ * UIDs: title, color, weight
162
+ * Example:
163
+ ```json
164
+ {
165
+ "measures": [
166
+ {
167
+ "name": "Profit",
168
+ "value": "{profitField}"
169
+ },
170
+ {
171
+ "name": "Budget",
172
+ "value": "{budgetField}"
173
+ }
174
+ ],
175
+ "dimensions": [
176
+ {
177
+ "name": "Department",
178
+ "value": "{departmentField}"
179
+ }
180
+ ],
181
+ "feeds": [
182
+ {
183
+ "type": "Dimension",
184
+ "uid": "title",
185
+ "values": ["Department"]
186
+ },
187
+ {
188
+ "type": "Measure",
189
+ "uid": "color",
190
+ "values": ["Profit"]
191
+ },
192
+ {
193
+ "type": "Measure",
194
+ "uid": "weight",
195
+ "values": ["Budget"]
196
+ }
197
+ ]
198
+ }
199
+ ```
200
+
201
+ 4. bar
202
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
203
+ * Example:
204
+ ```json
205
+ {
206
+ "measures": [
207
+ {
208
+ "name": "Sales",
209
+ "value": "{salesField}"
210
+ }
211
+ ],
212
+ "dimensions": [
213
+ {
214
+ "name": "Month",
215
+ "value": "{monthField}"
216
+ }
217
+ ],
218
+ "feeds": [
219
+ {
220
+ "type": "Dimension",
221
+ "uid": "categoryAxis",
222
+ "values": ["Month"]
223
+ },
224
+ {
225
+ "type": "Measure",
226
+ "uid": "valueAxis",
227
+ "values": ["Sales"]
228
+ }
229
+ ]
230
+ }
231
+ ```
232
+
233
+ 5. dual_bar
234
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
235
+ * Example:
236
+ ```json
237
+ {
238
+ "measures": [
239
+ {
240
+ "name": "Revenue",
241
+ "value": "{revenueField}"
242
+ },
243
+ {
244
+ "name": "Expenses",
245
+ "value": "{expensesField}"
246
+ }
247
+ ],
248
+ "dimensions": [
249
+ {
250
+ "name": "Quarter",
251
+ "value": "{quarterField}"
252
+ }
253
+ ],
254
+ "feeds": [
255
+ {
256
+ "type": "Dimension",
257
+ "uid": "categoryAxis",
258
+ "values": ["Quarter"]
259
+ },
260
+ {
261
+ "type": "Measure",
262
+ "uid": "valueAxis",
263
+ "values": ["Revenue"]
264
+ },
265
+ {
266
+ "type": "Measure",
267
+ "uid": "valueAxis2",
268
+ "values": ["Expenses"]
269
+ }
270
+ ]
271
+ }
272
+ ```
273
+
274
+ 6. column
275
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
276
+ * Example:
277
+ ```json
278
+ {
279
+ "measures": [
280
+ {
281
+ "name": "Revenue",
282
+ "value": "{revenueField}"
283
+ }
284
+ ],
285
+ "dimensions": [
286
+ {
287
+ "name": "Month",
288
+ "value": "{monthField}"
289
+ }
290
+ ],
291
+ "feeds": [
292
+ {
293
+ "type": "Dimension",
294
+ "uid": "categoryAxis",
295
+ "values": ["Month"]
296
+ },
297
+ {
298
+ "type": "Measure",
299
+ "uid": "valueAxis",
300
+ "values": ["Revenue"]
301
+ }
302
+ ]
303
+ }
304
+ ```
305
+
306
+ 7. timeseries_column
307
+ * UIDs: timeAxis, color, valueAxis
308
+ * Example:
309
+ ```json
310
+ {
311
+ "measures": [
312
+ {
313
+ "name": "Traffic",
314
+ "value": "{trafficField}"
315
+ }
316
+ ],
317
+ "dimensions": [
318
+ {
319
+ "name": "Date",
320
+ "value": "{dateField}",
321
+ "dataType": "date"
322
+ }
323
+ ],
324
+ "feeds": [
325
+ {
326
+ "type": "Dimension",
327
+ "uid": "timeAxis",
328
+ "values": ["Date"]
329
+ },
330
+ {
331
+ "type": "Measure",
332
+ "uid": "valueAxis",
333
+ "values": ["Traffic"]
334
+ }
335
+ ]
336
+ }
337
+ ```
338
+
339
+ 8. dual_column
340
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
341
+ * Example:
342
+ ```json
343
+ {
344
+ "measures": [
345
+ {
346
+ "name": "Revenue",
347
+ "value": "{revenueField}"
348
+ },
349
+ {
350
+ "name": "Costs",
351
+ "value": "{costsField}"
352
+ }
353
+ ],
354
+ "dimensions": [
355
+ {
356
+ "name": "Region",
357
+ "value": "{regionField}"
358
+ }
359
+ ],
360
+ "feeds": [
361
+ {
362
+ "type": "Dimension",
363
+ "uid": "categoryAxis",
364
+ "values": ["Region"]
365
+ },
366
+ {
367
+ "type": "Measure",
368
+ "uid": "valueAxis",
369
+ "values": ["Revenue"]
370
+ },
371
+ {
372
+ "type": "Measure",
373
+ "uid": "valueAxis2",
374
+ "values": ["Costs"]
375
+ }
376
+ ]
377
+ }
378
+ ```
379
+
380
+ 9. stacked_bar
381
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
382
+ * Example:
383
+ ```json
384
+ {
385
+ "measures": [
386
+ {
387
+ "name": "Revenue",
388
+ "value": "{revenueField}"
389
+ }
390
+ ],
391
+ "dimensions": [
392
+ {
393
+ "name": "Region",
394
+ "value": "{regionField}"
395
+ }
396
+ ],
397
+ "feeds": [
398
+ {
399
+ "type": "Dimension",
400
+ "uid": "categoryAxis",
401
+ "values": ["Region"]
402
+ },
403
+ {
404
+ "type": "Measure",
405
+ "uid": "valueAxis",
406
+ "values": ["Revenue"]
407
+ }
408
+ ]
409
+ }
410
+ ```
411
+
412
+ 10. stacked_column
413
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
414
+ * Example:
415
+ ```json
416
+ {
417
+ "measures": [
418
+ {
419
+ "name": "Market Share",
420
+ "value": "{marketShareField}"
421
+ }
422
+ ],
423
+ "dimensions": [
424
+ {
425
+ "name": "Sector",
426
+ "value": "{sectorField}"
427
+ }
428
+ ],
429
+ "feeds": [
430
+ {
431
+ "type": "Dimension",
432
+ "uid": "categoryAxis",
433
+ "values": ["Sector"]
434
+ },
435
+ {
436
+ "type": "Measure",
437
+ "uid": "valueAxis",
438
+ "values": ["Market Share"]
439
+ }
440
+ ]
441
+ }
442
+ ```
443
+
444
+ 11. timeseries_stacked_column
445
+ * UIDs: timeAxis, color, valueAxis
446
+ * Example:
447
+ ```json
448
+ {
449
+ "measures": [
450
+ {
451
+ "name": "Investment",
452
+ "value": "{investmentField}"
453
+ }
454
+ ],
455
+ "dimensions": [
456
+ {
457
+ "name": "Year",
458
+ "value": "{yearField}",
459
+ "dataType": "date"
460
+ }
461
+ ],
462
+ "feeds": [
463
+ {
464
+ "type": "Dimension",
465
+ "uid": "timeAxis",
466
+ "values": ["Year"]
467
+ },
468
+ {
469
+ "type": "Measure",
470
+ "uid": "valueAxis",
471
+ "values": ["Investment"]
472
+ }
473
+ ]
474
+ }
475
+ ```
476
+
477
+ 12. 100_stacked_bar
478
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
479
+ * Example:
480
+ ```json
481
+ {
482
+ "measures": [
483
+ {
484
+ "name": "Costs",
485
+ "value": "{costsField}"
486
+ }
487
+ ],
488
+ "dimensions": [
489
+ {
490
+ "name": "Region",
491
+ "value": "{regionField}"
492
+ }
493
+ ],
494
+ "feeds": [
495
+ {
496
+ "type": "Dimension",
497
+ "uid": "categoryAxis",
498
+ "values": ["Region"]
499
+ },
500
+ {
501
+ "type": "Measure",
502
+ "uid": "valueAxis",
503
+ "values": ["Costs"]
504
+ }
505
+ ]
506
+ }
507
+ ```
508
+
509
+ 13. 100_stacked_column
510
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
511
+ * Example:
512
+ ```json
513
+ {
514
+ "measures": [
515
+ {
516
+ "name": "Market Share",
517
+ "value": "{marketShareField}"
518
+ }
519
+ ],
520
+ "dimensions": [
521
+ {
522
+ "name": "Product",
523
+ "value": "{productField}"
524
+ }
525
+ ],
526
+ "feeds": [
527
+ {
528
+ "type": "Dimension",
529
+ "uid": "categoryAxis",
530
+ "values": ["Product"]
531
+ },
532
+ {
533
+ "type": "Measure",
534
+ "uid": "valueAxis",
535
+ "values": ["Market Share"]
536
+ }
537
+ ]
538
+ }
539
+ ```
540
+
541
+ 14. timeseries_100_stacked_column
542
+ * UIDs: timeAxis, color, valueAxis
543
+ * Example:
544
+ ```json
545
+ {
546
+ "measures": [
547
+ {
548
+ "name": "Investment",
549
+ "value": "{investmentField}"
550
+ }
551
+ ],
552
+ "dimensions": [
553
+ {
554
+ "name": "Year",
555
+ "value": "{yearField}",
556
+ "dataType": "date"
557
+ }
558
+ ],
559
+ "feeds": [
560
+ {
561
+ "type": "Dimension",
562
+ "uid": "timeAxis",
563
+ "values": ["Year"]
564
+ },
565
+ {
566
+ "type": "Measure",
567
+ "uid": "valueAxis",
568
+ "values": ["Investment"]
569
+ }
570
+ ]
571
+ }
572
+ ```
573
+
574
+ 15. dual_stacked_bar
575
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
576
+ * Example:
577
+ ```json
578
+ {
579
+ "measures": [
580
+ {
581
+ "name": "Revenue",
582
+ "value": "{revenueField}"
583
+ },
584
+ {
585
+ "name": "Profit",
586
+ "value": "{profitField}"
587
+ }
588
+ ],
589
+ "dimensions": [
590
+ {
591
+ "name": "Brand",
592
+ "value": "{brandField}"
593
+ }
594
+ ],
595
+ "feeds": [
596
+ {
597
+ "type": "Dimension",
598
+ "uid": "categoryAxis",
599
+ "values": ["Brand"]
600
+ },
601
+ {
602
+ "type": "Measure",
603
+ "uid": "valueAxis",
604
+ "values": ["Revenue"]
605
+ },
606
+ {
607
+ "type": "Measure",
608
+ "uid": "valueAxis2",
609
+ "values": ["Profit"]
610
+ }
611
+ ]
612
+ }
613
+ ```
614
+
615
+ 16. dual_stacked_column
616
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
617
+ * Example:
618
+ ```json
619
+ {
620
+ "measures": [
621
+ {
622
+ "name": "Growth",
623
+ "value": "{growthField}"
624
+ },
625
+ {
626
+ "name": "Revenue",
627
+ "value": "{revenueField}"
628
+ }
629
+ ],
630
+ "dimensions": [
631
+ {
632
+ "name": "Sector",
633
+ "value": "{sectorField}"
634
+ }
635
+ ],
636
+ "feeds": [
637
+ {
638
+ "type": "Dimension",
639
+ "uid": "categoryAxis",
640
+ "values": ["Sector"]
641
+ },
642
+ {
643
+ "type": "Measure",
644
+ "uid": "valueAxis",
645
+ "values": ["Growth"]
646
+ },
647
+ {
648
+ "type": "Measure",
649
+ "uid": "valueAxis2",
650
+ "values": ["Revenue"]
651
+ }
652
+ ]
653
+ }
654
+ ```
655
+
656
+ 17. 100_dual_stacked_bar
657
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
658
+ * Example:
659
+ ```json
660
+ {
661
+ "measures": [
662
+ {
663
+ "name": "Sales",
664
+ "value": "{salesField}"
665
+ },
666
+ {
667
+ "name": "Growth",
668
+ "value": "{growthField}"
669
+ }
670
+ ],
671
+ "dimensions": [
672
+ {
673
+ "name": "Region",
674
+ "value": "{regionField}"
675
+ }
676
+ ],
677
+ "feeds": [
678
+ {
679
+ "type": "Dimension",
680
+ "uid": "categoryAxis",
681
+ "values": ["Region"]
682
+ },
683
+ {
684
+ "type": "Measure",
685
+ "uid": "valueAxis",
686
+ "values": ["Sales"]
687
+ },
688
+ {
689
+ "type": "Measure",
690
+ "uid": "valueAxis2",
691
+ "values": ["Growth"]
692
+ }
693
+ ]
694
+ }
695
+ ```
696
+
697
+ 18. 100_dual_stacked_column
698
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
699
+ * Example:
700
+ ```json
701
+ {
702
+ "measures": [
703
+ {
704
+ "name": "Sales",
705
+ "value": "{salesField}"
706
+ },
707
+ {
708
+ "name": "Growth",
709
+ "value": "{growthField}"
710
+ }
711
+ ],
712
+ "dimensions": [
713
+ {
714
+ "name": "Region",
715
+ "value": "{regionField}"
716
+ }
717
+ ],
718
+ "feeds": [
719
+ {
720
+ "type": "Dimension",
721
+ "uid": "categoryAxis",
722
+ "values": ["Region"]
723
+ },
724
+ {
725
+ "type": "Measure",
726
+ "uid": "valueAxis",
727
+ "values": ["Sales"]
728
+ },
729
+ {
730
+ "type": "Measure",
731
+ "uid": "valueAxis2",
732
+ "values": ["Growth"]
733
+ }
734
+ ]
735
+ }
736
+ ```
737
+
738
+ 19. line
739
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
740
+ * Example:
741
+ ```json
742
+ {
743
+ "measures": [
744
+ {
745
+ "name": "Price",
746
+ "value": "{priceField}"
747
+ }
748
+ ],
749
+ "dimensions": [
750
+ {
751
+ "name": "Time",
752
+ "value": "{timeField}"
753
+ }
754
+ ],
755
+ "feeds": [
756
+ {
757
+ "type": "Dimension",
758
+ "uid": "categoryAxis",
759
+ "values": ["Time"]
760
+ },
761
+ {
762
+ "type": "Measure",
763
+ "uid": "valueAxis",
764
+ "values": ["Price"]
765
+ }
766
+ ]
767
+ }
768
+ ```
769
+
770
+ 20. dual_line
771
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
772
+ * Example:
773
+ ```json
774
+ {
775
+ "measures": [
776
+ {
777
+ "name": "Price",
778
+ "value": "{priceField}"
779
+ },
780
+ {
781
+ "name": "Volume",
782
+ "value": "{volumeField}"
783
+ }
784
+ ],
785
+ "dimensions": [
786
+ {
787
+ "name": "Time",
788
+ "value": "{timeField}"
789
+ }
790
+ ],
791
+ "feeds": [
792
+ {
793
+ "type": "Dimension",
794
+ "uid": "categoryAxis",
795
+ "values": ["Time"]
796
+ },
797
+ {
798
+ "type": "Measure",
799
+ "uid": "valueAxis",
800
+ "values": ["Price"]
801
+ },
802
+ {
803
+ "type": "Measure",
804
+ "uid": "valueAxis2",
805
+ "values": ["Volume"]
806
+ }
807
+ ]
808
+ }
809
+ ```
810
+
811
+ 21. timeseries_line
812
+ * UIDs: timeAxis, color, valueAxis
813
+ * Example:
814
+ ```json
815
+ {
816
+ "measures": [
817
+ {
818
+ "name": "Temperature",
819
+ "value": "{temperatureField}"
820
+ }
821
+ ],
822
+ "dimensions": [
823
+ {
824
+ "name": "Date",
825
+ "value": "{dateField}",
826
+ "dataType": "date"
827
+ }
828
+ ],
829
+ "feeds": [
830
+ {
831
+ "type": "Dimension",
832
+ "uid": "timeAxis",
833
+ "values": ["Date"]
834
+ },
835
+ {
836
+ "type": "Measure",
837
+ "uid": "valueAxis",
838
+ "values": ["Temperature"]
839
+ }
840
+ ]
841
+ }
842
+ ```
843
+
844
+ 22. bubble
845
+ * UIDs: dataFrame, color, shape, valueAxis, valueAxis2, bubbleWidth
846
+ * Example:
847
+ ```json
848
+ {
849
+ "measures": [
850
+ {
851
+ "name": "Expansion",
852
+ "value": "{expansionField}"
853
+ },
854
+ {
855
+ "name": "Size",
856
+ "value": "{sizeField}"
857
+ }
858
+ ],
859
+ "dimensions": [
860
+ {
861
+ "name": "Sector",
862
+ "value": "{sectorField}"
863
+ }
864
+ ],
865
+ "feeds": [
866
+ {
867
+ "type": "Measure",
868
+ "uid": "bubbleWidth",
869
+ "values": ["Size"]
870
+ },
871
+ {
872
+ "type": "Dimension",
873
+ "uid": "color",
874
+ "values": ["Sector"]
875
+ },
876
+ {
877
+ "type": "Measure",
878
+ "uid": "valueAxis",
879
+ "values": ["Expansion"]
880
+ }
881
+ ]
882
+ }
883
+ ```
884
+
885
+ 23. time_bubble
886
+ * UIDs: dataFrame, color, shape, valueAxis, valueAxis2, bubbleWidth
887
+ * Example:
888
+ ```json
889
+ {
890
+ "measures": [
891
+ {
892
+ "name": "Expansion",
893
+ "value": "{expansionField}"
894
+ },
895
+ {
896
+ "name": "Size",
897
+ "value": "{sizeField}"
898
+ }
899
+ ],
900
+ "dimensions": [
901
+ {
902
+ "name": "Year",
903
+ "value": "{yearField}"
904
+ },
905
+ {
906
+ "name": "Sector",
907
+ "value": "{sectorField}"
908
+ }
909
+ ],
910
+ "feeds": [
911
+ {
912
+ "type": "Dimension",
913
+ "uid": "timeAxis",
914
+ "values": ["Year"]
915
+ },
916
+ {
917
+ "type": "Measure",
918
+ "uid": "bubbleWidth",
919
+ "values": ["Size"]
920
+ },
921
+ {
922
+ "type": "Dimension",
923
+ "uid": "color",
924
+ "values": ["Sector"]
925
+ }
926
+ ]
927
+ }
928
+ ```
929
+
930
+ 24. timeseries_bubble
931
+ * UIDs: color, shape, valueAxis, timeAxis, bubbleWidth
932
+ * Example:
933
+ ```json
934
+ {
935
+ "measures": [
936
+ {
937
+ "name": "Size",
938
+ "value": "{sizeField}"
939
+ },
940
+ {
941
+ "name": "Performance",
942
+ "value": "{performanceField}"
943
+ }
944
+ ],
945
+ "dimensions": [
946
+ {
947
+ "name": "Year",
948
+ "value": "{yearField}",
949
+ "dataType": "date"
950
+ },
951
+ {
952
+ "name": "Sector",
953
+ "value": "{sectorField}"
954
+ }
955
+ ],
956
+ "feeds": [
957
+ {
958
+ "type": "Dimension",
959
+ "uid": "timeAxis",
960
+ "values": ["Year"]
961
+ },
962
+ {
963
+ "type": "Measure",
964
+ "uid": "bubbleWidth",
965
+ "values": ["Size"]
966
+ },
967
+ {
968
+ "type": "Dimension",
969
+ "uid": "color",
970
+ "values": ["Sector"]
971
+ },
972
+ {
973
+ "type": "Measure",
974
+ "uid": "valueAxis",
975
+ "values": ["Performance"]
976
+ }
977
+ ]
978
+ }
979
+ ```
980
+
981
+ 25. scatter
982
+ * UIDs: dataFrame, color, shape, valueAxis, valueAxis2
983
+ * Example:
984
+ ```json
985
+ {
986
+ "measures": [
987
+ {
988
+ "name": "Efficiency",
989
+ "value": "{efficiencyField}"
990
+ },
991
+ {
992
+ "name": "Cost",
993
+ "value": "{costField}"
994
+ }
995
+ ],
996
+ "dimensions": [
997
+ {
998
+ "name": "Region",
999
+ "value": "{regionField}"
1000
+ }
1001
+ ],
1002
+ "feeds": [
1003
+ {
1004
+ "type": "Measure",
1005
+ "uid": "valueAxis",
1006
+ "values": ["Efficiency"]
1007
+ },
1008
+ {
1009
+ "type": "Measure",
1010
+ "uid": "valueAxis2",
1011
+ "values": ["Cost"]
1012
+ },
1013
+ {
1014
+ "type": "Dimension",
1015
+ "uid": "color",
1016
+ "values": ["Region"]
1017
+ }
1018
+ ]
1019
+ }
1020
+ ```
1021
+
1022
+ 26. timeseries_scatter
1023
+ * UIDs: color, shape, valueAxis, timeAxis
1024
+ * Example:
1025
+ ```json
1026
+ {
1027
+ "measures": [
1028
+ {
1029
+ "name": "Performance",
1030
+ "value": "{performanceField}"
1031
+ }
1032
+ ],
1033
+ "dimensions": [
1034
+ {
1035
+ "name": "Year",
1036
+ "value": "{yearField}",
1037
+ "dataType": "date"
1038
+ }
1039
+ ],
1040
+ "feeds": [
1041
+ {
1042
+ "type": "Dimension",
1043
+ "uid": "timeAxis",
1044
+ "values": ["Year"]
1045
+ },
1046
+ {
1047
+ "type": "Measure",
1048
+ "uid": "valueAxis",
1049
+ "values": ["Performance"]
1050
+ }
1051
+ ]
1052
+ }
1053
+ ```
1054
+
1055
+ 27. area
1056
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
1057
+ * Example:
1058
+ ```json
1059
+ {
1060
+ "measures": [
1061
+ {
1062
+ "name": "Score",
1063
+ "value": "{scoreField}"
1064
+ }
1065
+ ],
1066
+ "dimensions": [
1067
+ {
1068
+ "name": "Competency",
1069
+ "value": "{competencyField}"
1070
+ }
1071
+ ],
1072
+ "feeds": [
1073
+ {
1074
+ "type": "Dimension",
1075
+ "uid": "categoryAxis",
1076
+ "values": ["Competency"]
1077
+ },
1078
+ {
1079
+ "type": "Measure",
1080
+ "uid": "valueAxis",
1081
+ "values": ["Score"]
1082
+ }
1083
+ ]
1084
+ }
1085
+ ```
1086
+
1087
+ 28. radar
1088
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
1089
+ * Example:
1090
+ ```json
1091
+ {
1092
+ "measures": [
1093
+ {
1094
+ "name": "Proficiency Level",
1095
+ "value": "{proficiencyField}"
1096
+ }
1097
+ ],
1098
+ "dimensions": [
1099
+ {
1100
+ "name": "Skill",
1101
+ "value": "{skillField}"
1102
+ }
1103
+ ],
1104
+ "feeds": [
1105
+ {
1106
+ "type": "Dimension",
1107
+ "uid": "categoryAxis",
1108
+ "values": ["Skill"]
1109
+ },
1110
+ {
1111
+ "type": "Measure",
1112
+ "uid": "valueAxis",
1113
+ "values": ["Proficiency Level"]
1114
+ }
1115
+ ]
1116
+ }
1117
+ ```
1118
+
1119
+ 29. vertical_bullet
1120
+ * UIDs: categoryAxis, color, actualValues, additionalValues, targetValues, forecastValues
1121
+ * Example:
1122
+ ```json
1123
+ {
1124
+ "measures": [
1125
+ {
1126
+ "name": "Achievement",
1127
+ "value": "{achievementField}"
1128
+ }
1129
+ ],
1130
+ "dimensions": [
1131
+ {
1132
+ "name": "Target",
1133
+ "value": "{targetField}"
1134
+ }
1135
+ ],
1136
+ "feeds": [
1137
+ {
1138
+ "type": "Dimension",
1139
+ "uid": "categoryAxis",
1140
+ "values": ["Target"]
1141
+ },
1142
+ {
1143
+ "type": "Measure",
1144
+ "uid": "actualValues",
1145
+ "values": ["Achievement"]
1146
+ }
1147
+ ]
1148
+ }
1149
+ ```
1150
+
1151
+ 30. bullet
1152
+ * UIDs: categoryAxis, color, actualValues, additionalValues, targetValues, forecastValues
1153
+ * Example:
1154
+ ```json
1155
+ {
1156
+ "measures": [
1157
+ {
1158
+ "name": "Achievement",
1159
+ "value": "{achievementField}"
1160
+ }
1161
+ ],
1162
+ "dimensions": [
1163
+ {
1164
+ "name": "Target",
1165
+ "value": "{targetField}"
1166
+ }
1167
+ ],
1168
+ "feeds": [
1169
+ {
1170
+ "type": "Dimension",
1171
+ "uid": "categoryAxis",
1172
+ "values": ["Target"]
1173
+ },
1174
+ {
1175
+ "type": "Measure",
1176
+ "uid": "actualValues",
1177
+ "values": ["Achievement"]
1178
+ }
1179
+ ]
1180
+ }
1181
+ ```
1182
+
1183
+ 31. timeseries_bullet
1184
+ * UIDs: timeAxis, color, actualValues, additionalValues, targetValues
1185
+ * Example:
1186
+ ```json
1187
+ {
1188
+ "measures": [
1189
+ {
1190
+ "name": "Sales",
1191
+ "value": "{salesField}"
1192
+ }
1193
+ ],
1194
+ "dimensions": [
1195
+ {
1196
+ "name": "Date",
1197
+ "value": "{dateField}",
1198
+ "dataType": "date"
1199
+ }
1200
+ ],
1201
+ "feeds": [
1202
+ {
1203
+ "type": "Dimension",
1204
+ "uid": "timeAxis",
1205
+ "values": ["Date"]
1206
+ },
1207
+ {
1208
+ "type": "Measure",
1209
+ "uid": "actualValues",
1210
+ "values": ["Sales"]
1211
+ }
1212
+ ]
1213
+ }
1214
+ ```
1215
+
1216
+ 32. waterfall
1217
+ * UIDs: categoryAxis, waterfallType, valueAxis
1218
+ * Example:
1219
+ ```json
1220
+ {
1221
+ "measures": [
1222
+ {
1223
+ "name": "Change",
1224
+ "value": "{changeField}"
1225
+ }
1226
+ ],
1227
+ "dimensions": [
1228
+ {
1229
+ "name": "Phase",
1230
+ "value": "{phaseField}"
1231
+ }
1232
+ ],
1233
+ "feeds": [
1234
+ {
1235
+ "type": "Dimension",
1236
+ "uid": "categoryAxis",
1237
+ "values": ["Phase"]
1238
+ },
1239
+ {
1240
+ "type": "Measure",
1241
+ "uid": "valueAxis",
1242
+ "values": ["Change"]
1243
+ }
1244
+ ]
1245
+ }
1246
+ ```
1247
+
1248
+ 33. timeseries_waterfall
1249
+ * UIDs: timeAxis, valueAxis, color
1250
+ * Example:
1251
+ ```json
1252
+ {
1253
+ "measures": [
1254
+ {
1255
+ "name": "Financial Change",
1256
+ "value": "{financialChangeField}"
1257
+ }
1258
+ ],
1259
+ "dimensions": [
1260
+ {
1261
+ "name": "Year",
1262
+ "value": "{yearField}",
1263
+ "dataType": "date"
1264
+ }
1265
+ ],
1266
+ "feeds": [
1267
+ {
1268
+ "type": "Dimension",
1269
+ "uid": "timeAxis",
1270
+ "values": ["Year"]
1271
+ },
1272
+ {
1273
+ "type": "Measure",
1274
+ "uid": "valueAxis",
1275
+ "values": ["Financial Change"]
1276
+ }
1277
+ ]
1278
+ }
1279
+ ```
1280
+
1281
+ 34. horizontal_waterfall
1282
+ * UIDs: categoryAxis, waterfallType, valueAxis
1283
+ * Example:
1284
+ ```json
1285
+ {
1286
+ "measures": [
1287
+ {
1288
+ "name": "Growth",
1289
+ "value": "{growthField}"
1290
+ }
1291
+ ],
1292
+ "dimensions": [
1293
+ {
1294
+ "name": "Milestone",
1295
+ "value": "{milestoneField}"
1296
+ }
1297
+ ],
1298
+ "feeds": [
1299
+ {
1300
+ "type": "Dimension",
1301
+ "uid": "categoryAxis",
1302
+ "values": ["Milestone"]
1303
+ },
1304
+ {
1305
+ "type": "Measure",
1306
+ "uid": "valueAxis",
1307
+ "values": ["Growth"]
1308
+ }
1309
+ ]
1310
+ }
1311
+ ```
1312
+
1313
+ 35. combination
1314
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
1315
+ * Example:
1316
+ ```json
1317
+ {
1318
+ "measures": [
1319
+ {
1320
+ "name": "Expense",
1321
+ "value": "{expenseField}"
1322
+ }
1323
+ ],
1324
+ "dimensions": [
1325
+ {
1326
+ "name": "Period",
1327
+ "value": "{periodField}"
1328
+ }
1329
+ ],
1330
+ "feeds": [
1331
+ {
1332
+ "type": "Dimension",
1333
+ "uid": "categoryAxis",
1334
+ "values": ["Period"]
1335
+ },
1336
+ {
1337
+ "type": "Measure",
1338
+ "uid": "valueAxis",
1339
+ "values": ["Expense"]
1340
+ }
1341
+ ]
1342
+ }
1343
+ ```
1344
+
1345
+ 36. stacked_combination
1346
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
1347
+ * Example:
1348
+ ```json
1349
+ {
1350
+ "measures": [
1351
+ {
1352
+ "name": "Revenue",
1353
+ "value": "{revenueField}"
1354
+ }
1355
+ ],
1356
+ "dimensions": [
1357
+ {
1358
+ "name": "Category",
1359
+ "value": "{categoryField}"
1360
+ }
1361
+ ],
1362
+ "feeds": [
1363
+ {
1364
+ "type": "Dimension",
1365
+ "uid": "categoryAxis",
1366
+ "values": ["Category"]
1367
+ },
1368
+ {
1369
+ "type": "Measure",
1370
+ "uid": "valueAxis",
1371
+ "values": ["Revenue"]
1372
+ }
1373
+ ]
1374
+ }
1375
+ ```
1376
+
1377
+ 37. horizontal_stacked_combination
1378
+ * UIDs: dataFrame, categoryAxis, color, valueAxis
1379
+ * Example:
1380
+ ```json
1381
+ {
1382
+ "measures": [
1383
+ {
1384
+ "name": "Growth",
1385
+ "value": "{growthField}"
1386
+ }
1387
+ ],
1388
+ "dimensions": [
1389
+ {
1390
+ "name": "Product",
1391
+ "value": "{productField}"
1392
+ }
1393
+ ],
1394
+ "feeds": [
1395
+ {
1396
+ "type": "Dimension",
1397
+ "uid": "categoryAxis",
1398
+ "values": ["Product"]
1399
+ },
1400
+ {
1401
+ "type": "Measure",
1402
+ "uid": "valueAxis",
1403
+ "values": ["Growth"]
1404
+ }
1405
+ ]
1406
+ }
1407
+ ```
1408
+
1409
+ 38. dual_stacked_combination
1410
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
1411
+ * Example:
1412
+ ```json
1413
+ {
1414
+ "measures": [
1415
+ {
1416
+ "name": "Revenue",
1417
+ "value": "{revenueField}"
1418
+ },
1419
+ {
1420
+ "name": "Costs",
1421
+ "value": "{costsField}"
1422
+ }
1423
+ ],
1424
+ "dimensions": [
1425
+ {
1426
+ "name": "Time Period",
1427
+ "value": "{timePeriodField}"
1428
+ }
1429
+ ],
1430
+ "feeds": [
1431
+ {
1432
+ "type": "Dimension",
1433
+ "uid": "categoryAxis",
1434
+ "values": ["Time Period"]
1435
+ },
1436
+ {
1437
+ "type": "Measure",
1438
+ "uid": "valueAxis",
1439
+ "values": ["Revenue"]
1440
+ },
1441
+ {
1442
+ "type": "Measure",
1443
+ "uid": "valueAxis2",
1444
+ "values": ["Costs"]
1445
+ }
1446
+ ]
1447
+ }
1448
+ ```
1449
+
1450
+ 39. dual_horizontal_stacked_combination
1451
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
1452
+ * Example:
1453
+ ```json
1454
+ {
1455
+ "measures": [
1456
+ {
1457
+ "name": "Sales",
1458
+ "value": "{salesField}"
1459
+ },
1460
+ {
1461
+ "name": "Returns",
1462
+ "value": "{returnsField}"
1463
+ }
1464
+ ],
1465
+ "dimensions": [
1466
+ {
1467
+ "name": "Brand",
1468
+ "value": "{brandField}"
1469
+ }
1470
+ ],
1471
+ "feeds": [
1472
+ {
1473
+ "type": "Dimension",
1474
+ "uid": "categoryAxis",
1475
+ "values": ["Brand"]
1476
+ },
1477
+ {
1478
+ "type": "Measure",
1479
+ "uid": "valueAxis",
1480
+ "values": ["Sales"]
1481
+ },
1482
+ {
1483
+ "type": "Measure",
1484
+ "uid": "valueAxis2",
1485
+ "values": ["Returns"]
1486
+ }
1487
+ ]
1488
+ }
1489
+ ```
1490
+
1491
+ 40. dual_horizontal_combination
1492
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
1493
+ * Example:
1494
+ ```json
1495
+ {
1496
+ "measures": [
1497
+ {
1498
+ "name": "Engagement",
1499
+ "value": "{engagementField}"
1500
+ },
1501
+ {
1502
+ "name": "Spend",
1503
+ "value": "{spendField}"
1504
+ }
1505
+ ],
1506
+ "dimensions": [
1507
+ {
1508
+ "name": "Campaign",
1509
+ "value": "{campaignField}"
1510
+ }
1511
+ ],
1512
+ "feeds": [
1513
+ {
1514
+ "type": "Dimension",
1515
+ "uid": "categoryAxis",
1516
+ "values": ["Campaign"]
1517
+ },
1518
+ {
1519
+ "type": "Measure",
1520
+ "uid": "valueAxis",
1521
+ "values": ["Engagement"]
1522
+ },
1523
+ {
1524
+ "type": "Measure",
1525
+ "uid": "valueAxis2",
1526
+ "values": ["Spend"]
1527
+ }
1528
+ ]
1529
+ }
1530
+ ```
1531
+
1532
+ 41. dual_combination
1533
+ * UIDs: dataFrame, categoryAxis, color, valueAxis, valueAxis2
1534
+ * Example:
1535
+ ```json
1536
+ {
1537
+ "measures": [
1538
+ {
1539
+ "name": "Sales Revenue",
1540
+ "value": "{salesRevenueField}"
1541
+ },
1542
+ {
1543
+ "name": "Operating Cost",
1544
+ "value": "{operatingCostField}"
1545
+ }
1546
+ ],
1547
+ "dimensions": [
1548
+ {
1549
+ "name": "Time Frame",
1550
+ "value": "{timeFrameField}"
1551
+ }
1552
+ ],
1553
+ "feeds": [
1554
+ {
1555
+ "type": "Dimension",
1556
+ "uid": "categoryAxis",
1557
+ "values": ["Time Frame"]
1558
+ },
1559
+ {
1560
+ "type": "Measure",
1561
+ "uid": "valueAxis",
1562
+ "values": ["Sales Revenue"]
1563
+ },
1564
+ {
1565
+ "type": "Measure",
1566
+ "uid": "valueAxis2",
1567
+ "values": ["Operating Cost"]
1568
+ }
1569
+ ]
1570
+ }
1571
+ ```
1572
+
1573
+ 42. timeseries_combination
1574
+ * UIDs: timeAxis, color, valueAxis
1575
+ * Example:
1576
+ ```json
1577
+ {
1578
+ "measures": [
1579
+ {
1580
+ "name": "Earnings",
1581
+ "value": "{earningsField}"
1582
+ }
1583
+ ],
1584
+ "dimensions": [
1585
+ {
1586
+ "name": "Month",
1587
+ "value": "{monthField}",
1588
+ "dataType": "date"
1589
+ }
1590
+ ],
1591
+ "feeds": [
1592
+ {
1593
+ "type": "Dimension",
1594
+ "uid": "timeAxis",
1595
+ "values": ["Month"]
1596
+ },
1597
+ {
1598
+ "type": "Measure",
1599
+ "uid": "valueAxis",
1600
+ "values": ["Earnings"]
1601
+ }
1602
+ ]
1603
+ }
1604
+ ```
1605
+
1606
+ 43. dual_timeseries_combination
1607
+ * UIDs: timeAxis, color, valueAxis, valueAxis2
1608
+ * Example:
1609
+ ```json
1610
+ {
1611
+ "measures": [
1612
+ {
1613
+ "name": "Revenue",
1614
+ "value": "{revenueField}"
1615
+ },
1616
+ {
1617
+ "name": "Cost",
1618
+ "value": "{costField}"
1619
+ }
1620
+ ],
1621
+ "dimensions": [
1622
+ {
1623
+ "name": "Month",
1624
+ "value": "{monthField}",
1625
+ "dataType": "date"
1626
+ }
1627
+ ],
1628
+ "feeds": [
1629
+ {
1630
+ "type": "Dimension",
1631
+ "uid": "timeAxis",
1632
+ "values": ["Month"]
1633
+ },
1634
+ {
1635
+ "type": "Measure",
1636
+ "uid": "valueAxis",
1637
+ "values": ["Revenue"]
1638
+ },
1639
+ {
1640
+ "type": "Measure",
1641
+ "uid": "valueAxis2",
1642
+ "values": ["Cost"]
1643
+ }
1644
+ ]
1645
+ }
1646
+ ```
1647
+
1648
+ 44. timeseries_stacked_combination
1649
+ * UIDs: timeAxis, color, valueAxis
1650
+ * Example:
1651
+ ```json
1652
+ {
1653
+ "measures": [
1654
+ {
1655
+ "name": "Performance",
1656
+ "value": "{performanceField}"
1657
+ }
1658
+ ],
1659
+ "dimensions": [
1660
+ {
1661
+ "name": "Year",
1662
+ "value": "{yearField}",
1663
+ "dataType": "date"
1664
+ }
1665
+ ],
1666
+ "feeds": [
1667
+ {
1668
+ "type": "Dimension",
1669
+ "uid": "timeAxis",
1670
+ "values": ["Year"]
1671
+ },
1672
+ {
1673
+ "type": "Measure",
1674
+ "uid": "valueAxis",
1675
+ "values": ["Performance"]
1676
+ }
1677
+ ]
1678
+ }
1679
+ ```