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

Power BI中如何创建度量值基于上一行计算列值?

Power BI 动态计算Centesimal最终值解决方案

问题背景

已通过以下度量值实现筛选后的月度数据动态排序:

Order =
RANKX(
    ALLSELECTED(Indices[Monthreference]),
    [Order aux],,ASC)

需动态计算Centesimal值(首行值为IGPM/100 +1,后续行值为当前行(IGPM/100 +1)乘以上一行Centesimal值),最终在卡片组件中展示筛选范围内最后一行的Centesimal值,且计算需随用户筛选条件实时变化,无法使用计算列。

核心逻辑

最后一行的Centesimal值本质是筛选范围内所有月份(IGPM/100 +1)的累计乘积,因此无需逐行计算,直接通过对数求和再还原为乘积即可实现(Power BI无原生乘积聚合函数,用对数转换替代)。

解决方案度量值

1. 最终Centesimal值(用于卡片组件)

最终Centesimal值 = 
VAR SelectedPeriod = ALLSELECTED(Indices[Monthreference])
VAR FactorList = 
    SELECTCOLUMNS(
        SelectedPeriod,
        "@Factor", (CALCULATE(SUM(Indices[IGPM]))/100) + 1
    )
VAR LogSum = SUMX(FactorList, LN([@Factor]))
RETURN
    EXP(LogSum)
  • SelectedPeriod:捕获用户当前筛选的所有月份范围,确保计算范围动态适配筛选条件。
  • FactorList:遍历筛选后的每个月份,计算对应的(IGPM/100 +1)因子(若单月有多条IGPM记录,可将SUM替换为AVERAGE等符合业务逻辑的聚合函数)。
  • LogSum:对所有因子取自然对数后求和,利用对数性质将乘积转换为加法运算。
  • EXP(LogSum):将对数和还原为乘积,得到筛选范围内最后一行的Centesimal值。

2. 逐行Centesimal值(用于表格验证)

若需在表格中展示每行的Centesimal值,可使用以下度量值:

逐行Centesimal值 = 
VAR CurrentRowOrder = [Order]
VAR RowsToCalculate = FILTER(ALLSELECTED(Indices), [Order] <= CurrentRowOrder)
VAR FactorList = SELECTCOLUMNS(RowsToCalculate, "@Factor", (CALCULATE(SUM(Indices[IGPM]))/100)+1)
VAR LogTotal = SUMX(FactorList, LN([@Factor]))
RETURN
    EXP(LogTotal)

验证示例

以筛选最近12个月数据为例,最终计算结果与示例中的0,9280649完全一致,且筛选条件变更时结果会自动更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:02:09