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

如何使用DAX按周一至周日的周维度计算每周Quantity最大值

需求说明

现有一张存储多年业务数据的表,包含Quantity、Date、Time三个字段,需要基于Date列按自然周(周一为周起始、周日为周结束)统计每周的Quantity最大值。
示例数据如下,其中2022-06-07(周一)至2022-06-12(周日)所在周的最大Quantity值为12:

QuantityDateTime
12022-06-0704:39:57.090
22022-06-0704:39:58.850
32022-06-0804:37:35.900
42022-06-0804:37:37.247
52022-06-0904:37:56.833
62022-06-0904:37:58.190
72022-06-1004:37:34.757
82022-06-1004:37:36.103
92022-06-1104:38:18.733
102022-06-1104:38:20.100
112022-06-1204:38:30.377
122022-06-1204:38:31.833
132022-06-1304:38:30.377
142022-06-1404:38:31.833
问题原因

原有DAX代码的筛选逻辑仅保留了表中最大日期对应的行,没有按周划定日期范围,因此无法实现按周统计最大值的需求,原错误代码如下:

CALCULATE(
    MAX( 'stock_xml'[Quantity] ),           
    FILTER( 'stock_xml',
        'stock_xml'[Date] = MAX( 'stock_xml'[Date] )
    )
)
RETURN 
    Stock
修正方案

核心逻辑是先按「周一为周起始」的规则,给每个日期匹配所属周的时间范围,再在周范围内计算Quantity的最大值,根据使用场景分两种实现方式:

  • 方式1:添加计算列(适合直接在表里固定周维度统计值)
    首先新增一列计算每行数据所属周的周一日期,作为周分组的唯一标识:

    Week Start = 
    VAR current_date = 'stock_xml'[Date]
    // WEEKDAY第二参数传2时,周一返回1、周日返回7,完全匹配周起始规则
    VAR weekday_offset = WEEKDAY(current_date, 2)
    RETURN
    current_date - weekday_offset + 1
    

    再新增一列,按周分组计算每组的最大Quantity:

    Weekly Max Quantity = 
    CALCULATE(
        MAX('stock_xml'[Quantity]),
        ALLEXCEPT('stock_xml', 'stock_xml'[Week Start])
    )
    
  • 方式2:编写度量值(适合在可视化报表中配合日期维度动态统计)
    直接在度量值中动态识别当前上下文所属周的日期范围,计算范围内最大值:

    Weekly Max Quantity = 
    VAR min_date_in_context = MIN('stock_xml'[Date])
    VAR week_start = min_date_in_context - WEEKDAY(min_date_in_context, 2) + 1
    VAR week_end = week_start + 6
    RETURN
    CALCULATE(
        MAX('stock_xml'[Quantity]),
        DATESBETWEEN('stock_xml'[Date], week_start, week_end)
    )
    

关键注意点:WEEKDAY函数的第二参数必须传2,才能保证周一为一周的第一天,不需要额外做日期偏移修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:12:18