如何用DAX计算日期表中前一个工作日的收款总额?
问题描述
我有一张包含日期列和金额列的收款表:
Thedate CashCollected 2039-12-28 100 2039-12-27 200 2039-12-26 300 2039-12-25 400 2039-12-24 500 2039-12-23 600 2039-12-22 700 2039-12-21 800
另有一张日期表,其中已根据特定条件计算出每个日期对应的前一个工作日:
TheDate PrevItWorkDay 2039-12-28 2039-12-27 2039-12-27 2039-12-23 2039-12-26 2039-12-23 2039-12-25 2039-12-23 2039-12-24 2039-12-23 2039-12-23 2039-12-22 2039-12-22 2039-12-21 2039-12-21 2039-12-20
需要编写一个DAX度量值,计算日期表中各日期对应前一个工作日的收款总和,预期结果如下:
TheDate PrevItWorkDay_收款总和 2039-12-28 200 2039-12-27 600 2039-12-26 600 2039-12-25 600 2039-12-24 600 2039-12-23 700 2039-12-22 800 2039-12-21
解决方案
可以通过以下几种DAX写法实现需求,核心逻辑都是获取当前行的前一个工作日日期,再筛选收款表对应日期的金额求和:
写法一:基础CALCULATE筛选
PrevWorkDay_CashSum = VAR CurrentPrevDay = SELECTEDVALUE('日期表'[PrevItWorkDay]) RETURN CALCULATE( SUM('收款表'[CashCollected]), '收款表'[Thedate] = CurrentPrevDay )
写法二:SUMX遍历筛选
PrevWorkDay_CashSum = SUMX( FILTER( '收款表', '收款表'[Thedate] = SELECTEDVALUE('日期表'[PrevItWorkDay]) ), '收款表'[CashCollected] )
关联表存在默认日期关系时的调整写法
如果日期表和收款表之间已经建立了直接的日期关联,需要清除默认上下文筛选,避免干扰结果:
PrevWorkDay_CashSum = VAR CurrentPrevDay = SELECTEDVALUE('日期表'[PrevItWorkDay]) RETURN CALCULATE( SUM('收款表'[CashCollected]), ALL('收款表'), '收款表'[Thedate] = CurrentPrevDay )
说明
- 当
PrevItWorkDay对应的日期在收款表中无记录时(如2039-12-21对应的2039-12-20),度量值会返回空值,与预期结果一致。 - 使用时需替换代码中的
'日期表'和'收款表'为实际表名。
内容的提问来源于stack exchange,提问作者AndreA
相关产品推荐
相关产品推荐

