📅 CALENDAR()
是 Power BI / DAX 中用来**生成一张完整的日期表(Date Table)**的函数,是时间智能分析的基础!
✅ 一句话总结:
CALENDAR()
用来创建一个从开始日期到结束日期的连续日期表,常用于建立时间维度!
📘 基本语法:
DAX
CALENDAR(<开始日期>, <结束日期>)
<开始日期>
和<结束日期>
可以是具体日期,也可以是字段或表达式- 返回值是一个只有一列的日期表(Date 类型)
🎯 示例 1:手动创建一个日期表(2023年全年)
DAX
日期表 = CALENDAR(DATE(2023,1,1), DATE(2023,12,31))
👉 会生成从 2023-01-01 到 2023-12-31 的每一天,一共 365 行。
🎯 示例 2:基于销售表里的日期动态生成
DAX
日期表 = CALENDAR( MIN(Sales[OrderDate]), MAX(Sales[OrderDate]) )
👉 根据 Sales[OrderDate]
字段里的最早和最晚日期,自动创建完整的日期表。
⏳ 接下来要做什么?
通常不会只用 CALENDAR()
这一列,还要扩展出:
- 年(Year)
- 月(Month)
- 日(Day)
- 季度(Quarter)
- 年月(YearMonth)
- 工作日/周末标记
- 排序列(如 "2024年1月" 的排序数字 202401)
👉 用 ADDCOLUMNS()
扩展例子:
DAX
日期表 =
ADDCOLUMNS(
CALENDAR(DATE(2023,1,1), DATE(2023,12,31)),
"年", YEAR([Date]),
"月", MONTH([Date]),
"年-月", FORMAT([Date], "YYYY-MM"),
"季度", "Q" & FORMAT([Date], "Q"),
"星期", FORMAT([Date], "dddd")
)
📌 常见问题
问题 | 说明 |
---|---|
要不要建立日期表? | 做时间分析(同比/环比/YTD)必须要 |
CALENDARAUTO() 是啥? |
自动帮你识别模型里日期字段的最早和最晚值,生成完整日期表 |
要设置关系吗? | 是的,记得把 日期表[Date] 和销售表的 OrderDate 建立关系! |
🧠 小技巧
- 日期表建议设置为 "标记为日期表(Mark as Date Table)"
- 在 Power BI 里右键表名 →
Mark as Date Table
→ 选中日期列 - 日期表可以是 DAX 写的,也可以从 Excel / SQL 导入