如何用Power BI DAX生成工具历史检测日期行(含循环逻辑)
工具检测历史记录生成的DAX实现
需求说明
原始工具检测表(每年检测一次,日期格式:日-月-年):
ToolNumber InspectionDate PurchaseDate 1 10-1-2024 10-3-2024 2 8-3-2024 12-11-2023 3 12-1-2024 1-7-2019
需生成包含历史检测记录的表格,规则如下:
- 历史检测日期从2018年开始生成
- 基于当前检测日期逐年往前推算,若推算后的日期不早于采购日期,则新增该行历史记录;若早于采购日期则停止生成
最终目标表格:
ToolNumber InspectionDate PurchaseDate 1 10-1-2024 10-3-2024 2 8-3-2024 12-11-2023 3 12-1-2024 1-7-2019 3 12-1-2023 1-7-2019 3 12-1-2022 1-7-2019 3 12-1-2021 1-7-2019 3 12-1-2020 1-7-2019
DAX实现代码
创建计算表,将代码中的'原始工具检测表'替换为你的真实表名即可:
工具检测历史表 = VAR BaseTable = '原始工具检测表' VAR MinYear = 2018 RETURN GENERATE( BaseTable, VAR CurrentInspectDate = [InspectionDate] VAR CurrentPurchaseDate = [PurchaseDate] VAR StartYear = YEAR(CurrentInspectDate) // 生成有效年份序列:从当前检测年份倒推至2018,且对应检测日期不早于采购日期 VAR ValidYears = FILTER( GENERATESERIES(StartYear, MinYear, -1), DATE([Value], MONTH(CurrentInspectDate), DAY(CurrentInspectDate)) >= CurrentPurchaseDate ) RETURN // 转换为目标表结构 SELECTCOLUMNS( ValidYears, "ToolNumber", [ToolNumber], "InspectionDate", DATE([Value], MONTH(CurrentInspectDate), DAY(CurrentInspectDate)), "PurchaseDate", CurrentPurchaseDate ) )
代码逻辑说明
- GENERATE:遍历原始表的每一行,为每个工具生成对应的历史记录集合,模拟循环遍历逻辑
- GENERATESERIES:生成从当前检测年份到2018年的倒序年份序列,替代传统循环的“逐年往前推”操作
- FILTER:筛选出符合条件的年份——确保生成的历史检测日期(月日与当前检测日期一致,年份替换为序列值)不早于采购日期
- SELECTCOLUMNS:将筛选后的年份序列转换为目标表结构,保留工具编号和采购日期,生成对应的历史检测日期
内容的提问来源于stack exchange,提问作者Agriss
相关产品推荐
相关产品推荐

