excel - 根据列的值将一个表拆分为多个较小的表-Power Query
问题描述
我有一个这样的表,我在电源查询中使用“组合和编辑”选项获得了来自多个.xlsx
文件的多个工作表的信息。工作表名称永远不会改变,它们会保持不变,excel 文件可以改变。
column1
现在,我想要许多表按's value拆分firstkey
。所以,我可以得到多个这样的表,
我一直在谷歌搜索以找到答案,仍然没有成功。有这样的线程,需要您复制原始表并过滤每个值。
.xlsx
但是,就我而言,如果我有新文件,我想以某种方式自动化。因此,如果我得到一个值Brooklyn Park
而不是Bursville
,则应根据Column1
' 值对其进行过滤。
如何执行此 Power Query?
编辑
根据要求,一个文件的原始 excel 表,
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"
我使用这段代码创建了一个函数来为每个文件自动化。
解决方案
您发布的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"
假设您想在您发布的代码中的步骤上使用上述函数M
(假设#"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
推荐阅读
- numpy - 将 3D numpy 数组合并为 2D 数组
- sonarqube - 我可以在模型类上添加 @SuppressWarnings("*") 吗?
- typescript - 扔进摩卡测试没有被捡起
- reactjs - Create-react-app 是否安装了内部损坏的依赖项?
- ruby-on-rails - 带有 RQRCode-Gem 的 Ruby on Rails QR-Code 不起作用
- regex - sed 替换删除文本块
- tensorflow - 使用 Keras 计算损失函数中的非均匀惩罚
- scala - 为什么在 Linux 上使用 SparkML 的 XGBoost 比在 Windows 上慢得多
- modelica - 如何在 dymola 中指定输出“.mat”文件的路径?
- timeout - Twilio:触发 HTTP 通信总超时