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

如何通过关联事实表获取产品的最后一次销售金额(DAX实现)

解决间接关联表下产品最后一次销售金额的DAX实现

现有_product表与_sale表通过中间事实表间接关联,要实现列出所有产品及其最后一次销售金额的需求,可通过以下DAX度量值完成:

方法1:使用RELATEDTABLE + TOPN + MAXX(推荐)

LastSaleAmount = 
MAXX(
    TOPN(1, RELATEDTABLE(_sale), _sale[SaleDate], DESC),
    _sale[Amount]
)
  • RELATEDTABLE(_sale):借助模型的间接关联关系,自动获取当前产品对应的所有销售记录
  • TOPN(1, ..., _sale[SaleDate], DESC):从这些记录中筛选出销售日期最新的一条
  • MAXX:提取这条最新记录的销售金额

方法2:分步计算日期与金额

LastSaleAmount = 
-- 获取当前产品的最后销售日期
VAR CurrentLastDate = CALCULATE(MAX(_sale[SaleDate]))
-- 根据最后日期筛选并取对应金额
VAR LastAmount = CALCULATE(MAX(_sale[Amount]), _sale[SaleDate] = CurrentLastDate)
RETURN LastAmount

这种写法逻辑更直观,CALCULATE会自动通过模型的间接关联传递产品的筛选上下文,确保获取的是当前产品对应的销售数据。

处理无销售记录的产品

如果需要给从未销售过的产品返回0而非空白值,可修改度量值:

LastSaleAmount = 
VAR LastAmount = 
    MAXX(
        TOPN(1, RELATEDTABLE(_sale), _sale[SaleDate], DESC),
        _sale[Amount]
    )
RETURN IF(ISBLANK(LastAmount), 0, LastAmount)

原有度量值的问题

你之前直接使用FILTER(_sale)的写法,没有利用DAX的筛选上下文传递机制,在间接关联的模型中无法自动关联到当前产品的销售记录,因此无法得到正确结果。

你的EVALUATE查询无需修改,使用上述正确的度量值即可得到预期结果:

EVALUATE
SUMMARIZECOLUMNS (
    '_product'[ProductID],
    '_product'[ProductName],
    "LastSaleAmount", [LastSaleAmount]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:13:13