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

Power BI制作帕累托图时无法引用DATATABLE计算累计值求助

错误原因

你收到报错的核心问题是SUMMARIZE函数的基表选择错误:你在SUMMARIZE第一个参数传入了ALLSELECTED(DI_Report),但DI_Report表本身不存在你自建查找表中的Code字段,因此系统无法识别该列,直接抛出错误。累计计算的维度是你用DATATABLE创建的查找表的Code字段,因此所有聚合逻辑的基表必须基于该查找表。

解决方案

我们可以直接基于你已有的[DI Codes Total]度量值,编写两个新度量值实现累计额与累计占比计算:

1. 累计值度量值

DI 编码累计值 = 
VAR CurrentRowTotal = [DI Codes Total]
// 提取当前筛选上下文下所有选中的DI编码及其对应统计值
VAR AllCodeWithTotal = 
    ADDCOLUMNS(
        ALLSELECTED('Table'[Code]),
        "@CalcTotal", [DI Codes Total]
    )
// 筛选出统计值大于等于当前行的所有编码,求和得到累计值
VAR CumulativeSum = 
    SUMX(
        FILTER(
            AllCodeWithTotal,
            [@CalcTotal] >= CurrentRowTotal
        ),
        [@CalcTotal]
    )
RETURN
CumulativeSum

2. 累计占比度量值

DI 编码累计占比 = 
// 计算所有选中编码的总统计值
VAR TotalOfAllCodes = CALCULATE([DI Codes Total], ALLSELECTED('Table'[Code]))
// 累计值除以总值得出占比,DIVIDE第三参数避免除以0报错
RETURN
DIVIDE([DI 编码累计值], TotalOfAllCodes, 0)

创建完成后,将两个度量值放入表格视觉对象即可得到你要的Excel同款效果。

实现原理

  1. 帕累托图的累计逻辑默认是按指标值从高到低排序累计,上述度量值通过[@CalcTotal] >= CurrentRowTotal的判断条件,自动实现了按统计值降序的累计规则,不需要额外对表格排序。
  2. ALLSELECTED('Table'[Code])的作用是保留页面切片器、筛选器对Code的筛选范围,只在用户选中的编码范围内做累计计算,不会超出筛选上下文。
  3. 如果你的场景需要按编码的字符顺序而非统计值大小排序累计,只需要把累计值度量值中FILTER的条件改为'Table'[Code] <= MAX('Table'[Code])即可。

优化建议

  1. 建议将你当前命名为Table的Code查找表重命名为DI_Code_List等具备业务含义的名称,避免后续开发过程中表名混淆。
  2. 如果DI_Report表的数据量较大,当前用FIND逐行匹配字符串的计算效率较低,你可以在Power Query编辑器中将DI Codes列按分隔符拆分、逆透视为一行对应一个DI编码的结构化表,后续统计和计算的效率会大幅提升,也不需要编写复杂的字符串匹配度量值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:36:01