如何通过关联事实表获取产品的最后一次销售金额(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
相关产品推荐
相关产品推荐

