Vega-Lite基于双数据集实现同日期维度堆叠柱状图(Power BI Deneb适用)
Vega-Lite 多数据集同月份堆叠实现方案(无需合并为单数据集)
核心原理
Vega-Lite 原生支持多数据集独立声明,只需为不同数据集配置统一的维度编码规则并开启堆叠属性,引擎会自动完成同维度数值的堆叠计算,无需提前合并数据集,完全兼容Power BI的Deneb插件。
具体实现步骤
- 第一步:在 Deneb 中直接导入两个原始数据集,分别命名为
历史数据(今日前统计值)和预测数据(今日后统计值),无需做Power Query层面的字段拼接或合并操作。 - 第二步:编写Vega-Lite Spec,通过layer分别加载两个数据集,配置统一的月份维度编码和堆叠参数,示例代码如下:
{ "$schema": "https://vega.github.io/schema/vega-lite/v5.json", "layer": [ // 第一层:历史数据 { "data": {"name": "历史数据"}, "mark": "bar", "encoding": { "x": { "field": "日期", "type": "temporal", "timeUnit": "yearmonth", "title": "月份" }, "y": { "field": "统计值", "type": "quantitative", "stack": true, "title": "数值" }, "color": { "datum": "历史值", "scale": {"range": ["#2563eb", "#f97316"]}, "legend": {"title": "数据类型"} } } }, // 第二层:预测数据 { "data": {"name": "预测数据"}, "mark": "bar", "encoding": { "x": { "field": "日期", "type": "temporal", "timeUnit": "yearmonth" }, "y": { "field": "统计值", "type": "quantitative", "stack": true }, "color": { "datum": "预测值" } } } ] }
- 第三步:特殊字段适配,如果两个数据集的字段名不一致,可以通过transform配置做别名转换,无需修改原始数据:
示例:预测数据的数值字段名为预估数值时,在预测数据的layer中添加以下配置即可:"transform": [{"calculate": "datum.预估数值", "as": "统计值"}]
关键配置说明
- 两个layer的x轴必须使用相同的
timeUnit做月份聚合,保证同月份数据可以被识别为同一维度 - y轴显式配置
stack: true,开启跨层堆叠能力 - layer的先后顺序对应堆叠的上下层顺序,先声明的数据集会展示在堆叠下层
内容的提问来源于stack exchange,提问作者SmashMirrorCardboardFace
相关产品推荐
相关产品推荐

