@wubaoqi/guancopilot 0.0.0-stage → 0.2.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.
Files changed (239) hide show
  1. package/NOTICE.md +17 -0
  2. package/README.md +146 -2
  3. package/assets/coreutils.wasm +0 -0
  4. package/assets/find.wasm +0 -0
  5. package/assets/guanbi.wasm +4 -0
  6. package/assets/guancli.wasm +0 -0
  7. package/assets/guanhelm.wasm +0 -0
  8. package/assets/jq.wasm +0 -0
  9. package/assets/openskills.wasm +0 -0
  10. package/assets/rg.wasm +0 -0
  11. package/assets/sed.wasm +0 -0
  12. package/bin/guancopilot +0 -0
  13. package/bin/guanvm +0 -0
  14. package/bin/platforms.cjs +6 -0
  15. package/bin/run.cjs +39 -0
  16. package/bin/runtime.cjs +44 -0
  17. package/licenses/Go-LICENSE +27 -0
  18. package/licenses/browser-_speed-highlight_core-LICENSE +121 -0
  19. package/licenses/browser-_speed-highlight_core-package.json +14 -0
  20. package/licenses/browser-dompurify-LICENSE +202 -0
  21. package/licenses/browser-dompurify-LICENSE-MPL +373 -0
  22. package/licenses/browser-dompurify-package.json +10 -0
  23. package/licenses/browser-marked-LICENSE +44 -0
  24. package/licenses/browser-marked-package.json +10 -0
  25. package/licenses/coreutils-LICENSE +18 -0
  26. package/licenses/findutils-LICENSE +18 -0
  27. package/licenses/github.com_BurntSushi_toml_v1.6.0-COPYING +21 -0
  28. package/licenses/github.com_dustin_go-humanize_v1.0.1-LICENSE +21 -0
  29. package/licenses/github.com_google_jsonschema-go_v0.4.3-LICENSE +21 -0
  30. package/licenses/github.com_google_uuid_v1.6.0-LICENSE +27 -0
  31. package/licenses/github.com_jackc_pgpassfile_v1.0.0-LICENSE +22 -0
  32. package/licenses/github.com_jackc_pgservicefile_v0.0.0-20240606120523-5a60cdf6a761-LICENSE +22 -0
  33. package/licenses/github.com_jackc_pgx_v5_v5.11.0-LICENSE +22 -0
  34. package/licenses/github.com_jackc_puddle_v2_v2.2.2-LICENSE +22 -0
  35. package/licenses/github.com_mattn_go-isatty_v0.0.20-LICENSE +9 -0
  36. package/licenses/github.com_modelcontextprotocol_go-sdk_v1.8.0-LICENSE +216 -0
  37. package/licenses/github.com_ncruces_go-strftime_v1.0.0-LICENSE +21 -0
  38. package/licenses/github.com_remyoudompheng_bigfft_v0.0.0-20230129092748-24d4a6f8daec-LICENSE +27 -0
  39. package/licenses/github.com_santhosh-tekuri_jsonschema_v6_v6.0.3-LICENSE +175 -0
  40. package/licenses/github.com_segmentio_asm_v1.1.3-LICENSE +21 -0
  41. package/licenses/github.com_segmentio_encoding_v0.5.4-LICENSE +21 -0
  42. package/licenses/github.com_tetratelabs_wazero_v1.12.0-LICENSE +201 -0
  43. package/licenses/github.com_tetratelabs_wazero_v1.12.0-NOTICE +2 -0
  44. package/licenses/github.com_yosida95_uritemplate_v3_v3.0.2-LICENSE +25 -0
  45. package/licenses/golang.org_x_image_v0.44.0-LICENSE +27 -0
  46. package/licenses/golang.org_x_net_v0.58.0-LICENSE +27 -0
  47. package/licenses/golang.org_x_oauth2_v0.36.0-LICENSE +27 -0
  48. package/licenses/golang.org_x_sync_v0.22.0-LICENSE +27 -0
  49. package/licenses/golang.org_x_sys_v0.47.0-LICENSE +27 -0
  50. package/licenses/golang.org_x_text_v0.41.0-LICENSE +27 -0
  51. package/licenses/golang.org_x_time_v0.15.0-LICENSE +27 -0
  52. package/licenses/guanbi-skills-LICENSE +133 -0
  53. package/licenses/guanbi-skills-LICENSE.README.md +28 -0
  54. package/licenses/guanbi-skills-LICENSE.zh-CN +82 -0
  55. package/licenses/jq-COPYING +176 -0
  56. package/licenses/modernc.org_libc_v1.73.4-LICENSE +27 -0
  57. package/licenses/modernc.org_libc_v1.73.4-LICENSE-3RD-PARTY.md +305 -0
  58. package/licenses/modernc.org_mathutil_v1.7.1-LICENSE +27 -0
  59. package/licenses/modernc.org_memory_v1.11.0-LICENSE +27 -0
  60. package/licenses/modernc.org_memory_v1.11.0-LICENSE-GO +27 -0
  61. package/licenses/modernc.org_memory_v1.11.0-LICENSE-LOGO +1 -0
  62. package/licenses/modernc.org_memory_v1.11.0-LICENSE-MMAP-GO +25 -0
  63. package/licenses/modernc.org_sqlite_v1.53.0-LICENSE +26 -0
  64. package/licenses/mvdan.cc_sh_v3_v3.13.1-LICENSE +27 -0
  65. package/licenses/ripgrep-COPYING +3 -0
  66. package/licenses/ripgrep-LICENSE-MIT +21 -0
  67. package/licenses/sed-LICENSE +21 -0
  68. package/manifest.json +972 -0
  69. package/package.json +30 -4
  70. package/plugin/guancopilot.js +193 -0
  71. package/skills-bundle/.guanvm-skills-bundle +0 -0
  72. package/skills-bundle/_recipes/dashboard/gates/page_check.js +16 -0
  73. package/skills-bundle/_recipes/dashboard/gates/report_check.js +4 -0
  74. package/skills-bundle/_recipes/dashboard/knowledge/01.md +1 -0
  75. package/skills-bundle/_recipes/dashboard/knowledge/02.md +1 -0
  76. package/skills-bundle/_recipes/dashboard/knowledge/03.md +1 -0
  77. package/skills-bundle/_recipes/dashboard/knowledge/04.md +1 -0
  78. package/skills-bundle/_recipes/dashboard/knowledge/05.md +1 -0
  79. package/skills-bundle/_recipes/dashboard/knowledge/06.md +1 -0
  80. package/skills-bundle/_recipes/dashboard/template.json +41 -0
  81. package/skills-bundle/_recipes/etl/gates/etl_live_check.js +10 -0
  82. package/skills-bundle/_recipes/etl/gates/etl_report_check.js +3 -0
  83. package/skills-bundle/_recipes/etl/knowledge/01.md +1 -0
  84. package/skills-bundle/_recipes/etl/knowledge/02.md +9 -0
  85. package/skills-bundle/_recipes/etl/knowledge/03.md +1 -0
  86. package/skills-bundle/_recipes/etl/knowledge/04.md +1 -0
  87. package/skills-bundle/_recipes/etl/knowledge/05.md +1 -0
  88. package/skills-bundle/_recipes/etl/template.json +39 -0
  89. package/skills-bundle/_recipes/hints.json +46 -0
  90. package/skills-bundle/guancli/.commandface.json +155 -0
  91. package/skills-bundle/guancli/SKILL.md +342 -0
  92. package/skills-bundle/guancli/evals/evals.json +156 -0
  93. package/skills-bundle/guancli/evals/fixtures/metric-candidate-empty-search.json +13 -0
  94. package/skills-bundle/guancli/evals/fixtures/metric-candidate-prior-request.json +13 -0
  95. package/skills-bundle/guancli/evals/fixtures/metric-consumption-columns.json +46 -0
  96. package/skills-bundle/guancli/evals/fixtures/metric-consumption-metadata.json +36 -0
  97. package/skills-bundle/guancli/evals/fixtures/metric-consumption-query.json +18 -0
  98. package/skills-bundle/guancli/references/analysis-primitives.md +95 -0
  99. package/skills-bundle/guancli/references/auth-and-config.md +131 -0
  100. package/skills-bundle/guancli/references/examples/metric-date-in.json +7 -0
  101. package/skills-bundle/guancli/references/examples/metric-query-rows.py +83 -0
  102. package/skills-bundle/guancli/references/examples/metric-query.sh +6 -0
  103. package/skills-bundle/guancli/references/form-chatbi.md +199 -0
  104. package/skills-bundle/guancli/references/gateway.md +148 -0
  105. package/skills-bundle/guancli/references/metric-batch-query.md +82 -0
  106. package/skills-bundle/guancli/references/metric-commands.md +562 -0
  107. package/skills-bundle/guancli/references/metric-generic-query.md +215 -0
  108. package/skills-bundle/guancli/references/metric-json-migration.md +18 -0
  109. package/skills-bundle/guancli/references/metric-query-recipes.md +358 -0
  110. package/skills-bundle/guancli/references/preview-and-output.md +192 -0
  111. package/skills-bundle/guancli/references/resource-query.md +101 -0
  112. package/skills-bundle/guands/SKILL.md +281 -0
  113. package/skills-bundle/guands/references/calc-fields-boundaries-and-pitfalls.md +160 -0
  114. package/skills-bundle/guands/references/command-reference.md +267 -0
  115. package/skills-bundle/guands/references/incremental-and-schedule.md +157 -0
  116. package/skills-bundle/guands/references/workflows.md +256 -0
  117. package/skills-bundle/guanetl/SKILL.md +391 -0
  118. package/skills-bundle/guanetl/evals/evals.json +41 -0
  119. package/skills-bundle/guanetl/references/ETL_AI_DEVELOP.md +456 -0
  120. package/skills-bundle/guanmetric/SKILL.md +144 -0
  121. package/skills-bundle/guanmetric/evals/evals.json +117 -0
  122. package/skills-bundle/guanmetric/evals/fixtures/atomic-detail-read-model.json +18 -0
  123. package/skills-bundle/guanmetric/evals/fixtures/confirmed-template-summary.json +12 -0
  124. package/skills-bundle/guanmetric/evals/fixtures/create-result-unknown-state.json +13 -0
  125. package/skills-bundle/guanmetric/evals/forward-eval-2026-09-21.json +62 -0
  126. package/skills-bundle/guanmetric/references/metric-api-contract-examples.json +690 -0
  127. package/skills-bundle/guanmetric/references/metric-api-contract.schema.json +349 -0
  128. package/skills-bundle/guanmetric/references/metric-api-contracts.md +436 -0
  129. package/skills-bundle/guanmetric/references/metric-atomic-mutation.md +238 -0
  130. package/skills-bundle/guanmetric/references/metric-batch-status.md +71 -0
  131. package/skills-bundle/guanmetric/references/metric-business-dictionary-api-contract-examples.json +53 -0
  132. package/skills-bundle/guanmetric/references/metric-business-dictionary-api-contract.schema.json +26 -0
  133. package/skills-bundle/guanmetric/references/metric-business-dictionary.md +76 -0
  134. package/skills-bundle/guanmetric/references/metric-common-fields.md +246 -0
  135. package/skills-bundle/guanmetric/references/metric-composite-mutation.md +165 -0
  136. package/skills-bundle/guanmetric/references/metric-delete-mutation.md +70 -0
  137. package/skills-bundle/guanmetric/references/metric-derived-mutation.md +453 -0
  138. package/skills-bundle/guanmetric/references/metric-excel-template.md +365 -0
  139. package/skills-bundle/guanmetric/references/metric-expression-rules.md +146 -0
  140. package/skills-bundle/guanmetric/references/metric-flow-generate-example.json +79 -0
  141. package/skills-bundle/guanmetric/references/metric-flow-generate.schema.json +93 -0
  142. package/skills-bundle/guanmetric/references/metric-flow.md +218 -0
  143. package/skills-bundle/guanmetric/references/metric-hierarchy-api-contract-examples.json +171 -0
  144. package/skills-bundle/guanmetric/references/metric-hierarchy-api-contract.schema.json +167 -0
  145. package/skills-bundle/guanmetric/references/metric-hierarchy-api-contracts.md +193 -0
  146. package/skills-bundle/guanmetric/references/metric-mutation.md +155 -0
  147. package/skills-bundle/guanmetric/references/metric-public-dimension-api-contract-examples.json +62 -0
  148. package/skills-bundle/guanmetric/references/metric-public-dimension-api-contract.schema.json +47 -0
  149. package/skills-bundle/guanmetric/references/metric-public-dimension.md +155 -0
  150. package/skills-bundle/guanmetric/references/metric-tree-api-contract-examples.json +277 -0
  151. package/skills-bundle/guanmetric/references/metric-tree-api-contract.schema.json +263 -0
  152. package/skills-bundle/guanmetric/references/metric-tree-api-contracts.md +53 -0
  153. package/skills-bundle/guanmetric/references/metric-tree-mutation.md +500 -0
  154. package/skills-bundle/guanmetric/references/metric-validation-ownership.md +74 -0
  155. package/skills-bundle/guanvis/SKILL.md +333 -0
  156. package/skills-bundle/guanvis/evals/china_map/card_01_basic_map.js +13 -0
  157. package/skills-bundle/guanvis/evals/china_map/card_02_world_map.js +10 -0
  158. package/skills-bundle/guanvis/evals/china_map/card_03_point_map.js +12 -0
  159. package/skills-bundle/guanvis/evals/china_map/page.js +10 -0
  160. package/skills-bundle/guanvis/evals/china_map/schema.js +10 -0
  161. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/README.md +30 -0
  162. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/card_01_comparative_mvp.js +72 -0
  163. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/page.js +6 -0
  164. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/schema.js +22 -0
  165. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/verify_default_roundtrip.sh +92 -0
  166. package/skills-bundle/guanvis/evals/complex_report_pro/card_01_monthly.js +63 -0
  167. package/skills-bundle/guanvis/evals/complex_report_pro/page.js +6 -0
  168. package/skills-bundle/guanvis/evals/complex_report_pro/schema.js +6 -0
  169. package/skills-bundle/guanvis/evals/custom_chart_echarts/card_01_bar.js +13 -0
  170. package/skills-bundle/guanvis/evals/custom_chart_echarts/card_02_pie.js +13 -0
  171. package/skills-bundle/guanvis/evals/custom_chart_echarts/charts/bar.js +11 -0
  172. package/skills-bundle/guanvis/evals/custom_chart_echarts/charts/pie.js +15 -0
  173. package/skills-bundle/guanvis/evals/custom_chart_echarts/page.js +5 -0
  174. package/skills-bundle/guanvis/evals/custom_chart_echarts/schema.js +9 -0
  175. package/skills-bundle/guanvis/evals/custom_chart_sdk/card_01_level_nodes.js +19 -0
  176. package/skills-bundle/guanvis/evals/custom_chart_sdk/charts/level_nodes.css +51 -0
  177. package/skills-bundle/guanvis/evals/custom_chart_sdk/charts/level_nodes.html +1 -0
  178. package/skills-bundle/guanvis/evals/custom_chart_sdk/charts/level_nodes.js +28 -0
  179. package/skills-bundle/guanvis/evals/custom_chart_sdk/page.js +5 -0
  180. package/skills-bundle/guanvis/evals/custom_chart_sdk/schema.js +7 -0
  181. package/skills-bundle/guanvis/evals/dynamic_fields/card_01_dynamic_dataset.js +20 -0
  182. package/skills-bundle/guanvis/evals/dynamic_fields/card_02_dynamic_metric_chart.js +16 -0
  183. package/skills-bundle/guanvis/evals/dynamic_fields/metrics.js +19 -0
  184. package/skills-bundle/guanvis/evals/dynamic_fields/page.js +9 -0
  185. package/skills-bundle/guanvis/evals/dynamic_fields/schema.js +7 -0
  186. package/skills-bundle/guanvis/evals/dynamic_fields/verify_default_roundtrip.sh +137 -0
  187. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/README.md +26 -0
  188. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/card_01_percentage_advcalc.js +44 -0
  189. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/card_02_scroll_percentage.js +12 -0
  190. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/page.js +6 -0
  191. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/schema.js +22 -0
  192. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/README.md +28 -0
  193. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/card_01_rank_advcalc.js +59 -0
  194. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/page.js +6 -0
  195. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/schema.js +22 -0
  196. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/verify_default_roundtrip.sh +135 -0
  197. package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/README.md +15 -0
  198. package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/card_01_running_total_advcalc.js +74 -0
  199. package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/page.js +6 -0
  200. package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/schema.js +22 -0
  201. package/skills-bundle/guanvis/evals/sales_dashboard/card_01_revenue_column.js +10 -0
  202. package/skills-bundle/guanvis/evals/sales_dashboard/card_02_trend_line.js +9 -0
  203. package/skills-bundle/guanvis/evals/sales_dashboard/card_03_kpi.js +6 -0
  204. package/skills-bundle/guanvis/evals/sales_dashboard/card_04_pie.js +9 -0
  205. package/skills-bundle/guanvis/evals/sales_dashboard/card_05_calc_field_test.js +12 -0
  206. package/skills-bundle/guanvis/evals/sales_dashboard/page.js +11 -0
  207. package/skills-bundle/guanvis/evals/sales_dashboard/schema.js +14 -0
  208. package/skills-bundle/guanvis/evals/sales_dashboard/selector_01_region.js +10 -0
  209. package/skills-bundle/guanvis/evals/split_charts/card_01_column_split.js +10 -0
  210. package/skills-bundle/guanvis/evals/split_charts/card_02_line_split.js +10 -0
  211. package/skills-bundle/guanvis/evals/split_charts/card_03_combo_split.js +11 -0
  212. package/skills-bundle/guanvis/evals/split_charts/page.js +10 -0
  213. package/skills-bundle/guanvis/evals/split_charts/schema.js +14 -0
  214. package/skills-bundle/guanvis/evals/tab_layout/card_00_total_revenue.js +6 -0
  215. package/skills-bundle/guanvis/evals/tab_layout/card_01_revenue.js +10 -0
  216. package/skills-bundle/guanvis/evals/tab_layout/card_02_trend.js +9 -0
  217. package/skills-bundle/guanvis/evals/tab_layout/card_03_story.js +11 -0
  218. package/skills-bundle/guanvis/evals/tab_layout/page.js +23 -0
  219. package/skills-bundle/guanvis/evals/tab_layout/schema.js +11 -0
  220. package/skills-bundle/guanvis/evals/tab_layout/selector_01_region.js +8 -0
  221. package/skills-bundle/guanvis/references/api-reference.md +476 -0
  222. package/skills-bundle/guanvis/references/builder-reference.md +1676 -0
  223. package/skills-bundle/guanvis/references/chart-properties.md +2101 -0
  224. package/skills-bundle/guanvis/references/checkout-editing.md +53 -0
  225. package/skills-bundle/guanvis/references/complex-report-pro-patterns.md +398 -0
  226. package/skills-bundle/guanvis/references/dir-and-page-management.md +48 -0
  227. package/skills-bundle/guanvis/references/metric-chart-reference.md +258 -0
  228. package/skills-bundle/guanvis/references/publish-and-constraints.md +60 -0
  229. package/skills-bundle/guanvis/references/selector-reference.md +431 -0
  230. package/skills-bundle/guanvis/references/tableau-migration.md +73 -0
  231. package/skills-bundle/guanvis/references/theme.md +123 -0
  232. package/skills-bundle/guanvis/references/troubleshooting.md +25 -0
  233. package/skills-bundle/guanvis/references/validation-and-chart-patterns.md +205 -0
  234. package/skills-bundle/guanwf/SKILL.md +543 -0
  235. package/skills-bundle/guanwf/references/ETL_AI_DEVELOP.md +456 -0
  236. package/skills-bundle/guanwf/references/TASK_NODE_CONTRACTS.md +64 -0
  237. package/skills-bundle/guanwf/references/WORKFLOW_DSL.md +536 -0
  238. package/skills-bundle/guanwf/references/WORKFLOW_NODES.md +166 -0
  239. package/skills-bundle/js/SKILL.md +145 -0
