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

如何在PowerBI中通过DAX编程为新表添加列?

嘿,我懂你那种习惯了用循环处理数据的感觉,但DAX是函数式编程语言,它的思路不是逐行写循环,而是基于列或表的聚合、迭代操作来实现计算。咱们不用写循环,直接用DAX的内置函数就能搞定你要的列,下面给你几个常见场景的示例,你可以根据自己的实际需求调整:

1. 计算单订单总金额(数量×单价)

这是最基础的计算,直接添加计算列就行,DAX会自动逐行执行公式:

Total Amount = '原材料订单'[Amount] * '原材料订单'[Price]
2. 按产品+月份计算累计订单量

如果想按月份顺序,算出每个产品到当前月份为止的累计采购数量,咱们可以用CALCULATE搭配FILTER来实现(前提是你得把Month列转成可排序的日期格式,比如把Jan 18转换成2018-01-01,假设这个日期列叫Order Date):

累计采购量 = 
CALCULATE(
    SUM('原材料订单'[Amount]),
    FILTER(
        ALL('原材料订单'),
        '原材料订单'[Name] = EARLIER('原材料订单'[Name]) &&
        '原材料订单'[Order Date] <= EARLIER('原材料订单'[Order Date])
    )
)

这里的EARLIER是用来引用当前行的产品名称和日期,FILTER会筛选出同一产品且日期早于等于当前行的所有订单,再用SUM求和,这就替代了循环里的累计逻辑。

3. 计算每个产品每月的平均采购单价

要是想统计同一产品在同一个月里的平均单价,用AVERAGEX这个迭代函数就很合适:

月平均单价 = 
AVERAGEX(
    FILTER(
        '原材料订单',
        '原材料订单'[Name] = EARLIER('原材料订单'[Name]) &&
        '原材料订单'[Month] = EARLIER('原材料订单'[Month])
    ),
    '原材料订单'[Price]
)

AVERAGEX会自动遍历筛选出来的同产品同月的所有行,计算它们的单价平均值,效果和你写循环遍历计算是一样的。

4. 对比同产品上月的价格差异

如果想知道当前订单和同产品上月订单的价格差,可以用变量+LOOKUPVALUE来实现:

上月价格差异 = 
VAR 当前产品 = '原材料订单'[Name]
VAR 当前月份日期 = '原材料订单'[Order Date]
VAR 上月日期 = EOMONTH(当前月份日期, -1)
VAR 上月单价 = 
    LOOKUPVALUE(
        '原材料订单'[Price],
        '原材料订单'[Name], 当前产品,
        '原材料订单'[Month], FORMAT(上月日期, "mmm yy")
    )
RETURN
    '原材料订单'[Price] - 上月单价

这里用变量分步处理逻辑,先拿到当前的产品和日期,找到上月的日期,再匹配出上月的单价,最后计算差值,DAX会自动对每一行执行这套逻辑。

总的来说,DAX的核心是基于上下文的计算,你不用操心怎么遍历每一行,只需要告诉DAX你要筛选的范围和计算规则,它就会自动处理所有数据。如果你的需求是其他特定的列计算,可以把具体想要的功能说出来,我再帮你调整公式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:31