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

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)

逻辑说明

  1. totalBayDays变量通过SUMX遍历每个选中的campaign,在每个campaign的独立上下文里计算[newAverageBays] × [newRangedDays],并自动累加所有乘积,最终得到你需要的9992。
  2. 单活动场景下,totalBayDays就是当前活动的机位×天数,除以总天数后自然等于机位数值,符合需求。
  3. 多活动场景下,totalBayDays是所有活动的机位×天数之和,除以总天数后得到正确的加权平均值114.85。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:47:16