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

基于公司专属日历的DAX YTD同期上年及MTD计算求助

基于公司自定义日历的DAX YTD/MTD计算方案

首先确认核心前提:你的「Date Invoice」维度表需要包含公司自定义的会计周期字段(如果没有,需先通过DAX或ETL生成),比如:

  • 公司会计年:标记每个日期所属的公司会计年度(可能非自然年)
  • 公司会计月序号:数字格式(如202406),唯一标识公司定义的会计月,方便排序和跨年度比较
  • 公司会计月起始日期/公司会计月结束日期:每个公司会计月的起止范围
  • 公司会计年度起始日期:公司会计年的起始日

以下是具体DAX计算逻辑:

1. 公司会计月MTD(月初至今)

公司MTD销售额 = 
VAR 当前会计月 = SELECTEDVALUE('Date Invoice'[公司会计月序号])
VAR 当前最大发票日 = MAX('Sales Order and Invoice'[Invoice Date])
RETURN
CALCULATE(
    SUM('Sales Order and Invoice'[销售额]),
    FILTER(
        ALL('Date Invoice'),
        'Date Invoice'[公司会计月序号] = 当前会计月
            && 'Date Invoice'[日期] <= 当前最大发票日
    )
)

逻辑说明:锁定当前筛选的公司会计月,筛选该会计月内所有早于/等于当前最大发票日期的记录,求和销售额。若需支持会计月切片器多选,可将SELECTEDVALUE替换为MAX或结合ALLSELECTED调整。

2. 公司会计年YTD(年初至今)

公司YTD销售额 = 
VAR 当前会计年 = SELECTEDVALUE('Date Invoice'[公司会计年])
VAR 当前最大发票日 = MAX('Sales Order and Invoice'[Invoice Date])
RETURN
CALCULATE(
    SUM('Sales Order and Invoice'[销售额]),
    FILTER(
        ALL('Date Invoice'),
        'Date Invoice'[公司会计年] = 当前会计年
            && 'Date Invoice'[日期] <= 当前最大发票日
    )
)

逻辑说明:锁定当前公司会计年,筛选该年度内所有早于/等于当前最大发票日期的记录求和,适配非自然年的会计周期规则。

3. 公司会计年上年同期YTD

公司上年同期YTD销售额 = 
VAR 当前会计年 = SELECTEDVALUE('Date Invoice'[公司会计年])
VAR 上年会计年 = 当前会计年 - 1
VAR 当前会计月序号 = SELECTEDVALUE('Date Invoice'[公司会计月序号])
VAR 上年对应会计月序号 = 当前会计月序号 - 100 // 如202406 → 202306
VAR 上年对应截止日 = 
    CALCULATE(
        MAX('Date Invoice'[日期]),
        FILTER(
            ALL('Date Invoice'),
            'Date Invoice'[公司会计年] = 上年会计年
                && 'Date Invoice'[公司会计月序号] = 上年对应会计月序号
                && 'Date Invoice'[日期] <= DATE(YEAR(MAX('Sales Order and Invoice'[Invoice Date])), MONTH(MAX('Sales Order and Invoice'[Invoice Date])), DAY(MAX('Sales Order and Invoice'[Invoice Date])))
        )
    )
RETURN
CALCULATE(
    SUM('Sales Order and Invoice'[销售额]),
    FILTER(
        ALL('Date Invoice'),
        'Date Invoice'[公司会计年] = 上年会计年
            && 'Date Invoice'[日期] <= 上年对应截止日
    )
)

逻辑说明:先匹配上年会计年及对应会计月,再找到上年同期对应当前发票日期的截止点,最后筛选上年会计年中早于该截止点的记录求和,完全贴合公司自定义的日期归属规则。

关键补充

  • 确保「Sales Order and Invoice」与「Date Invoice」通过原始发票日期建立一对一/一对多关系,让事实表能正确关联到维度表的公司会计字段。
  • 若维度表缺少自定义会计字段,可通过DAX规则生成(示例):
公司会计月序号 = 
SWITCH(
    TRUE(),
    // 示例:7月1-2日归属6月
    'Date Invoice'[日期] >= DATE(2024,7,1) && 'Date Invoice'[日期] <= DATE(2024,7,2), 202406,
    // 示例:7月31日归属8月
    'Date Invoice'[日期] = DATE(2024,7,31), 202408,
    // 其他特殊规则...
    // 默认规则:自然年月
    YEAR('Date Invoice'[日期])*100 + MONTH('Date Invoice'[日期])
)

建议优先在ETL阶段处理这些日期归属规则,减少DAX计算负担。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:13:10