如何在Power Query中动态使用List.Range函数,拆分列时生成Category列的H、I、J、K行
Power Query 动态生成多分类行实现方案
实现逻辑
核心思路是先把合并的分类范围拆成单独的分类列表,再扩展为行,全程用到你要求的三个函数,不需要硬编码H/I/J/K,分类范围变动可自动适配。
具体操作步骤
- 第一步:导入源数据进入Power Query编辑器
- 第二步:选中现有数据,点击「添加列」选项卡,选择「自定义列」,输入以下M语言公式:
= let // 判断当前Category是否为范围格式(如"H-K") isRange = Text.Contains([Category], "-"), // 提取范围起始分类 startCat = if isRange then Text.BeforeDelimiter([Category], "-") else [Category], // 提取范围结束分类 endCat = if isRange then Text.AfterDelimiter([Category], "-") else [Category], // 预定义分类取值的全集,可根据实际业务规则调整 allCats = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}, startIndex = List.PositionOf(allCats, startCat), endIndex = List.PositionOf(allCats, endCat), // 截取对应范围的分类列表 catList = List.Range(allCats, startIndex, endIndex - startIndex + 1) in catList
- 第三步:点击自定义列右上角的扩展按钮,选择「扩展为行」,即可得到所有分类对应的单独行,Month、Cost字段会自动匹配对应的值。
用到的函数说明
Text.BeforeDelimiter(文本, 分隔符):提取指定分隔符左侧的文本内容,本场景中用来获取分类范围的起始值(如"H-K"中的H)Text.AfterDelimiter(文本, 分隔符):提取指定分隔符右侧的文本内容,本场景中用来获取分类范围的结束值(如"H-K"中的K)List.Range(列表, 起始索引, 取数个数):从指定列表中截取对应区间的元素,本场景中通过预定义的分类全集,直接截取从H到K的所有分类,自动生成完整序列
适配说明
如果你的分类分隔符不是短横线,或者分类编号规则不是大写字母,只需要修改公式中的分隔符参数和allCats的列表内容即可,无需修改核心逻辑。
内容的提问来源于stack exchange,提问作者Heer
相关产品推荐
相关产品推荐

