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

如何在Power BI的Vega-Lite(Deneb)中实现柱内抖动散点图?

Power BI Deneb(Vega-Lite)柱形/条形图内嵌抖动散点图实现方案

核心思路

要实现每个售出商品在对应柱的营收范围内随机分布的散点,需关联明细数据与品类汇总数据,通过数据转换计算散点坐标偏移;同时基于营收排名实现畅销品类的高亮。

步骤1:数据关联与散点坐标计算

利用Vega-Lite的transform完成明细数据与汇总数据的关联,为每个商品计算散点的抖动位置:

  • 通过lookup将明细数据与品类汇总表关联,获取对应品类的总营收
  • 计算散点的Y轴坐标:在0到品类总营收范围内随机取值(random() * datum.total_revenue)
  • 计算散点的X轴抖动偏移:在柱形宽度范围内左右随机偏移(避免超出柱形)

示例transform配置:

"transform": [
  {
    "lookup": "Category",
    "from": {
      "data": {"name": "summary"},
      "key": "Category",
      "fields": ["TotalRevenue"]
    },
    "as": ["total_revenue"]
  },
  {
    "calculate": "datum.Category + (random() - 0.5) * 0.7",
    "as": "scatter_x"
  },
  {
    "calculate": "random() * datum.total_revenue",
    "as": "scatter_y"
  },
  // 计算营收排名,用于高亮畅销品类
  {
    "window": [{"op": "rank", "field": "total_revenue", "as": "revenue_rank"}],
    "sort": [{"field": "total_revenue", "order": "descending"}]
  }
]

步骤2:图层组合(柱形+散点)

使用Vega-Lite的layer将柱形图与散点图叠加:

  • 底层为品类汇总柱形图,设置基础样式
  • 上层为抖动散点图,使用计算出的scatter_x和scatter_y作为坐标

步骤3:畅销品类高亮

通过condition编码实现柱形、散点及轴标签的高亮:

  • 柱形与散点:判断revenue_rank === 1时使用高亮色
  • X轴标签:同样通过condition为畅销品类设置加粗/变色样式

完整示例代码

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {"name": "dataset"},
  "datasets": {
    "summary": [
      // 替换为你的汇总数据,或直接关联Power BI的汇总表
      {"Category": "品类A", "TotalRevenue": 15000},
      {"Category": "品类B", "TotalRevenue": 22000},
      {"Category": "品类C", "TotalRevenue": 18000}
    ]
  },
  "transform": [
    {
      "lookup": "Category",
      "from": {
        "data": {"name": "summary"},
        "key": "Category",
        "fields": ["TotalRevenue"]
      },
      "as": ["total_revenue"]
    },
    {
      "calculate": "datum.Category + (random() - 0.5) * 0.7",
      "as": "scatter_x"
    },
    {
      "calculate": "random() * datum.total_revenue",
      "as": "scatter_y"
    },
    {
      "window": [{"op": "rank", "field": "total_revenue", "as": "revenue_rank"}],
      "sort": [{"field": "total_revenue", "order": "descending"}]
    }
  ],
  "layer": [
    // 柱形图层
    {
      "mark": {"type": "bar", "width": 0.8},
      "encoding": {
        "x": {"field": "Category", "type": "nominal"},
        "y": {"field": "total_revenue", "type": "quantitative"},
        "color": {
          "condition": {"test": "datum.revenue_rank === 1", "value": "#e63946"},
          "value": "#a8dadc"
        }
      }
    },
    // 散点图层
    {
      "mark": {"type": "point", "size": 30, "opacity": 0.6},
      "encoding": {
        "x": {"field": "scatter_x", "type": "nominal", "axis": null},
        "y": {"field": "scatter_y", "type": "quantitative", "axis": null},
        "color": {
          "condition": {"test": "datum.revenue_rank === 1", "value": "#1d3557"},
          "value": "#457b9d"
        }
      }
    }
  ],
  "config": {
    "axis": {
      "x": {
        "labelFontWeight": {
          "condition": {"test": "datum.revenue_rank === 1", "value": "bold"},
          "value": "normal"
        },
        "labelColor": {
          "condition": {"test": "datum.revenue_rank === 1", "value": "#e63946"},
          "value": "#333"
        }
      }
    }
  }
}

关键说明

  • 若使用Power Query转换的单条商品行数据,直接将dataset关联为该数据源即可
  • 抖动范围(0.7)可根据柱宽调整,避免散点超出柱形边界
  • 随机数基于每个明细行计算,确保每个商品对应唯一散点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:35:32