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

