如何在DAX中获取财年始于5月的各季度最后日期
DAX中查找季度最后日期的两种场景解决方案
问题描述
- 问题1:如何在DAX中查找自然季度的最后日期?
- 问题2:当财年从5月开始时,如何在DAX中查找每个财季的最后日期?
预期结果
- 2024年1月26日 星期五
- 2024年4月26日 星期五
示例数据表
| 财年(FiscalYear) | 季度(Quarter) | 月份(month) | 财年标识(fy) | 周(wk) | 金额(amount) | 预期结果(expected answer) |
|---|---|---|---|---|---|---|
| fy24 | Q3 | 一月 | fy24 | WK38 | 60 | |
| fy24 | Q3 | 一月 | fy24 | WK39 | 61 | 61 |
| fy24 | Q4 | 二月 | fy24 | WK40 | 63 | |
| fy24 | Q4 | 二月 | fy24 | WK41 | 66 | |
| fy24 | Q4 | 二月 | fy24 | WK42 | 66 | |
| fy24 | Q4 | 二月 | fy24 | WK43 | 67 | |
| fy24 | Q4 | 三月 | fy24 | WK44 | 68 | |
| fy24 | Q4 | 三月 | fy24 | WK45 | 66 | |
| fy24 | Q4 | 三月 | fy24 | WK46 | 70 | |
| fy24 | Q4 | 三月 | fy24 | WK47 | 71 | |
| fy24 | Q4 | 三月 | fy24 | WK48 | 72 | |
| fy24 | Q4 | 四月 | fy24 | WK49 | 66 | |
| fy24 | Q4 | 四月 | fy24 | WK50 | 70 | |
| fy24 | Q4 | 四月 | fy24 | WK51 | 71 | |
| fy24 | Q4 | 四月 | fy24 | WK52 | 75 | 75 |
| fy25 | Q1 | 五月 | fy25 | WK1 | 80 | |
| fy25 | Q1 | 五月 | fy25 | WK2 | 60 | |
| fy25 | Q1 | 五月 | fy25 | WK3 | 50 | |
| fy25 | Q1 | 五月 | fy25 | WK4 | 40 | 40 |
问题1:自然季度最后日期的DAX实现
获取季度最后日期值
如果数据表中包含日期列(如Date),直接使用ENDOFQUARTER函数即可返回当前上下文日期所在自然季度的最后一天:
自然季度最后日期 = ENDOFQUARTER('表'[Date])
分组获取对应季度最后一条记录的金额
要像示例中那样,按财年、自然季度分组,取该季度最后一条记录的金额,结合CALCULATE和LASTNONBLANK实现:
自然季度最后金额 = VAR 当前财年 = '表'[FiscalYear] VAR 当前季度 = '表'[Quarter] RETURN CALCULATE( LASTNONBLANK('表'[amount], 1), FILTER( ALL('表'), '表'[FiscalYear] = 当前财年 && '表'[Quarter] = 当前季度 ) )
问题2:财年从5月开始时的财季最后日期实现
当财年起始于5月,财季划分规则为:
- Q1:5-7月
- Q2:8-10月
- Q3:11月-次年1月
- Q4:2-4月
获取财季最后日期值
基于日期列计算对应财季的最后一天:
财季最后日期(财年5月起) = VAR 财年起始日 = DATE(YEAR('表'[Date]) - IF(MONTH('表'[Date]) < 5, 1, 0), 5, 1) VAR 财季编号 = CEILING((MONTH('表'[Date]) - MONTH(财年起始日) + 12) % 12 / 3, 1) VAR 财季结束日 = SWITCH( 财季编号, 1, DATE(YEAR(财年起始日), 7, 31), 2, DATE(YEAR(财年起始日), 10, 31), 3, DATE(YEAR(财年起始日) + 1, 1, 31), 4, DATE(YEAR(财年起始日) + 1, 4, 30) ) RETURN 财季结束日
分组获取对应财季最后一条记录的金额
按财年标识(fy)和财季分组,取该财季最后一条记录的金额:
财季最后金额(财年5月起) = VAR 当前财年标识 = '表'[fy] VAR 当前财季 = '表'[Quarter] RETURN CALCULATE( LASTNONBLANK('表'[amount], 1), FILTER( ALL('表'), '表'[fy] = 当前财年标识 && '表'[Quarter] = 当前财季 ) )
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

