Power BI:如何在变量中存储多行计算结果并实现加权平均
问题描述
假设有一张以campaign(营销活动)作为切片器的表格,需求如下:
- 单活动场景:选择
campaign 1时,计算逻辑为(总机位115 × 总天数30) ÷ 总天数,结果应为115。 - 多活动场景:选择全部三个营销活动时,需逐行计算「机位×天数」,将所有乘积求和后除以总天数,得到加权平均值114.85(而非机位的简单平均值114.83)。
当前使用的DAX代码:
AvgBays v3 = VAR bayxDays = [newAverageBays] * [newRangedDays] VAR totalDays = SUMX(VALUES('Overview Table'[campaign]), [newRangedDays]) RETURN COALESCE(CALCULATE ( DIVIDE( SUMX(VALUES('Overview Table'[campaign]), bayxDays), totalDays ), REMOVEFILTERS ('Overview Table'[No Dimension] ) ),0)
目前已通过SUMX获取总天数并存入变量,但存在疑问:当选择多个营销活动时,如何逐行计算「机位×天数」并将这些乘积的总和存入变量,最终得到乘积总和9992?
解决方案
问题出在bayxDays变量的定义——它是在外部上下文计算的,没有绑定每个campaign的逐行上下文,导致SUMX调用时无法正确获取每行的机位和天数乘积。
你可以直接在SUMX内部逐行计算乘积并累加,调整后的代码如下:
AvgBays v3 = VAR totalDays = SUMX(VALUES('Overview Table'[campaign]), [newRangedDays]) VAR totalBayDays = SUMX(VALUES('Overview Table'[campaign]), [newAverageBays] * [newRangedDays]) RETURN COALESCE(CALCULATE ( DIVIDE(totalBayDays, totalDays), REMOVEFILTERS ('Overview Table'[No Dimension] ) ), 0)
逻辑说明
totalBayDays变量通过SUMX遍历每个选中的campaign,在每个campaign的独立上下文里计算[newAverageBays] × [newRangedDays],并自动累加所有乘积,最终得到你需要的9992。- 单活动场景下,
totalBayDays就是当前活动的机位×天数,除以总天数后自然等于机位数值,符合需求。 - 多活动场景下,
totalBayDays是所有活动的机位×天数之和,除以总天数后得到正确的加权平均值114.85。
内容的提问来源于stack exchange,提问作者jcoke
相关产品推荐
相关产品推荐

