@finebi/finebi-cli 1.2.0 → 1.3.0
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.
- package/README.md +62 -142
- package/package.json +38 -35
- package/skills/finebi-cli-agent/SKILL.md +133 -0
- package/skills/finebi-cli-agent/agents/openai.yaml +7 -0
- package/skills/finebi-cli-agent/references/analysis-dsl-api.md +318 -0
- package/skills/finebi-cli-agent/references/artifact-ordering.md +29 -0
- package/skills/finebi-cli-agent/references/command-workflows.md +194 -0
- package/skills/finebi-cli-agent/references/dashboard-dsl-api.md +1025 -0
- package/skills/finebi-cli-agent/references/dsl-handoff-contract.md +195 -0
- package/skills/finebi-cli-agent/references/file-to-dashboard.md +65 -0
- package/skills/finebi-cli-agent/references/formula-basics.md +102 -0
- package/skills/finebi-cli-agent/references/formula-contexts.md +66 -0
- package/skills/finebi-cli-agent/references/formula-functions.md +247 -0
- package/skills/finebi-cli-agent/references/formula-generation.md +121 -0
- package/skills/finebi-cli-agent/references/formula-glossary.md +17 -0
- package/skills/finebi-cli-agent/references/formula-help-boundaries.md +87 -0
- package/skills/finebi-cli-agent/references/formula-help-index.md +264 -0
- package/skills/finebi-cli-agent/references/formula-parameters-aggregate.md +143 -0
- package/skills/finebi-cli-agent/references/formula-parameters-analysis.md +223 -0
- package/skills/finebi-cli-agent/references/formula-parameters-date.md +236 -0
- package/skills/finebi-cli-agent/references/formula-parameters-math-logic.md +271 -0
- package/skills/finebi-cli-agent/references/formula-parameters-text.md +217 -0
- package/skills/finebi-cli-agent/references/formula-recipes-analysis.md +124 -0
- package/skills/finebi-cli-agent/references/formula-recipes-text-date.md +86 -0
- package/skills/finebi-cli-agent/references/formula-semantics.md +39 -0
- package/skills/finebi-cli-agent/references/formula-syntax.md +70 -0
- package/skills/finebi-cli-agent/references/formula-troubleshooting.md +63 -0
- package/skills/finebi-cli-agent/references/formula-validation.md +36 -0
- package/skills/finebi-cli-agent/references/formula.md +37 -0
- package/skills/finebi-cli-agent/references/handoff-contract.md +210 -0
- package/skills/finebi-cli-agent/references/mapping-rules.md +423 -0
- package/skills/finebi-cli-agent/references/mutation-confirmation-contract.md +150 -0
- package/skills/finebi-cli-agent/references/scenario-workflows.md +75 -0
- package/skills/finebi-cli-agent/references/widget-dsl-api-examples.md +457 -0
- package/skills/finebi-cli-agent/references/widget-dsl-api.md +1340 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/package.json +11 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/access-key-contract.js +2 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/access-key.js +174 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/auth-failure.js +18 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/auth-headers.js +21 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/auth.js +116 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/branding.js +31 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/browser-auth.js +331 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/capability.js +122 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/config-permissions.js +87 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/config.js +189 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/dynamic-command.js +324 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/error-catalog.js +482 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/errors.js +22 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/help.js +467 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/index.js +1343 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/install-skill.js +87 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/output-limits.js +188 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/output.js +33 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/profiles.js +158 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/schema-options.js +265 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/schema-validator.js +194 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli/src/skill-files.js +94 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli-runner-core.mjs +399 -0
- package/skills/finebi-cli-agent/scripts/finebi-cli-runner.mjs +29 -0
- package/src/error-catalog.js +12 -0
- package/src/help.js +15 -0
- package/src/index.js +6 -1
- package/src/install-skill.js +87 -0
- package/src/skill-files.js +94 -0
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
# Widget DSL 推荐写法示例(`widget-dsl-api.md` §10)
|
|
2
|
+
|
|
3
|
+
> 本文件是 [`widget-dsl-api.md`](widget-dsl-api.md) §10 的独立分册:可运行的推荐写法示例。
|
|
4
|
+
> §1-§9(根入口 / 字段工厂 / Builder / 图表上下文 / SeriesModel / 过滤 / 配色 / 数值格式 / 枚举)留在主册。
|
|
5
|
+
|
|
6
|
+
### 10.1 分区折线图
|
|
7
|
+
|
|
8
|
+
```js
|
|
9
|
+
WidgetDsl.create("月度趋势")
|
|
10
|
+
.chart().partitionLine()
|
|
11
|
+
.x(from("销售表").dim("月份"))
|
|
12
|
+
.y(line(from("销售表").sum("销售额"))
|
|
13
|
+
.tooltipField(from("销售表").sum("利润")))
|
|
14
|
+
.sort(from("销售表").dim("月份"), SortOrder.ASC)
|
|
15
|
+
.build()
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
适用场景:按月份看销售额走势,并在 tooltip 中补充利润。
|
|
19
|
+
|
|
20
|
+
### 10.2 多系列柱形图
|
|
21
|
+
|
|
22
|
+
```js
|
|
23
|
+
WidgetDsl.create("访问指标对比")
|
|
24
|
+
.chart().seriesColumn()
|
|
25
|
+
.x(from("访问统计事实表").dim("统计日期"))
|
|
26
|
+
.y(bar(from("访问统计事实表").sum("浏览量")))
|
|
27
|
+
.y(bar(from("访问统计事实表").sum("访问次数")))
|
|
28
|
+
.build()
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
适用场景:按日期并列比较两个不同指标,转换器自动按指标名称着色。参考[多系列柱形图](https://help.fanruan.com/finebi/doc-view-199.html)。
|
|
32
|
+
|
|
33
|
+
`sliceColumn basic` 使用分类维度和年月分组日期作为横轴,将两个不同的求和指标分区展示。参考[分区柱形图](https://help.fanruan.com/finebi/doc-view-197.html)。
|
|
34
|
+
|
|
35
|
+
### 10.3 饼图
|
|
36
|
+
|
|
37
|
+
```js
|
|
38
|
+
WidgetDsl.create("区域占比")
|
|
39
|
+
.chart().pie()
|
|
40
|
+
.x(from("销售表").dim("地区"))
|
|
41
|
+
.y(from("销售表").sum("销售额"))
|
|
42
|
+
.label(from("销售表").sum("销售额"))
|
|
43
|
+
.build()
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
适用场景:看各地区销售额占比。
|
|
47
|
+
|
|
48
|
+
### 10.4 玫瑰图
|
|
49
|
+
|
|
50
|
+
```js
|
|
51
|
+
WidgetDsl.create("品类贡献")
|
|
52
|
+
.chart().rose()
|
|
53
|
+
.x(from("销售表").dim("品类"))
|
|
54
|
+
.y(from("销售表").sum("销售额"))
|
|
55
|
+
.build()
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
适用场景:既看占比,也看不同品类的量值差异。
|
|
59
|
+
|
|
60
|
+
### 10.5 多层饼图
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
WidgetDsl.create("大区品牌销售结构")
|
|
64
|
+
.chart().multiPie()
|
|
65
|
+
.color(from("销售表").dim("大区"))
|
|
66
|
+
.size(from("销售表").sum("销售额"))
|
|
67
|
+
.granularity(from("销售表").dim("大区"))
|
|
68
|
+
.granularity(from("销售表").dim("品牌描述"))
|
|
69
|
+
.build()
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
适用场景:内圈按大区着色,外圈展示各大区下的品牌销售额。细粒度按父→子顺序包含两个维度,大小使用销售额求和。参考[多层饼图](https://help.fanruan.com/finebi/doc-view-274.html)。
|
|
73
|
+
|
|
74
|
+
### 10.6 KPI 指标卡
|
|
75
|
+
|
|
76
|
+
```js
|
|
77
|
+
WidgetDsl.create("销售指标卡")
|
|
78
|
+
.chart().kpi()
|
|
79
|
+
.text(from("销售表").sum("销售额"))
|
|
80
|
+
.tooltipField(from("销售表").avg("客单价"))
|
|
81
|
+
.build()
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
适用场景:突出展示一个核心指标,并补充辅助信息。
|
|
85
|
+
|
|
86
|
+
### 10.7 仪表盘
|
|
87
|
+
|
|
88
|
+
```js
|
|
89
|
+
WidgetDsl.create("达成率")
|
|
90
|
+
.chart().ringGauge()
|
|
91
|
+
.x(from("销售表").dim("目标类型"))
|
|
92
|
+
.y(from("销售表").avg("达成率"))
|
|
93
|
+
.target(100)
|
|
94
|
+
.gaugeStyle("standard")
|
|
95
|
+
.gaugeScale("bold")
|
|
96
|
+
.roundRadius(true)
|
|
97
|
+
.gaugeColor("point", "#1677ff")
|
|
98
|
+
.numberFormat(from("销售表").avg("达成率"), NumberFormatModel.percentage(1, true))
|
|
99
|
+
.build()
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
适用场景:查看目标完成率或评分进度。
|
|
103
|
+
|
|
104
|
+
### 10.8 分组表
|
|
105
|
+
|
|
106
|
+
```js
|
|
107
|
+
WidgetDsl.create("区域销售表")
|
|
108
|
+
.chart().table()
|
|
109
|
+
.dimension(from("销售表").dim("地区"))
|
|
110
|
+
.dimension(from("销售表").dim("产品"))
|
|
111
|
+
.measure(from("销售表").sum("销售额"))
|
|
112
|
+
.dataBar(from("销售表").sum("销售额"))
|
|
113
|
+
.miniChart(from("销售表").sum("销售额"),
|
|
114
|
+
MiniChart.line(from("销售表").dim("月份"))
|
|
115
|
+
.sort(MiniChartSort.TARGET_DESC)
|
|
116
|
+
.filter(MiniChartFilter.textBelong(["1月", "2月", null])))
|
|
117
|
+
.measure(quickCalculation(from("销售表").sum("销售额"), QuickCalculationType.RANK_ASC))
|
|
118
|
+
.build()
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
适用场景:看分组结果,并附带组内排名。
|
|
122
|
+
|
|
123
|
+
### 10.9 交叉表
|
|
124
|
+
|
|
125
|
+
```js
|
|
126
|
+
WidgetDsl.create("月度交叉分析")
|
|
127
|
+
.chart().crossTable()
|
|
128
|
+
.row(from("销售表").dim("地区"))
|
|
129
|
+
.col(from("销售表").dim("月份"))
|
|
130
|
+
.measure(from("销售表").sum("销售额"))
|
|
131
|
+
.measure(from("销售表").sum("利润"))
|
|
132
|
+
.dataBar(from("销售表").sum("销售额"))
|
|
133
|
+
.metricNameInCol()
|
|
134
|
+
.build()
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
适用场景:按地区和月份交叉查看多指标结果。
|
|
138
|
+
|
|
139
|
+
### 10.10 明细表
|
|
140
|
+
|
|
141
|
+
```js
|
|
142
|
+
WidgetDsl.create("订单明细")
|
|
143
|
+
.chart().detailTable()
|
|
144
|
+
.col(from("订单表").dim("订单号"))
|
|
145
|
+
.col(from("订单表").dim("产品"))
|
|
146
|
+
.col(from("订单表").dim("销售额"))
|
|
147
|
+
.numberFormat(from("订单表").dim("销售额"), NumberFormatModel.number(2, NumberFormatModelScale.TEN_THOUSAND, "元", false))
|
|
148
|
+
.build()
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
适用场景:查看原始订单行数据。
|
|
152
|
+
|
|
153
|
+
### 10.11 原值过滤
|
|
154
|
+
|
|
155
|
+
```js
|
|
156
|
+
WidgetDsl.create("高客单订单")
|
|
157
|
+
.chart().table()
|
|
158
|
+
.dimension(from("订单表").dim("地区"))
|
|
159
|
+
.measure(from("订单表").sum("销售额"))
|
|
160
|
+
.filter().field(from("订单表").measure("销售额")).between(1000, 5000)
|
|
161
|
+
.build()
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
适用场景:先用原始字段值做过滤,再看聚合结果。
|
|
165
|
+
|
|
166
|
+
### 10.12 组件配色
|
|
167
|
+
|
|
168
|
+
```js
|
|
169
|
+
WidgetDsl.create("区域占比配色")
|
|
170
|
+
.chart().pie()
|
|
171
|
+
.x(from("销售表").dim("地区"))
|
|
172
|
+
.y(from("销售表").sum("销售额"))
|
|
173
|
+
.color()
|
|
174
|
+
.palette(["#E65251", "#3478F6", "#36A675"])
|
|
175
|
+
.build()
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
适用场景:统一套用固定色板。
|
|
179
|
+
|
|
180
|
+
按分类固定颜色时,先绑定颜色字段:
|
|
181
|
+
|
|
182
|
+
```js
|
|
183
|
+
WidgetDsl.create("地区销售配色")
|
|
184
|
+
.chart().sliceColumn()
|
|
185
|
+
.x(from("销售表").dim("地区"))
|
|
186
|
+
.y(bar(from("销售表").sum("销售额")))
|
|
187
|
+
.color(from("销售表").dim("地区"))
|
|
188
|
+
.color().palette(["#E65251", "#3478F6"])
|
|
189
|
+
.mapping({"华东": "#36A675", "华南": "#3478F6"})
|
|
190
|
+
.build()
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
华东固定绿色、华南固定蓝色,其他分类使用声明的色板;分类排序改变不影响已映射的颜色。
|
|
194
|
+
|
|
195
|
+
### 10.13 折线连线字段
|
|
196
|
+
|
|
197
|
+
```js
|
|
198
|
+
WidgetDsl.create("月度趋势对比")
|
|
199
|
+
.chart().seriesLine()
|
|
200
|
+
.x(from("销售表").dim("月份"))
|
|
201
|
+
.y(line(from("销售表").sum("销售额"))
|
|
202
|
+
.color(from("销售表").dim("渠道"))
|
|
203
|
+
.lineConnect(from("销售表").dim("周")))
|
|
204
|
+
.build()
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
适用场景:多系列折线既按渠道拆线,又要求折线按周连续连接。
|
|
208
|
+
|
|
209
|
+
**约束(2026-08-26 真机实证)**:`lineConnect` 字段必须与类目轴(`.x(...)` / `.y(...)` 的维度)**不同**——同字段时平台渲染报 `Duplicate key DimensionHyperOrder`,编译期直接 fail-loud。
|
|
210
|
+
|
|
211
|
+
#### 普通折线连线样式
|
|
212
|
+
|
|
213
|
+
```js
|
|
214
|
+
WidgetDsl.create("月度趋势样式")
|
|
215
|
+
.chart().seriesLine()
|
|
216
|
+
.x(from("销售表").dim("月份"))
|
|
217
|
+
.lineOptions(LineOptions.curve()
|
|
218
|
+
.borderStyle("dashed")
|
|
219
|
+
.marker(true)
|
|
220
|
+
.symbol("circle")
|
|
221
|
+
.nullPattern("disconnect"))
|
|
222
|
+
.y(line(from("销售表").sum("销售额")))
|
|
223
|
+
.y(line(from("销售表").sum("利润"))
|
|
224
|
+
.lineOptions(LineOptions.defaults().marker(false)))
|
|
225
|
+
.build()
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
两条曲线使用虚线、空值断开;销售额显示圆形标记,利润只覆盖标记开关。
|
|
229
|
+
字段连线顺序仍由 `.lineConnect(field)` 声明,样式不会替换字段绑定。
|
|
230
|
+
|
|
231
|
+
### 10.14 记录数指标
|
|
232
|
+
|
|
233
|
+
```js
|
|
234
|
+
WidgetDsl.create("区域订单量")
|
|
235
|
+
.chart().table()
|
|
236
|
+
.dimension(from("订单表").dim("地区"))
|
|
237
|
+
.measure(from("订单表").count("订单数"))
|
|
238
|
+
.build()
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
`count()` / `count(alias)` 表示来源表总行数。需要显式指定记录数依赖维度时使用:
|
|
242
|
+
|
|
243
|
+
```js
|
|
244
|
+
WidgetDsl.create("地区订单量")
|
|
245
|
+
.chart().table()
|
|
246
|
+
.dimension(from("订单表").dim("地区"))
|
|
247
|
+
.dimension(from("订单表").dim("产品"))
|
|
248
|
+
.measure(count(from("订单表").dim("地区"), "地区订单数"))
|
|
249
|
+
.build()
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
适用场景:组件存在多个维度,但记录数需要明确依赖其中一个维度。
|
|
253
|
+
|
|
254
|
+
### 10.15 字段去重计数
|
|
255
|
+
|
|
256
|
+
```js
|
|
257
|
+
WidgetDsl.create("各区域客户数")
|
|
258
|
+
.chart().table()
|
|
259
|
+
.dimension(from("订单表").dim("地区"))
|
|
260
|
+
.measure(from("订单表").countDistinct("客户名称", "客户数"))
|
|
261
|
+
.build()
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
适用场景:按地区统计去重客户数。`countDistinct` 只支持文本/日期字段(含其计算字段变体,
|
|
265
|
+
计算字段写 `measureID("配置 ID").countDistinct()`),且该字段须先转成指标形态——
|
|
266
|
+
`widget add/update/data` 缺该形态时报 `UNSUPPORTED_FEATURE`,按 `nextActions` 执行
|
|
267
|
+
`measure transform --subject-id <主题 ID> --field-id <字段 ID> --as measure` 后重跑即可;
|
|
268
|
+
计算字段变体的公式引用聚合形态字段时同样被拒绝(平台取数校验会再包一层去重计数,报聚合嵌套聚合)。
|
|
269
|
+
数值字段、模型字段不支持;明细表不接受指标引用。
|
|
270
|
+
|
|
271
|
+
### 10.16 自定义维度顺序
|
|
272
|
+
|
|
273
|
+
```js
|
|
274
|
+
WidgetDsl.create("区域销售排序")
|
|
275
|
+
.chart().table()
|
|
276
|
+
.dimension(from("销售表").dim("地区"))
|
|
277
|
+
.measure(from("销售表").sum("销售额"))
|
|
278
|
+
.sort(from("销售表").dim("地区"), ["华北", "华东", "华南", "西部"])
|
|
279
|
+
.build()
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
适用场景:地区、阶段、等级这类业务枚举不适合按字典序展示。
|
|
283
|
+
|
|
284
|
+
### 10.17 按指标结果排序
|
|
285
|
+
|
|
286
|
+
```js
|
|
287
|
+
WidgetDsl.create("地区销售排行榜")
|
|
288
|
+
.chart().table()
|
|
289
|
+
.dimension(from("销售表").dim("地区"))
|
|
290
|
+
.measure(from("销售表").sum("销售额"))
|
|
291
|
+
.sort(from("销售表").dim("地区"), from("销售表").sum("销售额"), SortOrder.DESC)
|
|
292
|
+
.build()
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
适用场景:排行榜、Top 区域、Top 产品这类“维度按指标值排序”的场景。
|
|
296
|
+
|
|
297
|
+
### 10.18 交叉表指标名称在行轴
|
|
298
|
+
|
|
299
|
+
```js
|
|
300
|
+
WidgetDsl.create("区域指标对比")
|
|
301
|
+
.chart().crossTable()
|
|
302
|
+
.row(from("销售表").dim("地区"))
|
|
303
|
+
.metricNameInRow()
|
|
304
|
+
.col(from("销售表").dim("月份"))
|
|
305
|
+
.measure(from("销售表").sum("销售额"))
|
|
306
|
+
.measure(from("销售表").sum("利润"))
|
|
307
|
+
.build()
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
适用场景:希望把“销售额、利润”等指标名称竖向展开,便于逐行比对。
|
|
311
|
+
|
|
312
|
+
### 10.19 直接追加维度和指标
|
|
313
|
+
|
|
314
|
+
```js
|
|
315
|
+
WidgetDsl.create("快速分组表")
|
|
316
|
+
.chart().table()
|
|
317
|
+
.addDimension(from("销售表").dim("地区"))
|
|
318
|
+
.addMeasure(from("销售表").sum("销售额"))
|
|
319
|
+
.build()
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
适用场景:快速生成简单分组表,不需要区分更多表格槽位。
|
|
323
|
+
|
|
324
|
+
### 10.20 多值过滤与非空过滤
|
|
325
|
+
|
|
326
|
+
```js
|
|
327
|
+
WidgetDsl.create("有效订单")
|
|
328
|
+
.chart().detailTable()
|
|
329
|
+
.col(from("订单表").dim("订单号"))
|
|
330
|
+
.col(from("订单表").dim("地区"))
|
|
331
|
+
.filter().field(from("订单表").dim("地区")).in(["华东", "华南"])
|
|
332
|
+
.filter().field(from("订单表").dim("客户ID")).notNull()
|
|
333
|
+
.build()
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
适用场景:先筛一组业务值,再排除关键字段为空的脏数据。
|
|
337
|
+
|
|
338
|
+
### 10.21 自定义聚合指标
|
|
339
|
+
|
|
340
|
+
```js
|
|
341
|
+
WidgetDsl.create("中位销售额")
|
|
342
|
+
.chart().kpi()
|
|
343
|
+
.text(from("销售表").measure("销售额", "MEDIAN", "销售额中位数"))
|
|
344
|
+
.build()
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
适用场景:平台支持某种聚合方式,但当前 DSL 没有专门的 sugar 方法。
|
|
348
|
+
|
|
349
|
+
### 10.22 快速计算二次开关
|
|
350
|
+
|
|
351
|
+
```js
|
|
352
|
+
WidgetDsl.create("累计销售额")
|
|
353
|
+
.chart().table()
|
|
354
|
+
.dimension(from("销售表").dim("月份"))
|
|
355
|
+
.measure(
|
|
356
|
+
quickCalculation(
|
|
357
|
+
from("销售表").sum("销售额"),
|
|
358
|
+
QuickCalculationType.SUM_OF_ABOVE,
|
|
359
|
+
false
|
|
360
|
+
)
|
|
361
|
+
)
|
|
362
|
+
.build()
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
适用场景:需要显式指定快速计算的 secondaryCalculation 开关。
|
|
366
|
+
|
|
367
|
+
### 10.23 业务值固定配色
|
|
368
|
+
|
|
369
|
+
```js
|
|
370
|
+
WidgetDsl.create("区域颜色固定")
|
|
371
|
+
.chart().pie()
|
|
372
|
+
.x(from("销售表").dim("地区"))
|
|
373
|
+
.y(from("销售表").sum("销售额"))
|
|
374
|
+
.color()
|
|
375
|
+
.mapping({
|
|
376
|
+
"华东": "#0B6E4F",
|
|
377
|
+
"华南": "#D98E04",
|
|
378
|
+
"华北": "#8C1C13"
|
|
379
|
+
})
|
|
380
|
+
.build()
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
适用场景:要求同一业务值在所有图表中保持固定品牌色或区域色。
|
|
384
|
+
|
|
385
|
+
### 10.24 KPI 指标卡
|
|
386
|
+
|
|
387
|
+
```js
|
|
388
|
+
WidgetDsl.create("销售总额")
|
|
389
|
+
.chart().kpi()
|
|
390
|
+
.text(from("销售表").sum("销售额"))
|
|
391
|
+
.build()
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### 10.25 模型指标集
|
|
395
|
+
|
|
396
|
+
```js
|
|
397
|
+
WidgetDsl.create("模型销售概览")
|
|
398
|
+
.chart().gauge()
|
|
399
|
+
.x(model("销售指标集").dataset("订单明细").dim("地区"))
|
|
400
|
+
.y(model("销售指标集").metrics().sum("销售额"))
|
|
401
|
+
.build()
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
模型表字段和模型计算字段按字段类型使用各自子命名空间的 `dim/sum/...` 形态;模型指标支持
|
|
405
|
+
`sum/avg/max/min/measure`、alias 和快速计算。纯模型组件不需要物理表来源。缺少精确模型名或字段名证据时返回 `BLOCKED`,不要把模型名
|
|
406
|
+
当作 `sourceTableName`。
|
|
407
|
+
|
|
408
|
+
### 词云
|
|
409
|
+
|
|
410
|
+
使用 `finebi-cli widget template --chart-type wordCloud --scenario basic` 获取模板。一个维度与一个指标是模板示范,DSL 允许空配置与多字段。文本栏使用 `text(field)`,标签栏使用 `label(field)`。
|
|
411
|
+
|
|
412
|
+
```javascript
|
|
413
|
+
WidgetDsl.create("搜索词云")
|
|
414
|
+
.chart().wordCloud()
|
|
415
|
+
.text(from("搜索词汇统计表").dim("搜索词"))
|
|
416
|
+
.size(from("搜索词汇统计表").sum("搜索次数"))
|
|
417
|
+
.color(from("搜索词汇统计表").sum("搜索次数"))
|
|
418
|
+
.textSize(36)
|
|
419
|
+
.build();
|
|
420
|
+
```
|
|
421
|
+
### 自定义同环比
|
|
422
|
+
|
|
423
|
+
使用 `customPeriod(measure, CustomPeriodModel)` 创建期间指标;支持 `value`、`compare`、`period`、`relative`。
|
|
424
|
+
|
|
425
|
+
### 桑基图
|
|
426
|
+
|
|
427
|
+
`sankeyStart`、`sankeyEnd`、`size` 和 `color` 重复调用会追加字段;均可省略,不强制数量。
|
|
428
|
+
起终点接受 DimRef,size 接受 MeasureRef。节点名称默认关闭,`showNodeName(true)` 开启。
|
|
429
|
+
|
|
430
|
+
```javascript
|
|
431
|
+
WidgetDsl.create("门店流量")
|
|
432
|
+
.chart().sankey()
|
|
433
|
+
.sankeyStart(from("订单").dim("产品名称"))
|
|
434
|
+
.sankeyEnd(from("订单").dim("门店名称"))
|
|
435
|
+
.size(from("订单").sum("订单金额"))
|
|
436
|
+
.color(from("订单").dim("产品名称"))
|
|
437
|
+
.showNodeName(true)
|
|
438
|
+
.build();
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
模板:`finebi-cli widget template --chart-type sankey --scenario basic`。
|
|
442
|
+
多阶段数据用 source/target 边表示,中间节点同时出现于起点和终点;不新增层级槽位。
|
|
443
|
+
|
|
444
|
+
### 折线雷达图
|
|
445
|
+
|
|
446
|
+
使用 `finebi-cli widget template --chart-type radar --scenario basic` 获取模板,按响应中的变量元数据
|
|
447
|
+
替换组件名、表名、分类维度及两个不同的数值字段;变量值按 JSON 字面量编码。
|
|
448
|
+
API 与配置边界见 [雷达图编码](widget-dsl-api.md#427-折线雷达图)。
|
|
449
|
+
|
|
450
|
+
```javascript
|
|
451
|
+
WidgetDsl.create("手机参数对比").chart().radar()
|
|
452
|
+
.x(from("手机参数对比").dim("特征"))
|
|
453
|
+
.y(line(from("手机参数对比").sum("手机A")))
|
|
454
|
+
.y(line(from("手机参数对比").sum("手机B")))
|
|
455
|
+
.radarOptions(RadarOptions.polygon().marker(true).symbol("triangle"))
|
|
456
|
+
.build();
|
|
457
|
+
```
|