【问题标题】:Generate all Possible Unique Combinations of two Excel Columns生成两个 Excel 列的所有可能的唯一组合
【发布时间】:2019-05-06 12:38:44
【问题描述】:

我有以下简化的数据集,我需要从中创建一个唯一列表并同时转置 B 列中的数据。我想我需要使用 INDEX,但我不确定这种情况下的正确语法。

B 列中的数据以空格分隔。

这是我的数据的样子:

|---------------------|------------------|
|      Column A       |      Column B    |
|---------------------|------------------|
|          1          |       AA BB      |
|---------------------|------------------|
|          2          |       BB CC      |
|---------------------|------------------|
|          3          |       DD EE      |
|---------------------|------------------|

要求的结果

|---------------------|------------------|
|      Column A       |      Column B    |
|---------------------|------------------|
|          1          |         AA       |
|---------------------|------------------|
|          1          |         BB       |
|---------------------|------------------|
|          2          |         BB       |
|---------------------|------------------|
|          2          |         CC       |
|---------------------|------------------|
|          3          |         DD       |
|---------------------|------------------|
|          3          |         EE       |
|---------------------|------------------|

【问题讨论】:

  • 如果是唯一的,为什么 BB 在输出中出现 两次 ??

标签: excel powerquery


【解决方案1】:

要在给定输入表的情况下获取输出表,只需几个步骤即可从 UI 中使用 Power Query:

  • space 分隔符分割B 列。
  • 选择A列然后选择unpivot other columns
  • 删除取消透视时出现的额外列Attribute

这是该操作的M 代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "Column2", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column2.1", "Column2.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column2.1", type text}, {"Column2.2", type text}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type1", {"Column1"}, "Attribute", "Value"),
    #"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Attribute"})
in
    #"Removed Columns"

结果:

【讨论】:

    【解决方案2】:

    Ron Rosenfeld's answer 将数据还原为所需结果指示的 OP。

    如果您需要从两列创建所有数据组合(而不是反透视),请通过将每组值放在其自己的列中来规范化数据。在此示例中,B 列的每个单元格有两个数据条目,可以使用Data > Text to Columns 进行拆分。要使用唯一条目,请使用标准 Excel 工具 Data > Remove Duplicates,或在 Excel Power Query 编辑器中,右键单击数据列标题并单击 Remove Duplicates

    为要包含在组合中的每一列创建单独的查询。通过添加带有引用第一个数据查询的公式的自定义列,Power Query 将在两列之间执行完全外部联接,从而产生所有组合。

    决赛桌结果


    第 1 步:数据 > 文本到列

    (a) 选择 B 列。在功能区中,转到数据 > 文本到列。


    (b) 在适当的分隔符(空格、制表符等)上拆分数据。


    第 2 步:合并数据并删除重复项

    (a) 从 C 列剪切数据并粘贴到 B 列

    (b) 将 C 列数据粘贴到 B 列。

    (c) 选择 B 列,然后点击数据 > 删除重复项

    (d) 如果弹出关于在选择旁边找到数据的警告,请单击“继续当前选择”

    (e) 选中 B 列的复选框并单击“确定”。

    第 3 步:为 A 列创建数据查询

    (a) 选择 A 列并单击数据 > 从表/范围

    (b) 查询设置 > 属性 > 名称并输入名称“ColumnA”

    (c) 主页 > 关闭并加载 > 关闭并加载到...

    (d) 选择:仅创建连接

    第 4 步:为 B 列创建数据查询

    (a) 选择 B 列

    (b) 数据 > 来自表/范围

    (c) 查询设置 > 属性 > 名称并输入名称“ColumnB”

    (d) 添加列 > 自定义列

    (e) 新列名:组合

    (f) 自定义列公式:=ColumnA

    (g) 展开新的“组合”列(带有左/右箭头的图标)

    (h) 将“组合”栏拖到左侧

    (i) 主页 > 关闭并加载

    第五步:对输出数据表进行排序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多