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
相关产品推荐
相关产品推荐

