You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Power Query基于日期区间生成Power BI表重复行?

Power Query实现跨月份CustomKey行拆分方案

需求回顾

原始表结构:

MIDSIPValidFromValidToCustomKey
1c208/01/202211/30/20221_c2_08_2022
2c312/24/202212/31/20222_c3_12_2022

需要转换为每行对应ValidFrom到ValidTo之间的所有月份,生成对应CustomKey的结构:

MIDSIPValidFromValidToCustomKey
1c208/01/202211/30/20221_c2_08_2022
1c208/01/202211/30/20221_c2_09_2022
1c208/01/202211/30/20221_c2_10_2022
1c208/01/202211/30/20221_c2_11_2022
2c312/24/202212/31/20222_c3_12_2022

具体实现步骤

1. 确保日期列类型正确

选中ValidFrom和ValidTo列,右键选择更改类型→日期,确保这两列是标准日期类型(避免后续函数报错)。

2. 添加自定义列生成月份对应的CustomKey列表

在Power Query编辑器中,点击添加列→自定义列,输入以下公式:

= let
    // 获取有效期起始和结束的当月第一天
    StartMonth = Date.StartOfMonth([ValidFrom]),
    EndMonth = Date.StartOfMonth([ValidTo]),
    // 生成从起始月到结束月的所有月份序列
    MonthSequence = List.Generate(
        () => StartMonth,
        each _ <= EndMonth,
        each Date.AddMonths(_, 1)
    ),
    // 对每个月份生成对应的CustomKey
    GenerateCustomKey = List.Transform(MonthSequence, (monthDate) => 
        Text.From([MID]) & "_" & [SIP] & "_" & 
        Text.PadStart(Text.From(Date.Month(monthDate)), 2, "0") & "_" & 
        Text.From(Date.Year(monthDate))
    )
in
    GenerateCustomKey

将自定义列命名为CustomKeyList。

3. 展开列表为多行

点击CustomKeyList列右侧的展开按钮(双向箭头),选择展开到新行,此时每行都会拆分为对应月份的多行记录。

4. 整理列结构

删除原有的CustomKey列,将CustomKeyList列重命名为CustomKey,即可得到目标表结构。

报错原因说明

你遇到的Expression.Error: We cannot apply field access to the type Date.错误,通常是以下两种情况导致:

  • ValidFrom或ValidTo列不是标准日期类型,而是文本或其他类型,导致函数无法识别日期操作;
  • 使用List.Generate时错误地对日期值使用了字段访问语法(比如试图用[Date]访问日期属性,但实际是直接操作日期值)。

内容的提问来源于stack exchange,提问作者Ananda Prasad Bandaru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:30:41