如何在Power BI DAX中生成日期列表并存储用于后续公式
在Power BI中用DAX生成指定年份偏移的日期列表
要实现你描述的需求——根据日期列(Column1)和年份偏移数(Column2)生成对应日期列表并存储为表/列表,可以使用DAX的GENERATE、GENERATESERIES和SELECTCOLUMNS函数组合完成,以下是具体实现方案:
方案1:生成展开式日期表(推荐用于后续关联分析)
这个方案会将原表的每一行与生成的日期一一对应,生成一个扁平化的表,方便后续在报表或其他DAX公式中直接使用:
Generated Dates = GENERATE( '你的表名', -- 替换为实际表名 VAR BaseDate = '你的表名'[Column1] VAR YearOffset = '你的表名'[Column2] RETURN ADDCOLUMNS( -- 根据偏移数生成序列:偏移为0时只生成0,否则生成1到偏移数的序列 IF(YearOffset = 0, ROW("Offset", 0), GENERATESERIES(1, YearOffset, 1)), "Generated Date", -- 计算对应日期:偏移为0时保留原日期,否则年份减去序列值 IF( YearOffset = 0, BaseDate, DATE(YEAR(BaseDate) - [Offset], MONTH(BaseDate), DAY(BaseDate)) ) ) )
效果验证
- 当Column1=10/04/2024,Column2=1时,表中会新增一行
Generated Date=10/04/2023 - 当Column1=10/04/2023,Column2=0时,表中会新增一行
Generated Date=10/04/2023 - 当Column1=10/04/2026,Column2=3时,表中会新增三行,对应日期为10/04/2025、10/04/2024、10/04/2023
方案2:生成带日期列表的表(单行列存储多个日期)
如果需要在原表的每一行中存储对应的日期列表(表值列),可以使用以下公式:
Date List per Row = ADDCOLUMNS( '你的表名', -- 替换为实际表名 "Date List", VAR BaseDate = '你的表名'[Column1] VAR YearOffset = '你的表名'[Column2] RETURN IF( YearOffset = 0, {BaseDate}, -- 偏移为0时返回单元素列表 -- 偏移大于0时,生成对应年份偏移的日期列表 SELECTCOLUMNS( GENERATESERIES(1, YearOffset, 1), "Date", DATE(YEAR(BaseDate) - [Value], MONTH(BaseDate), DAY(BaseDate)) ) ) )
使用方式
生成的Date List列是表值类型,你可以在其他DAX公式中通过RELATEDTABLE('Date List per Row'[Date List])引用该列表,或用CONCATENATEX('Date List per Row'[Date List], [Date], ", ")将列表转为逗号分隔的字符串查看。
内容的提问来源于stack exchange,提问作者user10855628
相关产品推荐
相关产品推荐

