代码之家  ›  专栏  ›  技术社区  ›  user9431057

基于列的值幂查询将表拆分为多个较小的表

  •  0
  • user9431057  · 技术社区  · 7 年前

    我有一个这样的表,我在power query中使用了“combine&edit”选项,该选项包含来自多个工作表的多个工作表的信息 .xlsx 文件夹。图纸名永远不会改变,它们将保持不变,excel文件可以改变。

    enter image description here

    现在,我想要很多桌子 column1 的值 firstkey . 所以,我可以得到多张这样的桌子,

    enter image description here

    我一直在谷歌上寻找答案,仍然没有成功。有一些线索像 this ,这要求您复制原始表并筛选每个值。

    但是,在我的例子中,如果我有新的 .xlsx文件 文件夹。所以,如果我得到一个值 Brooklyn Park 而不是 Bursville ,应根据 Column1 的值。

    如何进行此电源查询?

    编辑

    根据要求,一个文件的原始excel表,

    enter image description here

    M 代码:

    let
        Source = Excel_Export,
        #"Trimmed Text" = Table.TransformColumns(Source,{{"Column1", Text.Trim, type text}}),
        #"Cleaned Text" = Table.TransformColumns(#"Trimmed Text",{{"Column1", Text.Clean, type text}}),
        #"Filtered Rows" = Table.SelectRows(#"Cleaned Text", each ([Source.Name] = "Burnsville.xlsx")),
        #"Transposed Table" = Table.Transpose(#"Filtered Rows"),
        #"Removed Top Rows" = Table.Skip(#"Transposed Table",1),
        #"Promoted Headers" = Table.PromoteHeaders(#"Removed Top Rows", [PromoteAllScalars=true]),
        #"Renamed Columns" = Table.RenameColumns(#"Promoted Headers",{{"Address", "Address Number"}, {"Column3", "StreetName"}, {"Column4", "City"}})
    in
        #"Renamed Columns"
    

    我用这段代码为每个文件创建了一个自动化的函数。

    1 回复  |  直到 7 年前
        1
  •  1
  •   chillin    7 年前

    这个 M 您发布的代码指示至少有3列,但第一个图像仅显示两列。它似乎还引用了另一个查询( Excel_Export ). 我希望它能显示出你是如何在第一张图片中获得这张桌子的,所以不太清楚发生了什么。

    关于空白行的插入,您可以尝试下面的函数。

    代码:

    fxInsertBlankRows = (tableToTransform as table) =>
        let
            blankRowToInsert = 
                let
                    headers = Table.ColumnNames(tableToTransform),
                    emptyTable = Table.FromColumns(List.Transform(headers, each {""}), headers),
                    toListOfRecords = Table.ToRecords(emptyTable)
                in
                    toListOfRecords,
            insertionIndexes =
                let
                    isolateColumn = Table.SelectColumns(tableToTransform, {"Column1"}),
                    indexes = Table.PositionOf(isolateColumn, [Column1="firstKey"], Occurrence.All)
                in
                    indexes,
            insertBlankRows = List.Accumulate(insertionIndexes, tableToTransform, (tableState, currentIndex) =>
                    Table.InsertRows(tableState, currentIndex, blankRowToInsert)
                ) 
        in
            insertBlankRows,
    

    假设要在 #"Renamed Columns" 介入 你发布的代码(假设 #“重命名的列” 是一张桌子,我敢肯定是的。您可以按照以下方式更改代码的结束方式:

    #"Renamed Columns" = Table.RenameColumns(#"Promoted Headers",{{"Address", "Address Number"}, {"Column3", "StreetName"}, {"Column4", "City"}})
    fxInsertBlankRows = (tableToTransform as table) =>
            let
                blankRowToInsert = 
                    let
                        headers = Table.ColumnNames(tableToTransform),
                        emptyTable = Table.FromColumns(List.Transform(headers, each {""}), headers),
                        toListOfRecords = Table.ToRecords(emptyTable)
                    in
                        toListOfRecords,
                insertionIndexes =
                    let
                        isolateColumn = Table.SelectColumns(tableToTransform, {"Column1"}),
                        indexes = Table.PositionOf(isolateColumn, [Column1="firstKey"], Occurrence.All)
                    in
                        indexes,
                insertBlankRows = List.Accumulate(insertionIndexes, tableToTransform, (tableState, currentIndex) =>
                        Table.InsertRows(tableState, currentIndex, blankRowToInsert)
                    ) 
            in
                insertBlankRows,
    invokeFunction = fxInsertBlankRows(#"Renamed Columns")
    in
        invokeFunction