如何解决Power BI错误-密钥与表中的任何行都不匹配

时间:2019-10-16 19:27:16

标签: excel powerbi

我正在尝试将多个Excel文件加载(组合)到Power BI(2019年10月版)中。每个文件只有一张。每个工作表都有1个范围,并且每个范围在所有文件中都有相同的架构。 (但是,工作表名称不同。)样本工作表名称为“ 200704”。

这是我的步骤:

  1. 获取数据\文件夹\连接
  2. 指定文件夹路径
  3. 组合和加载
  4. 选择一个文件作为我的样本文件;单击文件名称为 我的参数1;点击确定

单击“确定”后,光标旋转一点,然后停止。什么都没发生。因此,我转到“编辑查询” \“编辑查询”。我的数据查询上显示一个警告符号,内容为:

  

“转换文件”查询中发生错误。 Expression.Error:   关键字与表格中的任何行都不匹配。

     

详细信息:键=项= 200704种类=表表= [表]

如何解决此错误?

如果有帮助,Power BI会为我生成5个查询,其结构为:

  • 从数据[2]转换文件
  • 助手查询[3]
  • Parameter1(样本文件)
  • 样本文件
  • 转换文件
  • 转换样本文件
  • 其他查询[1]
  • 数据

有趣的是,如果它有助于诊断问题,如果我将示例文件设置为第一个文件,或者如果我将示例文件手动设置为我的第一个文件,则在对话框中将引发以下错误,但它不会显示查询内容当我尝试查看/编辑查询时出错。

  

无法将修改保存到服务器。返回错误:“ OLE DB或ODBC错误:[Expression.Error]键与表中的任何行都不匹配。”。

并且可以肯定的是,当我尝试单独(通过Excel连接)加载此文件(或文件夹中的任何文件)时,它成功加载。因此,我的文件夹连接中的M代码一定有问题。

1 个答案:

答案 0 :(得分:0)

我找出了问题的原因和解决方案。问题是模板查询中的行未正确引用(即,模板查询和常规查询之间的主键错误,并且具有工作表名称的硬编码)。要解决此问题,我必须删除模板查询表中除“数据”列之外的所有其他列,如here所述。 (奇怪的是,没有有关合并多个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"

测试:

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"

这是我的新(正确)代码:

转换示例文件:

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"

测试:

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"

请注意新模板查询中的“已删除列”步骤。这是“秘制酱汁”的关键问题。还要注意,我在模板查询中保留了“数据”步骤之后的所有默认步骤(即“提升标题”和“更改类型”)。这是因为我所有的工作表都具有相同的架构。如果不是这样,那么我需要将这些步骤移至常规查询。