@guandata/guanvis 0.1.19 → 0.1.20

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## @guandata/guanvis 0.1.20 - 2026-05-28
4
+
5
+ - 新增普通图表卡片点击联动能力,支持通过 `card.linkTo(...)` 配置卡片之间的字段映射联动。
6
+ - 构建阶段会校验同页联动、字段映射、日期粒度和联动环,提前发现无法发布的联动配置。
7
+ - 补充图表卡片联动文档和测试覆盖,提升联动页面生成稳定性。
8
+
3
9
  ## @guandata/guanvis 0.1.19 - 2026-05-26
4
10
 
5
11
  - 筛选器默认值校验增强,日历筛选器会校验绑定字段类型,避免非日期字段误配日期默认值。
package/README.md CHANGED
@@ -36,6 +36,18 @@ guanvis publish ./my_dashboard/
36
36
 
37
37
  ## 版本更新
38
38
 
39
+ ### 0.1.20
40
+
41
+ - 新增普通图表卡片点击联动能力,支持通过 `card.linkTo(...)` 配置卡片之间的字段映射联动。
42
+ - 构建阶段会校验同页联动、字段映射、日期粒度和联动环,提前发现无法发布的联动配置。
43
+ - 补充图表卡片联动文档和测试覆盖,提升联动页面生成稳定性。
44
+
45
+ ### 0.1.19
46
+
47
+ - 增强日历筛选器默认值校验,固定默认值会校验日期格式、区间端点数量、起止顺序和粒度一致性。
48
+ - 日历筛选器会校验绑定字段类型,避免非日期字段误配日期默认值。
49
+ - 新增 `setDefaultDateRange(start, end)` 辅助方法,配置日期区间默认值更直接。
50
+
39
51
  ### 0.1.18
40
52
 
41
53
  - 新增 Tab 布局能力,支持通过 `createTab()` / `addPanel()` 组织同页多组可切换内容。
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,17 +1,10 @@
1
1
  {
2
2
  "name": "@guandata/guanvis",
3
- "version": "0.1.19",
3
+ "version": "0.1.20",
4
4
  "description": "观远 BI Card/Page 生成工具 - 通过 JS DSL 创建图表和仪表板",
5
5
  "bin": {
6
6
  "guanvis": "bin/run.js"
7
7
  },
8
- "scripts": {
9
- "build": "node scripts/build.js && node scripts/sync-skill.js",
10
- "test:build-script": "node scripts/build.test.js",
11
- "changelog": "node ../../scripts/generate-release-changelog.js .",
12
- "check-changelog": "node ../../scripts/check-release-changelog.js .",
13
- "prepublishOnly": "npm run test:build-script && npm run check-changelog && npm run build && node scripts/preflight.js"
14
- },
15
8
  "files": [
16
9
  "bin/",
17
10
  "binaries/",
@@ -37,7 +30,6 @@
37
30
  "node": ">=14"
38
31
  },
39
32
  "publishConfig": {
40
- "registry": "https://registry.npmjs.org/",
41
33
  "access": "public"
42
34
  }
43
35
  }
@@ -36,7 +36,7 @@ compatibility: "Requires Node.js 14+. Install via npm link (local) or npm instal
36
36
  7. **calcField 命名**:不能与数据集物理字段同名,否则 BI 默认取数据集字段
37
37
  8. **calcField 类型**:`aggregation`(默认)公式必须含聚合函数;纯算术用 `{ calculationType: "normal" }`;窗口函数用 `{ calculationType: "window" }`
38
38
  9. **明细/滚动表 calcField**:`DETAIL_TABLE` / `SCROLL_TABLE` 只做逐行展示;如需行级计算,必须写 `{ calculationType: "normal" }`,且不要写任何 SQL 聚合函数或窗口函数。汇总需求改用非明细图表 `aggrType` / aggregation calcField,或 ETL 预计算
39
- 10. **selector 联动**:必须调用 `.linkToAll()` 或 `.linkTo(cardIndex)`
39
+ 10. **联动**:筛选器联动必须调用 `.linkToAll()` 或 `.linkTo(cardIndex)`;普通图表卡片联动普通图表用 `card.linkTo(layoutCardIndex, { fields: [{ source, target }] })`;详细规则见 `references/builder-reference.md`
40
40
  11. **selector 类型选择**:离散值(区域/类别)→ `DS_ELEMENTS`(默认);连续数值(利润率/金额)→ `.setSelectorType(SelectorType.DS_INTERVAL)`;日期 → `CALENDAR`;快捷日期区间(本月/近7天等)→ `.setTimeMacroOptions(options)`
