按跨天小时区间(前一日6点至当日6点)汇总数值的DAX需求
跨天小时区间的DAX数值汇总解决方案
原始数据
| 日期 | 时间 | 数值 |
|---|---|---|
| 2022-11-17 | 15:21:00 | 1 |
| 2022-11-17 | 22:19:00 | 2 |
| 2022-11-18 | 00:44:00 | 2 |
| 2022-11-18 | 04:27:00 | 3 |
| 2022-11-18 | 13:21:00 | 2 |
| 2022-11-18 | 23:55:00 | 1 |
| 2022-11-19 | 09:01:00 | 4 |
需求与预期结果
需要按前一日6:00至当日6:00的跨天区间汇总数值,每个统计日期对应该区间的总和,预期结果如下:
| 日期(6-6) | 数值汇总 |
|---|---|
| 2022-11-17 | 8 |
| 2022-11-18 | 3 |
| 2022-11-19 | 4 |
现有实现(仅支持当日区间)
当前仅能实现当日内小时区间的求和,代码如下:
Usage = CALCULATE( SUM(Table[Value]), TIME( HOUR(Table[Hour]), MINUTE(Table[Hour]), SECOND(Table[Hour]) ) >= TIMEVALUE("02:00:00"), TIME( HOUR(Table[Hour]), MINUTE(Table[Hour]), SECOND(Table[Hour]) ) <= TIMEVALUE("14:00:00") )
跨天区间的DAX解决方案
方法1:添加计算列标记归属日期
先给数据表新增一个计算列,明确每条记录对应的统计日期(即跨天区间所属的日期):
统计日期(6-6) = VAR CurrentTime = TIMEVALUE(Table[时间]) RETURN IF( CurrentTime >= TIMEVALUE("06:00:00"), Table[日期], Table[日期] - 1 )
之后创建基础汇总度量值:
数值汇总 = SUM(Table[数值])
将「统计日期(6-6)」和「数值汇总」拖入可视化组件即可得到预期结果。
方法2:直接在度量值中实现(无需计算列)
如果不想新增计算列,可直接在度量值中通过筛选逻辑完成跨天汇总(建议搭配独立日期表使用,避免上下文过滤异常):
跨天数值汇总 = VAR TargetDate = MAX('日期表'[日期]) RETURN CALCULATE( SUM(Table[数值]), -- 筛选规则:目标日期当天6点后的数据,加上目标日期次日6点前的数据 (Table[日期] = TargetDate && TIMEVALUE(Table[时间]) >= TIMEVALUE("06:00:00")) || (Table[日期] = TargetDate + 1 && TIMEVALUE(Table[时间]) < TIMEVALUE("06:00:00")) )
验证说明
- 统计日期2022-11-17:包含2022-11-17 6:00后的数据(1+2),加上2022-11-18 6:00前的数据(2+3),总和为8,符合预期。
- 统计日期2022-11-18:包含2022-11-18 6:00后的数据(2+1),次日无符合条件的数据,总和为3,符合预期。
- 统计日期2022-11-19:包含2022-11-19 6:00后的数据(4),次日无符合条件的数据,总和为4,符合预期。
内容的提问来源于stack exchange,提问作者Protektor
相关产品推荐
相关产品推荐

