You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI Deneb中如何用Vega dataset字段填充Sankey图input数据

解决Power BI Deneb中Vega Alluvial Sankey图引用数据集字段的问题

核心误区纠正

你之前用datum['Measure1']无效的原因是:datum是Vega数据流转过程中单条数据的引用变量,不能直接在数据源输入(input.values)里使用。Deneb会把Power BI筛选后的数据集暴露为全局信号dataset,你需要直接用这个信号导入数据,再通过Vega的转换逻辑生成Sankey图需要的节点/链接结构。

具体实现步骤

  1. 导入Power BI数据集
    在Vega的data区块中,直接通过{"signal": "dataset"}引用Power BI的筛选后数据,不需要手动编写values:
"data": [
  {
    "name": "pb_data",
    "values": {"signal": "dataset"} // 直接拉取Power BI的数据集
  }
]

确保你已经在Deneb的字段面板中添加了Measure1、Measure2、Measure3以及需要的度量值(比如流量值),这样dataset里才会包含这些字段。

  1. 转换数据为Sankey所需结构
    Alluvial Sankey图需要两个核心数据结构:
  • 节点列表:包含所有层级的唯一值(Measure1/2/3的所有不同值)
  • 链接列表:包含层级间的关联关系和流量值

用Vega的transform完成转换,示例如下:

"data": [
  {
    "name": "pb_data",
    "values": {"signal": "dataset"},
    // 生成节点列表:合并三个Measure的所有值并去重
    "transform": [
      {"type": "fold", "fields": ["Measure1", "Measure2", "Measure3"], "as": ["layer", "node_name"]},
      {"type": "aggregate", "groupby": ["node_name"]},
      {"type": "sequence", "start": 0, "stop": {"signal": "length(data('pb_data'))"}, "as": "node_id"},
      {"name": "sankey_nodes"}
    ]
  },
  {
    "name": "sankey_links",
    "source": "pb_data",
    // 生成Measure1→Measure2的链接
    "transform": [
      {"type": "lookup", "from": "sankey_nodes", "key": "node_name", "fields": ["Measure1"], "as": ["source_node"]},
      {"type": "lookup", "from": "sankey_nodes", "key": "node_name", "fields": ["Measure2"], "as": ["target_node"]},
      {"type": "aggregate", "groupby": ["source_node.node_id", "target_node.node_id"], "ops": ["sum"], "fields": ["Your_Metric"], "as": ["flow_value"]},
      // 追加Measure2→Measure3的链接
      {"type": "union", "tables": [
        {"data": "pb_data", "transform": [
          {"type": "lookup", "from": "sankey_nodes", "key": "node_name", "fields": ["Measure2"], "as": ["source_node"]},
          {"type": "lookup", "from": "sankey_nodes", "key": "node_name", "fields": ["Measure3"], "as": ["target_node"]},
          {"type": "aggregate", "groupby": ["source_node.node_id", "target_node.node_id"], "ops": ["sum"], "fields": ["Your_Metric"], "as": ["flow_value"]}
        ]}
      ]}
    ]
  }
]

替换Your_Metric为你用来表示流量的度量值(比如计数、销售额等)。

  1. 配置Sankey图的Mark和Encoding
    用转换后的nodes和links数据渲染图表:
"mark": {
  "type": "sankey",
  "node": {"fill": "#636efa", "stroke": "#fff"},
  "link": {"fillOpacity": 0.4}
},
"encoding": {
  "source": {"field": "source_node.node_id", "type": "ordinal"},
  "target": {"field": "target_node.node_id", "type": "ordinal"},
  "value": {"field": "flow_value", "type": "quantitative"}
},
"config": {
  "sankey": {"nodeWidth": 20, "nodePadding": 10}
}

关键注意事项

  • 确保Power BI的筛选上下文已经生效:Deneb的dataset会自动继承当前页面/视觉对象的筛选器,不需要额外处理。
  • 如果Measure1/2/3是度量值而非维度列,要注意其返回的是聚合后的值,可能需要调整转换逻辑。
  • 若节点名称重复(比如不同层级有相同值),可以在fold步骤中给节点名称加上层级前缀(比如Measure1_+value)避免冲突。

内容的提问来源于stack exchange,提问作者mmallya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:20:20