Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 电源查询:包括在文件夹中的文件中找到的所有唯一列_Excel_Powerquery_Business Intelligence_Analysis - Fatal编程技术网

Excel 电源查询:包括在文件夹中的文件中找到的所有唯一列

Excel 电源查询:包括在文件夹中的文件中找到的所有唯一列,excel,powerquery,business-intelligence,analysis,Excel,Powerquery,Business Intelligence,Analysis,我最近遇到了一个问题,希望这个问题是可以解决的 目前,我的power query指向一个包含多个CSV文件的文件夹。这通常没有问题,但是,在本例中,并非所有文件都具有相同的列 有没有办法让power query返回文件夹中找到的每个唯一列,并用空值填充空数据观测值 假设“我的文件夹”中有类似于以下内容的csv文件(请注意,这些行使用字母编制索引,以便于参考): 我希望我的最后一张桌子看起来像: 这看起来应该很简单,但我一辈子都搞不懂!任何帮助都将不胜感激 假设您使用的是文件夹.Files,我

我最近遇到了一个问题,希望这个问题是可以解决的

目前,我的power query指向一个包含多个CSV文件的文件夹。这通常没有问题,但是,在本例中,并非所有文件都具有相同的列

有没有办法让power query返回文件夹中找到的每个唯一列,并用空值填充空数据观测值

假设“我的文件夹”中有类似于以下内容的csv文件(请注意,这些行使用字母编制索引,以便于参考):

我希望我的最后一张桌子看起来像:


这看起来应该很简单,但我一辈子都搞不懂!任何帮助都将不胜感激

假设您使用的是
文件夹.Files
,我想您可以:

  • 抓取
    Folder.Files
    返回的表的
    Content
    列,该列将为您提供二进制值列表
  • 使用
    list.Transform
    CSV.document
    将列表中的每个项目解析为CSV文档,这将为您提供一个表列表
  • 然后将您的表列表与
    表合并。合并
    ——这将为您提供一个表<代码>表格。合并
    应注意细节(如对齐列名)

  • 在您的问题中,您没有提供任何代码,因此很难给出相关示例,但我认为下面的代码给出了您的预期输出

    我将行索引转换为
    ID
    列,只是为了使最终的表更容易验证/遵循

    let
        firstCsv = 
    "ID,one,two,three
    A,1,4,7
    B,2,5,8
    C,3,6,9",
        secondCsv = 
    "ID,one,two,three,four
    D,1,6,11,16
    E,2,7,12,17
    F,3,8,13,18
    G,4,9,14,19
    H,5,10,15,20",
        thirdCsv =
    "ID,one,two,yes,no,maybe
    I,1,1,1,1,1
    J,2,2,2,2,2
    K,3,3,3,3,3
    L,4,4,4,4,4
    M,5,5,5,5,5",
    
    
        // For example's sake, let's suppose that the contrived table below was 
        // returned by calling Folder.Files
        filesInFolder = Table.FromColumns({
            List.Transform({firstCsv, secondCsv, thirdCsv}, Text.ToBinary),
            List.Transform({"1".."3"}, each "CSV file " & _ & ".csv"),
            List.Repeat({"someFolderPath"}, 3)
        }, type table [Content = binary, Name = text, Folder = text]),
        parsed = List.Transform(filesInFolder[Content], each 
            let
                csv = Csv.Document(_, [Delimiter = ",", QuoteStyle = QuoteStyle.Csv]),
                promoted = Table.PromoteHeaders(csv, [PromoteAllScalars = true])
            in promoted
        ),
        // The step below should match the expected output in your question.
        combined = Table.Combine(parsed)
    in
        combined
    

    显然,您需要根据自己的文件夹路径进行调整,并实际调用
    folder.Files
    ,因为您可能已经在自己的代码中了。

    我一直使用类似的方法

    //read all files in specified directory you fill in here
    let Source = Folder.Files("C:\directory\subdirectory"),
    //filter only csv files
    #"Filtered Rows" = Table.SelectRows(Source, each ([Extension] = ".csv")),
    //Pull contents of each file into table with an index
    #"Added Custom1" = Table.AddColumn(#"Filtered Rows", "Custom", each Table.AddIndexColumn(Csv.Document(File.Contents([Folder Path]&"\"&[Name]),[Delimiter=",", Encoding=1252,     QuoteStyle=QuoteStyle.None]),"Index")),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom1", "Custom", {"Column1", "Index"}, {"Column1", "Index"}),
    #"Removed Other Columns" = Table.SelectColumns(#"Expanded Custom",{"Column1", "Index", "Name"}),
    #"Pivoted Column" = Table.Pivot(#"Removed Other Columns", List.Distinct(#"Removed Other Columns"[Name]), "Name", "Column1"),
    #"Removed Columns" = Table.RemoveColumns(#"Pivoted Column",{"Index"})
    in #"Removed Columns"