You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Power BI中按行主组总计计算子组占比并制作堆叠条形图?

解决方案:Power BI 分类3项目占行总计百分比的堆叠条形图

我完全懂你刚接触Power BI时的这种头疼——毕竟从Excel的单元格思维转过来,上下文筛选和度量值的逻辑确实容易卡壳。你试过8种方法都没成,肯定急坏了,咱们一步步来搞定这个堆叠条形图:

第一步:自动筛选最新月份的数据

先创建一个度量值来锁定最新月份,不用手动反复调整筛选器:

Latest Month = 
VAR MaxMonth = CALCULATE(MAX('你的数据表名'[月份]), ALL('你的数据表名'))
RETURN IF(SELECTEDVALUE('你的数据表名'[月份]) = MaxMonth, 1, 0)

创建好后,把这个度量值拖到页面级筛选器里,设置为「等于1」,报表就只会显示最新月份的数据了。

第二步:计算每个人员的行总计(绿色高亮值)

这是核心步骤,我们需要拿到每个人员所有分类下a+b的总和(也就是你说的绿色高亮总计)。这里用ALLEXCEPT来精准保留「人员」的上下文,同时忽略分类、项目(a/b)的筛选干扰:

人员行总计(绿色高亮) = 
CALCULATE(
    SUM('你的数据表名'[数值列]),  -- 替换成你存储a、b数值的实际列名
    ALLEXCEPT('你的数据表名', '你的数据表名'[人员]),
    '你的数据表名'[月份] = [Latest Month]
)

第三步:计算分类3中a、b的占比

分别创建两个度量值,计算a和b对应占人员行总计的百分比,用DIVIDE可以避免出现除以0的错误:

分类3 - a的百分比

分类3-a百分比 = 
VAR CurrentAValue = CALCULATE(
    SUM('你的数据表名'[数值列]),
    '你的数据表名'[分类] = "分类3",
    '你的数据表名'[项目] = "a",
    '你的数据表名'[月份] = [Latest Month]
)
VAR PersonTotal = [人员行总计(绿色高亮)]
RETURN IF(NOT ISBLANK(PersonTotal), DIVIDE(CurrentAValue, PersonTotal), 0)

分类3 - b的百分比

分类3-b百分比 = 
VAR CurrentBValue = CALCULATE(
    SUM('你的数据表名'[数值列]),
    '你的数据表名'[分类] = "分类3",
    '你的数据表名'[项目] = "b",
    '你的数据表名'[月份] = [Latest Month]
)
VAR PersonTotal = [人员行总计(绿色高亮)]
RETURN IF(NOT ISBLANK(PersonTotal), DIVIDE(CurrentBValue, PersonTotal), 0)

第四步:搭建堆叠条形图

  1. 从可视化面板拖入「堆叠条形图」
  2. 把字段列表里的**[人员]**拖到「Y轴」(如果想横向展示就拖到X轴,看你偏好)
  3. 把刚刚创建的**[分类3-a百分比][分类3-b百分比]**拖到「值」区域
  4. 点击轴的格式设置,把显示单位改成「百分比」,调整小数位数到你需要的精度
  5. 确认页面筛选器里的Latest Month已经设置为1,确保只显示最新月份数据

为啥之前的度量值没成功?

Excel是基于单元格的静态计算,但Power BI是上下文驱动的——你选的可视化字段、筛选器都会直接影响度量值的计算结果。之前的尝试大概率没精准控制上下文,要么没保留「人员」的筛选范围,要么没排除分类、项目的干扰,导致拿到的总计不是你要的绿色高亮值。ALLEXCEPT就是帮你精准控制哪些上下文要保留、哪些要忽略的关键工具。

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

火山引擎 最新活动