@@ -0,0 +1,205 @@
1
+ ## 验证规则
2
+
3
+ pack/publish 时分两层自动检查:
4
+
5
+ ### JS 层(脚本执行时,面向 AI 生成的脚本质量)
6
+
7
+ - **数据集绑定**:是否调用了 `.bindDataset()`,dsId 是否在 `defineDataset()` 中注册
8
+ - **Zone 配置**:必填 zone 是否有字段、字段数量是否超过 maxCount、是否使用了不支持的 zone
9
+ - **字段完整性**:fdId/name 非空、fdType 合法(FieldType 枚举)、field() 引用的字段名是否存在
10
+ - **聚合类型**:metric/compare/target zone 中非明细表图表必须有 aggrType;aggrType 值必须合法(AggrType 枚举)
11
+ - **明细表计算字段**:`DETAIL_TABLE` / `SCROLL_TABLE` 禁止 `calculationType: "aggregation"` / `"window"` 的 `calcField()`,并拦截明显的 `OVER(...)` 窗口子句;明细表只做行级展示,行级公式使用 `{ calculationType: "normal" }`,聚合需求优先改用非明细图表的原生指标 `aggrType`,复杂聚合改用非明细图表的 aggregation calcField 或 ETL 预计算。跨方言 SQL 聚合函数由 skill 生成规范约束,不在本地校验中维护函数名白/黑名单
12
+ - **排序**:sorting zone 中 sortType 必须是 ASC/DESC(使用 SortOrder 枚举)
13
+ - **重复检测**:同一 zone 中相同 fdId+alias+aggrType 组合会产生 warning
14
+ - **空卡片**:没有任何字段的卡片会报错
15
+ - **Page 布局**:cardIndex 越界、宽度超限(非精细 1-12,精细导出后 1-60)、溢出检测
16
+
17
+ ### Go 层(payload 生成后,面向后端导入兼容性)
18
+
19
+ - **结构完整性**:chartType 非空、dsId 非空、dsInfo 非空且含 dsId/columns、meta JSON 合法
20
+ - **meta 结构**:chartMain/summary 存在、zoneData/zoneInfo 中 zoneId 合法
21
+ - **字段合法性**:fdType/aggrType 值合法、metric zone 字段有 aggrType
22
+ - **Page 关联**:layout 中 card ID 引用合法、pageCardRels 引用合法
23
+ - **筛选器**:cdType=6 的卡片跳过 chartType/chartMain 检查,验证 source.field 存在
24
+
25
+ ### column zone 与 colorBy zone 的区别
26
+
27
+ **column zone**(`.addColumn()`):接受**维度字段**,用于按维度分组着色。例如"按邮寄方式分组堆叠":
28
+
29
+ ```javascript
30
+ createCard(ChartType.STACKED_COLUMN, "类别销售额")
31
+ .addRow(f("类别"))
32
+ .addColumn(f("邮寄方式")) // 维度分组 → 每种邮寄方式一个颜色
33
+ .addMetric(f("销售额", { aggrType: AggrType.SUM }))
34
+ ```
35
+
36
+ **colorBy zone**(`.addColorBy()`):接受**指标字段**,用于按指标值渐变着色。例如"按利润值深浅着色":
37
+
38
+ ```javascript
39
+ createCard(ChartType.BASIC_COLUMN, "类别销售额")
40
+ .addRow(f("类别"))
41
+ .addMetric(f("销售额", { aggrType: AggrType.SUM }))
42
+ .addColorBy(f("利润", { aggrType: AggrType.SUM })) // 指标值 → 颜色深浅
43
+ ```
44
+
45
+ 支持 column zone 的图表:`STACKED_COLUMN`、`GROUPED_COLUMN`、`GROUPED_BAR`、`STACKED_BAR`、`MULTI_LINE`、`STACKED_AREA` 等多指标图表。`BASIC_COLUMN`、`BASIC_BAR`、`BASIC_LINE`、`PIE` 不支持 column zone。
46
+
47
+ ### 特殊图表行为
48
+
49
+ - **DETAIL_TABLE / SCROLL_TABLE**:`.addColumn()` 自动重定向到 metric zone;metric/sorting zone 的 `needAggregation` 设为 false;不自动添加 aggrType
50
+ - **PIVOT_TABLE**:支持 row(行维度)+ column(列维度)+ metric(值)交叉分析
51
+ - **BASIC_MAP / WORLD_MAP**:地理维度字段放 `row` zone(1 个),指标放 `colorBy`(渐变着色)或 `metric` zone。后端验证规则:`rowSize == 1 && (colorBySize == 1 || metricSize == 1)`。**不要用** `addLocation()`(已废弃)
52
+ - **POINT_MAP / BUBBLE_MAP**:`row` zone 放地名维度(1 个),`metric` zone 放数值指标(POINT_MAP 最多 20 个,BUBBLE_MAP 无限制)。后端验证规则:`rowSize == 1 && metricSize >= 1`
53
+
54
+ ### 图表类型 Zone 配置速查表
55
+
56
+ `-1` 或 `∞` 表示不限数量。**必填** zone 标记 `*`。省略的 zone(filters/sorting/tooltip)所有图表都支持。
57
+
58
+ | ChartType | metric | row | column | colorBy | 其他 | 典型场景 |
59
+ |---|---|---|---|---|---|---|
60
+ | BASIC_COLUMN/BAR/LINE | 1* | ∞ | - | 1 | split(1) | 单指标柱/条/折线 |
61
+ | GROUPED_COLUMN/BAR | ∞* | ∞ | 1 | 1 | split(1) | 多指标分组柱/条 |
62
+ | STACKED_COLUMN/BAR | ∞* | ∞ | 1 | 1 | split(1) | 堆叠柱/条 |
63
+ | MULTI_LINE | ∞* | ∞ | 1 | 1 | split(1) | 多指标折线 |
64
+ | *_WITH_LINE (组合图) | ∞* | **1** | 1 | 1 | metricAdditional(20), split(1) | 柱+线组合。metric=柱形(主轴),metricAdditional=折线(副轴) |
65
+ | PIE / TREE_MAP | 1* | ∞ | - | 1 | - | 饼图/矩形树图 |
66
+ | KPI_CARD | 1* | - | - | - | compare(∞) | 单指标 KPI |
67
+ | PIVOT_TABLE | 124* | ∞ | ∞ | - | - | 交叉表 |
68
+ | DETAIL_TABLE | ∞* | - | - | - | - | 明细表 |
69
+ | SCROLL_TABLE | ∞* | ∞ | - | - | - | 滚动表 |
70
+ | BASIC_SCATTER_PLOT | 2* | 1 | - | 1 | sizeBy(1) | 散点图(X/Y 两个 metric) |
71
+ | BASIC_MAP | 1 | 1* | - | 1 | - | 中国地图(row 放地理维度) |
72
+ | FUNNEL | ∞* | 1 | - | - | - | 漏斗 |
73
+ | PROGRESS_BAR | 2* | 0-1 | - | - | - | 进度条,默认用两个 metric(当前值/目标值) |
74
+ | HEAT_MAP | 1* | 1* | 1* | - | - | 热力图(row+column+metric 都必填) |
75
+ | RADAR_LINE | ∞* | 1 | - | 1 | - | 雷达图 |
76
+ | SANKEY | 1 | ∞* | - | - | - | 桑基图 |
77
+
78
+ ### 图表选型补充(非通识部分)
79
+
80
+ 以下仅列出观远 BI 特有的、容易选错的图表区分规则:
81
+
82
+ | 场景 | 正确选择 | 避免混淆 |
83
+ |------|---------|---------|
84
+ | KPI 只展示一个数字 | `SINGLE_VALUE` | 不要用 `KPI_CARD` |
85
+ | KPI 需要同环比对比 | `KPI_CARD`(有 compare zone) | `SINGLE_VALUE` 无 compare zone |
86
+ | 折线图只有 1 个指标 | `BASIC_LINE` | 不要用 `MULTI_LINE` |
87
+ | 折线图有 2+ 指标 | `MULTI_LINE` | 不要用 `BASIC_LINE`(仅支持 1 metric + colorBy 拆分) |
88
+ | 明细逐行展示(不聚合) | `DETAIL_TABLE` | `PIVOT_TABLE` 会聚合 |
89
+ | 行列交叉汇总 | `PIVOT_TABLE`(有 row + column + metric 三个 zone) | `DETAIL_TABLE` 无 column zone |
90
+ | 按维度分组着色(如按地区着色) | 使用 `.addColumn(f("地区"))` | **不要用** `.addColorBy()`,colorBy 是按指标值渐变着色 |
91
+ | 分组+组成双维度对比 | `STACKED_SPLIT_COLUMN` | `GROUPED_COLUMN` 无堆积、`STACKED_COLUMN` 无分组 |
92
+ | 柱线组合图(主轴柱形+副轴折线) | `GROUPED_COLUMN_WITH_LINE`(metric=柱, metricAdditional=线) | 不要把所有指标都放 metric,副轴指标用 `.addMetricAdditional()` |
93
+ | 目标达成率 | `BULLET_COLUMN` / `BULLET_BAR` | 不要用普通柱形图叠加辅助线 |
94
+ | 占比分析类别 >5 | `TREE_MAP` 或 `RISING_SUN` | `PIE` 限 2-5 个分类,否则难以辨读 |
95
+ | 完成度/进度展示 | `KPI_CARD` + 数值格式 | `SOLID_GAUGE` 占空间大但信息密度低,优先用指标卡 |
96
+ | 中国省/市级地图 | `BASIC_MAP`(内置 Highmaps) | **不要用自定义图表**,内置地图自带 GeoJSON、地名编码匹配 |
97
+ | 全球国家级地图 | `WORLD_MAP`(内置 Highmaps) | 同上 |
98
+ | 标记地图(地名+多指标) | `POINT_MAP`(标记)或 `BUBBLE_MAP`(气泡) | row zone 放 1 个地名维度,metric zone 放多个指标 |
99
+ | 美国各州/加拿大等非中国区域详细地图 | 自定义图表(Vega-Lite geoshape) | 内置 `WORLD_MAP` 只精确到国家级,州/省级需自定义 |
100
+
101
+ ### 拆分图(Trellis/Facet)
102
+
103
+ 将一个图表按维度值拆分成多个小图表并排展示。使用 `addSplit(field)` 指定拆分维度,可选 `setSplitSetting` 控制行列数:
104
+
105
+ ```javascript
106
+ var card = createCard(ChartType.STACKED_AREA, "各类别月销售趋势")
107
+ .bindDataset(DS)
108
+ .addRow(f("订单日期", { granularity: "MONTH" }))
109
+ .addMetric(f("销售额", { aggrType: AggrType.SUM }))
110
+ .addSplit(f("产品类别"))
111
+ .setSplitSetting({ rows: 2, columns: 3 });
112
+ ```
113
+
114
+ 不调用 `setSplitSetting` 时默认 3 行 3 列。支持拆分的图表类型:`BASIC_COLUMN`、`BASIC_BAR`、`BASIC_LINE`、`STACKED_AREA`、`GROUPED_COLUMN`、`STACKED_COLUMN`、`MULTI_LINE` 等所有带 split zone 的图表。
115
+
116
+ ### 地图图表用法
117
+
118
+ **BASIC_MAP(中国行政地图)**:内置 Highmaps,自动加载中国省市 GeoJSON。地理维度字段放 `row` zone,指标放 `colorBy`(渐变着色)或 `metric` zone。BI 后端通过 `GeoCodeUtil` 自动将地名(如"北京市""浙江省")映射为行政区编码。
119
+
120
+ ```javascript
121
+ var card = createCard(ChartType.BASIC_MAP, "各省利润率")
122
+ .bindDataset(DS)
123
+ .addRow(f("省/自治区"))
124
+ .addColorBy(calcField("利润率", "SUM([利润])/SUM([销售额])", {
125
+ numberFormat: NumberFormat.percentage(1)
126
+ }));
127
+
128
+ registerCard(card.build());
129
+ ```
130
+
131
+ 如果数据集中已有利润率字段,可直接引用(无需 calcField):
132
+ ```javascript
133
+ .addColorBy(f("利润率", { aggrType: AggrType.AVG }));
134
+ ```
135
+
136
+ **自定义 colorBy 渐变色**:默认为主题色单色渐变。要设置自定义渐变色,使用 `setColorByColors`,支持两种方式:
137
+
138
+ 1. **预设色板名称**(推荐):`setColorByColors(ColorByPreset.RedGreen)`
139
+ 2. **自定义 hex 颜色**:`setColorByColors({ startColor: "#hex", endColor: "#hex", middleColor?: "#hex", steps?: 5 })`
140
+
141
+ 可用 `ColorByPreset` 值:
142
+
143
+ | 预设名称 | 类型 | 颜色 |
144
+ |---|---|---|
145
+ | `TrafficLight` | 发散 | `#F54F2A` → `#F1DB8B` → `#00A376` |
146
+ | `RedGreen` | 发散 | `#EC4F4F` → `#E0ECF0` → `#009688` |
147
+ | `HeatCold` | 发散 | `#0E64A8` → `#F7F6F6` → `#C53D18` |
148
+ | `Blue` | 顺序 | `#A3CCF8` → `#547CCE` |
149
+ | `Golden` | 顺序 | `#FADA61` → `#F76B1C` |
150
+ | `Green` | 顺序 | `#E0E6B7` → `#0D9347` |
151
+ | `Grey` | 顺序 | `#CBD3DA` → `#5B6A7C` |
152
+ | `Pink` | 顺序 | `#FFA9A9` → `#EF6065` |
153
+ | `Purple` | 顺序 | `#D3C3DB` → `#7260AF` |
154
+
155
+ ```javascript
156
+ // 预设色板
157
+ var card = createCard(ChartType.BASIC_MAP, "利润率地图")
158
+ .bindDataset(DS)
159
+ .addRow(f("省/自治区"))
160
+ .addColorBy(calcField("利润率", "SUM([利润])/SUM([销售额])", {
161
+ numberFormat: NumberFormat.percentage(1)
162
+ }))
163
+ .setColorByColors(ColorByPreset.RedGreen);
164
+
165
+ // 自定义 hex 颜色
166
+ .setColorByColors({ startColor: "#EC4F4F", middleColor: "#E0ECF0", endColor: "#009688", steps: 5 });
167
+ ```
168
+
169
+ **WORLD_MAP(世界地图)**:
170
+
171
+ ```javascript
172
+ var card = createCard(ChartType.WORLD_MAP, "全球销售分布")
173
+ .bindDataset(DS)
174
+ .addRow(f("国家"))
175
+ .addColorBy(f("销售额", { aggrType: AggrType.SUM }));
176
+
177
+ registerCard(card.build());
178
+ ```
179
+
180
+ **POINT_MAP(标记地图)**:row zone 放地名维度(1 个),metric zone 放指标(支持多个,最多 20 个)。
181
+
182
+ ```javascript
183
+ var card = createCard(ChartType.POINT_MAP, "各省门店数")
184
+ .bindDataset(DS)
185
+ .addRow(f("省/自治区"))
186
+ .addMetric(f("门店数", { aggrType: AggrType.SUM }))
187
+ .addMetric(f("销售额", { aggrType: AggrType.SUM }));
188
+
189
+ registerCard(card.build());
190
+ ```
191
+
192
+ **仪表板编排**:KPI 指标卡放最前,趋势/对比图表居中,明细表放最后。每页主 KPI 不超过 5-7 个。
193
+
194
+ ### Field 对象
195
+
196
+ 通过 `f("字段名")` 或 `field(DS, "字段名")` 从 schema 自动构造,无需手写 fdId/fdType。可通过 overrides 叠加属性:
197
+
198
+ ```javascript
199
+ f("营收", {
200
+ aggrType: AggrType.SUM,
201
+ alias: "总营收",
202
+ numberFormat: NumberFormat.currency("¥"),
203
+ sortType: SortOrder.DESC
204
+ })
205
+ ```