PowerQuery如何将列表转换为带指定前缀的布尔值对应列?
PowerQuery 列表列转布尔标记列实现方案
该需求可直接在PowerQuery中实现,无需额外工具,以下是两种操作方式:
方式一:界面可视化操作(适合新手)
- 第一步:将原始数据表导入PowerQuery编辑器,确认
vendors列为列表类型。如果输入是[4,7,13]这类文本格式,先选中该列,点击「转换」选项卡 -> 「解析」-> 「JSON」,即可转为PowerQuery可识别的列表格式。 - 第二步:选中
vendors列,右键选择「重复列」,生成vendors - 复制列。 - 第三步:点击
vendors - 复制列右上角的扩展按钮(双箭头图标),选择「扩展到新行」,将每个列表元素拆分为单独行。 - 第四步:选中扩展后的
vendors - 复制列,点击「转换」选项卡 -> 「格式」-> 「添加前缀」,输入预设前缀vendor.确认。 - 第五步:点击「添加列」选项卡 -> 「自定义列」,公式输入
= true,列名设置为「标记」,确认。 - 第六步:选中添加了前缀的
vendors - 复制列,点击「转换」选项卡 -> 「透视列」,值列选择「标记」,聚合函数选择「不要聚合」,确认。 - 第七步:框选所有
vendor.开头的列,点击「转换」选项卡 -> 「替换值」,查找值输入null,替换为false,即可得到目标结果。
方式二:M代码直接实现(适合大数据量,无需手动调整)
直接打开PowerQuery的「高级编辑器」,替换原有代码为以下内容,按需修改数据源和前缀即可:
let // 替换为你自己的数据源导入步骤 源 = Excel.CurrentWorkbook(){[Name="你的表名"]}[Content], // 若vendors列已经是列表格式,可删除下一行代码 列表转换 = Table.TransformColumns(源, {{"vendors", Json.Document}}), // 自动提取所有出现过的唯一vendor编号 所有编号 = List.Distinct(List.Combine(列表转换[vendors])), // 按前缀生成列名 自定义前缀 = "vendor.", 目标列名 = List.Transform(所有编号, each 自定义前缀 & Text.From(_)), // 批量生成布尔标记列 结果表 = Table.AddColumns(列表转换, List.Zip({目标列名, List.Transform(所有编号, (n)=> each List.Contains([vendors], n))})) in 结果表
该方案运行效率更高,新增vendor编号时无需修改操作步骤,刷新即可自动生成对应新列。
内容的提问来源于stack exchange,提问作者Klaus Stadler
相关产品推荐
相关产品推荐

