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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:35:12