PowerQuery/PowerBI:如何基于Name列提取数据生成分组列或分表?
PowerQuery/PowerBI 基于Name列提取分区数据的两种解决方案
需求一:新增一列标注每行所属的分区标题
假设你的源表中,Name列包含分区标题行和数据行(标题行是每个分区的起始行,后续是对应的数据内容),操作步骤如下:
- 打开PowerQuery编辑器:在PowerBI的「数据」选项卡点击「从表格/范围」加载源数据,或右键已加载的表选择「编辑查询」
- 添加「是否标题」判断列:
- 点击「添加列」选项卡→「自定义列」,输入判断公式(请根据你的实际数据特征修改)
- 示例公式(如果标题行Name不是数字开头,数据行是):
=IF(ISNUMBER(VALUE(LEFT([Name],1))), FALSE, TRUE) - 点击「确定」后,新增一列标记每行是否为标题行
- 向下填充标题:
- 选中「是否标题」列,点击「转换」选项卡→「填充」→「向下」
- 此时所有数据行都会被填充上方最近的标题行内容
- 整理列:
- 把填充后的列重命名为「分区标题」,删除不需要的中间列即可
需求二:为每个分区标题创建单独的新表
基于需求一的结果操作,分两种方式:
方式1:手动拆分(适合分区少的情况)
- 完成需求一的步骤,得到带「分区标题」列的表
- 筛选每个分区的数据:
- 点击「分区标题」列的筛选按钮,选择第一个分区标题,仅显示该分区的数据
- 点击「开始」选项卡→「关闭并上载至」,选择「仅创建连接」或直接上载为新表,命名为对应分区的名字
- 重复上述步骤,为每个分区生成单独的表
方式2:批量生成(适合分区多的情况)
- 完成需求一的步骤,得到带「分区标题」列的表
- 打开「高级编辑器」,替换现有M代码(请替换代码中的
你的源表名称为实际表名):
let 源 = 你的源表名称, // 步骤1:判断是否为标题行(请根据你的数据调整逻辑) 添加是否标题 = Table.AddColumn(源, "是否标题", each IF(ISNUMBER(VALUE(LEFT([Name],1))), FALSE, TRUE)), // 步骤2:向下填充标题到数据行 填充标题 = Table.FillDown(添加是否标题, {"是否标题"}), // 步骤3:提取所有唯一的分区标题 分区列表 = List.Distinct(填充标题[分区标题]), // 步骤4:为每个分区生成单独的表 生成分区表 = List.Transform(分区列表, (当前分区) => Table.SelectRows(填充标题, each [分区标题] = 当前分区) ), // 步骤5:将分区表列表转换为可操作的表结构 转换为表 = Table.FromList(生成分区表, Splitter.SplitByNothing(), {"分区数据"}), // 步骤6:添加分区名称列用于识别 添加分区名称 = Table.AddColumn(转换为表, "分区名称", each Table.FirstValue([分区数据][分区标题])) in 添加分区名称
- 运行代码后,每行对应一个分区的数据表,点击「分区数据」列的表格图标打开子表,再点击「关闭并上载至」即可生成单独的新表
内容的提问来源于stack exchange,提问作者MonkeyJLuffy
相关产品推荐
相关产品推荐