41
41
  12. **同环比默认**:用户说同比/环比/同环比/年同比/月环比且未指定输出值时,默认用增长率;未指定模式时默认按日期筛选模式(`ComparativeMode.FILTER_BASED`),普通模式需显式指定 `ComparativeMode.NORMAL`
42
42
  13. **placeCard 索引**:按 registerCard → registerTextCard 调用顺序累加,文件按文件名排序加载。**registerSelector 不参与 card index 计数**
@@ -24,6 +24,7 @@
24
24
  | `.setThemeColor(tcId, colors)` | 主题颜色 |
25
25
  | `.setLimit(count)` | 数据行数限制 |
26
26
  | `.setConditionalFormat(config)` / `.setAuxiliaryLine(config)` | 条件格式/辅助线 |
27
+ | `.linkTo(cardIndex, config)` | 普通图表卡片点击联动普通图表卡片,详细规则见本节 Card Linkage |
27
28
  | `.setRawSettings(key, value)` | 原始设置 |
28
29
  | `.build()` | 构建(触发验证) |
29
30
 
@@ -111,6 +112,64 @@
111
112
 
112
113
  > **迁移建议**:Tableau 的 Reference Line 对应 `setAuxiliaryLine`,Reference Band 暂无直接等价,可用辅助线近似。条件格式主要用于表格类图表的单元格着色。
113
114
 
115
+ #### Card Linkage(图表卡片点击联动)
116
+
117
+ `CardBuilder.linkTo(cardIndex, config)` 用于让一个普通图表卡片在点击维度值后过滤同一页面内的目标普通图表卡片。
118
+ 通过 `settings.asFilter` 配置联动关系,通过 `settings.interaction`配置默认交互,不是 selector 联动。
119
+
120
+ ```javascript
121
+ // card_00_region_sales.js
122
+ var card = createCard(ChartType.GROUPED_COLUMN, "区域销售")
123
+ .setId("aaaaaaaaaaaaaaaaaaaaaaaa")
124
+ .bindDataset(DS)
125
+ .addRow(f("区域"))
126
+ .addMetric(f("销售额", { aggrType: AggrType.SUM }))
127
+ .linkTo(1, {
128
+ fields: [
129
+ { source: "区域", target: "区域" }
130
+ ]
131
+ });
132
+
133
+ registerCard(card.build());
134
+ ```
135
+
136
+ `cardIndex` 和页面布局中的 `card: n` 含义一致,按 `registerCard` / `registerTextCard` / `registerImageCard` / `registerCustomChart` 等可布局资源的注册顺序解析;`registerSelector` 不参与该 index。注意它和 `SelectorBuilder.linkTo(cardIndex)` 不同,selector 的 index 仍是历史普通图表注册顺序。
137
+
138
+ 构建阶段会按当前点击动作重算 `interaction`:只有联动一个动作时默认直接联动;如果已有跳转、下钻等其它点击动作,会切换为菜单选择。
139
+
140
+ 限制:
141
+
142
+ - 仅支持同一页面内普通图表卡片互相联动;source 卡片不能跨 page 复用,也不能已有 `settings.asFilter`。
143
+ - source 只能用 `.addRow(...)` / `.addColumn(...)` 添加的维度;target 使用目标卡片绑定的数据集字段。
144
+ - 一次 `.linkTo(...)` 声明一组 `{ source, target }`;多个目标多次调用。
145
+ - 日期联动会按 source 日期粒度对齐目标日期字段;source 使用月/季度/年等粒度时,用 `field(..., { granularity })` 表达该粒度。
146
+ - 构建阶段会校验字段、同页关系和联动环。
147
+
148
+ ```javascript
149
+ var month = field(DS, "日期", { granularity: Granularity.MONTH });
150
+
151
+ var trend = createCard(ChartType.BASIC_LINE, "月度趋势")
152
+ .setId("bbbbbbbbbbbbbbbbbbbbbbbb")
153
+ .bindDataset(DS)
154
+ .addRow(month)
155
+ .addMetric(f("订单数", { aggrType: AggrType.SUM }));
156
+
157
+ var source = createCard(ChartType.GROUPED_COLUMN, "月度区域销售")
158
+ .setId("cccccccccccccccccccccccc")
159
+ .bindDataset(DS)
160
+ .addRow(month)
161
+ .addMetric(f("销售额", { aggrType: AggrType.SUM }))
162
+ .linkTo(0, {
163
+ fields: [
164
+ // target 写原始日期字段名时,会按 source 的 MONTH 粒度自动对齐
165
+ { source: month, target: "日期" }
166
+ ]
167
+ });
168
+
169
+ registerCard(trend.build()); // layout card index 0
170
+ registerCard(source.build()); // source linkTo(0) targets trend
171
+ ```
172
+
114
173
  ### PageBuilder
115
174
 
116
175
  **布局单位**: