使用具有(重复)主键的行从列中返回值到不同的行

Return values from columns using a row with (duplicated) primary key to different rows

提问人:excelispainful 提问时间:10/27/2023 最后编辑:Mayukh Bhattacharyaexcelispainful 更新时间:10/28/2023 访问量:113

问:

我需要一种方法从由复制键定义的行中返回数据,并在具有唯一键的单独工作表中以不同列的形式返回这些行中的数据。

我正在处理一个包含 20,000+ 数据的大文件,其中包含多个工作表,需要为其中一个数据生成以下结果:

示例数据:
Raw Data

Desired output in a separate sheet

Excel 有什么方法可以为我做到这一点吗?如果是这样的话,我不熟悉 VBA,但我仍然可以尝试更多帮助。

尝试的方法:

  1. =IFS公司

  2. Power Query(合并和追加)

  3. 索引和匹配

非常感谢您的想法!这花费了我很多时间,我什至不知道如何要求谷歌找到解决方案......

VBA Excel-公式 PowerQuery M

评论

0赞 Sam Nseir 10/27/2023
一本书最多是 4 行还是可以更多?请问您为什么要将数据转换为这样?只询问,因为在不转换数据的情况下,可能会有更好的解决方案来满足您想要的需求。
0赞 excelispainful 10/27/2023
你好!非常感谢您的帮助!确实有4个以上。此数据是进一步映射的摘要。我欢迎更好的选择!
0赞 Sam Nseir 10/27/2023
我建议不要走这条路,因为您将拥有不确定数量的列等......对于进一步分析,您当前构建数据的方式是首选,因为对行执行计算比对列执行计算要容易得多。给定您的样本原始数据,您的最终目标/目标是什么?
0赞 excelispainful 10/27/2023
基本上是从A列中对相应的列C-G进行分析
0赞 Sam Nseir 10/27/2023
基于此,您应该保持数据原样。而是将其加载到 Power Query 中,并创建两个表(查询)。Table Book(Book ID、Book Name - 并删除重复项)和 Table BookScore(Book Id、Score A、Score B、Score C、Score D、Score E)。将这两个查询加载到数据模型中。然后转到数据模型并添加两者之间的关系。现在,您可以为所需的计算添加度量值或计算行。您可以在没有数据模型的情况下实现相同的目标,并使用 XLOOKUP 等......在 Excel 中研究数据模型以了解更多信息。

答:

1赞 P.b 10/27/2023 #1

这可能是使用公式的解决方案,但是我们可能需要等待某人发布 Power Query 解决方案。

=LET(a,A1:G11,
     u,UNIQUE(DROP(TAKE(a,,2),1)),
     d,HSTACK(u,
              DROP(
                   REDUCE("",SEQUENCE(ROWS(u)),
                   LAMBDA(x,y,
                          VSTACK(x,
                                 TOROW(FILTER(DROP(a,1,2),DROP(TAKE(a,,1),1)&INDEX(DROP(a,1),,2)=INDEX(TAKE(u,,1)&INDEX(u,,2),y)))))),
                   1)),
     e,DROP(TAKE(a,1),,2),
VSTACK(
       HSTACK(TAKE(a,1,2),
              TOROW(e&SEQUENCE(COLUMNS(d)/COLUMNS(e)))),
       d))

评论

0赞 excelispainful 10/27/2023
谢谢!本周末,我将尝试这篇文章中的所有内容!我尝试了数据模型,但结果不是我老板想要的 - 编译一个完整的元数据进行数据分析
1赞 horseyride 10/27/2023 #2

在 powerquery 中,使用 M

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Book#", "Book title"}, "Attribute", "Value"),
#"Grouped Rows" = Table.Group(#"Unpivoted Other Columns", {"Book#", "Book title", "Attribute"}, {{"data", each 
    let #"Added Index" = Table.AddIndexColumn(_, "Index", 1, 1, Int64.Type)
    in Table.CombineColumns(Table.TransformColumnTypes(#"Added Index", {{"Index", type text}}, "en-US"),{"Attribute", "Index"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"Merged")
    , type table}}),
#"Expanded data" = Table.ExpandTableColumn(#"Grouped Rows", "data", {"Value", "Merged"}, {"Value", "Merged"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded data",{"Attribute"}),
#"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns1"[Merged]), "Merged", "Value")
in #"Pivoted Column"

enter image description here

评论

0赞 excelispainful 10/28/2023
谢谢你,它有效!!但是我需要将我的数据分成更小的卡盘(每个卡盘大约 10,000 个)来运行查询。我使用的是 365 32 位,运行所有条目都存在内存问题。
0赞 horseyride 10/28/2023
很乐意帮忙。我很惊讶你有数据问题,但没关系。请注意,此输出对于数据来说是一种糟糕的格式