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

Power BI:卡片视觉显示百分比度量及DAX行迭代计算方法

问题背景

示例数据:

+----------+------------+----------+-----------+
| PersonID |    Date    |   Booked |    Picked |
+----------+------------+----------+-----------+
|        1 | 1 Jan 2023 |      100 |       100 |
|        2 | 1 Jan 2023 |       40 |        30 |
|        3 | 1 Jan 2023 |       20 |        40 |
|        1 | 2 Jan 2023 |       50 |        80 |
|        2 | 2 Jan 2023 |       70 |        70 |
|        3 | 2 Jan 2023 |       60 |        40 |
+----------+------------+----------+-----------+

创建的度量值(注:原公式中Called[Picked]应为笔误,修正为Calls[Picked]):

Performance % = DIVIDE(IF(Calls[Picked]>Calls[Booked],Calls[Booked],Calls[Picked]),Calls[Booked])

该度量值已设为百分比格式,在表格视觉对象中可正常显示,但添加到卡片视觉对象时,系统强制要求选择求和/最小值/最大值等聚合方式。


问题1:如何在卡片视觉对象中显示该度量值?

卡片视觉对象需要聚合后的单一值,当前度量值直接引用列(逐行逻辑),未做聚合,因此系统会要求选择聚合方式。可根据业务需求修改度量值,返回聚合结果:

方案A:计算整体绩效(总合规完成量/总预订量)

若要展示整体绩效,先计算所有行中Picked不超过Booked的总量,再除以总预订量:

Performance % = 
VAR TotalBooked = SUM(Calls[Booked])
VAR TotalValidPicked = SUMX(Calls, MIN(Calls[Picked], Calls[Booked]))
RETURN DIVIDE(TotalValidPicked, TotalBooked)

修改后卡片可直接使用该度量值,无需额外聚合。

方案B:计算逐行百分比的平均值

若要展示所有行百分比的平均值,用AVERAGEX迭代计算后取平均:

Performance % = 
AVERAGEX(
    Calls,
    DIVIDE(MIN(Calls[Picked], Calls[Booked]), Calls[Booked])
)

该度量值会自动完成逐行计算+聚合,卡片可直接调用。


问题2:如何逐行计算百分比值——DAX中没有DIVIDEX函数,该如何实现?

无需DIVIDEX,可通过两种方式实现逐行计算:

方法1:创建计算列(存储逐行结果)

直接在表中添加计算列,逐行生成百分比:

Performance % Column = 
DIVIDE(MIN(Calls[Picked], Calls[Booked]), Calls[Booked])

计算列结果会永久存储在表中,后续表格、卡片(按需选择聚合方式)均可使用。

方法2:用迭代函数实现逐行计算后聚合

如果需要在度量值中先逐行计算再聚合,可使用SUMX/MAXX/MINX等迭代函数。例如计算所有行百分比的总和:

Total Performance % = 
SUMX(
    Calls,
    DIVIDE(MIN(Calls[Picked], Calls[Booked]), Calls[Booked])
)

SUMX会遍历每一行计算百分比,再将结果求和;替换成MAXX可取最大百分比,MINX可取最小百分比,按需选择即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:25:57