在 Power Query for Power BI 中合并具有不同列的文件时,旋转更宽以替换重复的空列

问题描述 投票:0回答:1

我正在 Power Query for Power BI 中组合多个数据文件。我的每个文件都有一百多个列,其中一些名称相同,而大多数名称不同。这是一个截断的示例。

文件A

身份证 描述 替代 标准偏差 项目1 项目2
1 f .2 12344 144
2 酒吧 b1 .3 12355 155
3 巴兹 b2 .255 12366 166

文件B

身份证 描述 标准偏差 IDplus 项目10 项目11
1 .5 事情1 944 9944
2 酒吧 .8 东西2 955 9955
3 巴兹 .111 事情3 966 9966

合并后我现在拥有的:

身份证 描述 替代 标准偏差 项目1 项目2 IDplus 项目10 项目11
1 f .2 12344 144
2 酒吧 b1 .3 12355 155
3 巴兹 b2 .255 12366 166
1 .5 事情1 944 9944
2 酒吧 .8 东西2 955 9955
3 巴兹 .111 事情3 966 9966

我希望的结果:

身份证 描述 替代 项目1 项目2 IDplus 项目10 项目11 标准偏差A 标准偏差B
1 f 12344 144 事情1 944 9944 .2 .5
2 酒吧 b1 12355 155 东西2 955 9955 .3 .8
3 巴兹 b2 12366 166 事情3 966 9966 .255 .111

所以我本质上想做的是将它们折叠(该词的非技术用途)为更少的行。由于无论如何所有列都在那里,因此复制大量数据似乎是浪费空间,因为我有几百列和数千行。

我知道我当前的结果和我希望的结果在语义上是相同的,但感觉所需的结果会占用较少的内存。

问题:

  • 期望的存储和工作记忆会更有效,这是正确的吗?
  • 我将如何进行转换来进行这些更改?

提前致谢!

我在 Power BI 中使用了 Power Query。我进行了文件夹导入和多次转换,包括自定义列代码。

excel dataframe powerbi powerquery powerbi-desktop
1个回答
0
投票

如果您发布的内容代表文件内容,则无需旋转。这只是进行顺序连接的问题。

这里是示例代码,假设您的文件是制表符分隔的文本文件。

如果文件是其他文件,您将需要更改正在使用的文件处理例程,但这应该可以帮助您开始:

let
//Get the folder files
    Source = Folder.Files("C:\Users\ron\Desktop\myCSVfiles"),

//filter to select only the relevant files
//  change this to something that works
    #"Binaries" = Table.SelectRows(Source, each ([Extension] = ".txt"))[Content],

//Assuming there is a column of binaries, and that these represent tab-separated text files,you can use the following
//If the tables are something else, you will need to replace the 
//   `Table.PromoteHeaders(Csv.Document(Text.FromBinary(#"Binaries"{0}),null,"#(tab)")),` lines with something appropriate

    #"Combine Binaries" = List.Accumulate(
        List.Skip(#"Binaries"),
        Table.PromoteHeaders(Csv.Document(Text.FromBinary(#"Binaries"{0}),null,"#(tab)")),
        (s,c)=> let 
            nextTable = Csv.Document(Text.FromBinary(c),null,"#(tab)"),
            #"Promote Headers" = Table.PromoteHeaders(nextTable),
            Join = Table.NestedJoin(s,"ID",#"Promote Headers","ID","Joined",JoinKind.FullOuter),
            #"s Columns" = Table.ColumnNames(s),
            #"Next Table Columns" = Table.ColumnNames(Join[Joined]{0}),
            #"Expand Table" = Table.ExpandTableColumn(Join,"Joined", List.RemoveMatchingItems(#"Next Table Columns",#"s Columns"))
        in #"Expand Table")
in 
    #"Combine Binaries"
© www.soinside.com 2019 - 2024. All rights reserved.