我正在尝试将多个 Excel 文件加载(合并)到 Power BI(2019 年 10 月版本)中。每个文件只有一张。每个工作表都有 1 个范围,每个范围在所有文件中都具有相同的架构。(不过,工作表名称不同。)示例工作表名称为“200704”。
这是我的步骤:
单击“确定”后,光标旋转了一下,然后停止。什么都没发生。因此,我转到编辑查询\编辑查询。我的数据查询上有一个警告符号,内容如下:
“转换文件”查询中发生错误。Expression.Error:键与表中的任何行都不匹配。
详细信息:键=项目=200704种类=工作表表=[表]
我该如何解决这个错误?
如果有帮助的话,Power BI 会为我生成 5 个查询,结构为:
有趣的是,如果它有助于诊断问题,如果我设置示例文件=第一个文件或者如果我手动将示例文件设置为我的第一个文件,则对话框中会引发以下错误,但它不会显示哪个查询出错当我尝试查看/编辑查询时。
无法将修改保存到服务器。返回错误:“OLE DB 或 ODBC 错误:[Expression.Error] 该键与表中的任何行都不匹配...”。
而且,可以肯定的是,当我尝试单独加载此文件(或文件夹中的任何文件)(通过 Excel 连接)时,它会成功加载。因此,我的文件夹连接中的 M 代码一定有问题。
我找出了问题的原因和解决方案。问题是模板查询中的行被错误引用(即模板查询和常规查询之间的主键错误,并且它对工作表名称进行了硬编码)。为了解决这个问题,我必须删除模板查询表中除数据列之外的所有其他列,如此处所述。(奇怪的是,没有关于合并多个 Excel 文件的 MS 文档讨论这个非常重要的步骤。)
为了进行比较,这是我以前的(不正确的)M 代码:
转换示例文件:
let
Source = Excel.Workbook(Parameter1, null, true),
#"Sample_Sheet" = Source{[Item="sample",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(#"Sample_Sheet", [PromoteAllScalars=true])
in
#"Promoted Headers"
Run Code Online (Sandbox Code Playgroud)
测试:
let
Source = Folder.Files("C:\some folder path"),
#"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File", each #"Transform File"([Content])),
#"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
#"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File"}),
#"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File", Table.ColumnNames(#"Transform File"(#"Sample File"))),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Source.Name", type text}, {"ID", type text}, {"Name", type text}})
in
#"Changed Type"
Run Code Online (Sandbox Code Playgroud)
这是我的新(正确)代码:
转换示例文件:
let
Source = Excel.Workbook(Parameter1, null, true),
#"Removed Columns" = Table.RemoveColumns(Source,{"Name", "Item", "Kind", "Hidden"}),
Data = #"Removed Columns"{0}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"ID", type text}, {"Name", type text}})
in
#"Changed Type"
Run Code Online (Sandbox Code Playgroud)
测试:
let
Source = Folder.Files("C:\some folder path"),
#"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File", each #"Transform File"([Content])),
#"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
#"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File"}),
#"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File", Table.ColumnNames(#"Transform File"(#"Sample File")))
in
#"Expanded Table Column1"
Run Code Online (Sandbox Code Playgroud)
请注意新模板查询中的“已删除列”步骤。这是解决关键问题的“秘密武器”。另请注意,我在模板查询中保留了“数据”步骤(即“升级标题”和“更改类型”)之后的所有默认步骤。这是因为我的所有工作表都具有相同的架构。如果这不是真的,那么我需要将这些步骤移至常规查询。
| 归档时间: |
|
| 查看次数: |
58843 次 |
| 最近记录: |