Expression.Error: The column 'Column1' of the table wasn't found

Expression.Error: The column 'Column1' of the table wasn't found

在 power 查询中,我使用以下来源查找加拿大股票的股息信息。 如果我输入 ENS 就可以了。 如果我输入 MSFT,它会延迟 Try...Otherwise 并正确评估为“NA”。 如果我输入 HCA,它不起作用并且出现以下错误,“Expression.Error:未找到 table 的列 'Column1'。”

在此先感谢您的帮助。

(Ticker as text) as table =>

let  Source = Web.Page(Web.Contents("https://www.ca.dividendinvestor.com/?symbol="&Ticker)),

Data = try Source{1}[Data] otherwise #table({"Column1", "Column2"}, {{"Dividend Yield:","NA"}}),

#"Changed Type" = Table.TransformColumnTypes(Data,{{"Column1", type text}, {"Column2", type text}}),

#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Column1] = "Dividend Yield:")) in

#"Filtered Rows"

将代码用作函数时,您看不到发生了什么。 将您的代码更改为:

let Ticker="ENS",
Source = Web.Page(Web.Contents("https://www.ca.dividendinvestor.com/?symbol="&Ticker)),
Data = try Source{1}[Data] otherwise #table({"Column1", "Column2"}, {{"Dividend Yield:","NA"}}),
#"Changed Type" = Table.TransformColumnTypes(Data,{{"Column1", type text}, {"Column2", type text}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Column1] = "Dividend Yield:")) in
#"Filtered Rows"

然后逐步完成

当代码为 ENS 时,第一步 return 是这个,它有不止一行,因此第二行的 Source{1} 完美运行

当代码为 MSFT 时,第一步 return 是这个,它只有一行,因此源{1}出错 [因为没有第二行] 并转到 其他部分

当代码为 HCA 时,您 return 第二行数据列中 table 的结果。如果您单击它并查看 table,它没有 column1 或 column2,这就是您在下一步 #"Changed Type" 中所指的内容,因此会出错。它只有种类、名称、children 和文本

如果无论标题如何都需要使用列,请使用 Table.ColumnNames() 来提取动态名称。下面的代码提取第一列的动态名称以用于过滤

let Ticker="HCA",
Source = Web.Page(Web.Contents("https://www.ca.dividendinvestor.com/?symbol="&Ticker)),
Data = try Source{1}[Data] otherwise #table({"Column1", "Column2"}, {{"NA","NA"}}),
#"Filtered Rows" = Table.SelectRows(Data, each (
    Record.Field(_, Table.ColumnNames(Data){0})
    = "Element")) in
#"Filtered Rows"

感谢上面关于分析步骤的建议。你指引我走向正确的道路。这是我使用 powerquery 的第一周,我学到了很多东西。

我首先使用了以下查询:

(代码为文本)as table => 让 来源 = Web.Page(Web.Contents("https://www.ca.dividendinvestor.com/?symbol="&Ticker)), Data = 尝试 Source{1}[Data] 否则 #table({"Column1", "Column2"}, {{"Kind:","NA"}}) 在 数据

然后我在下面添加了第二个查询来过滤我需要的行:


来源 = Excel.CurrentWorkbook(){[Name="tblCompanySymbols"]}[内容], #"Changed Type" = Table.TransformColumnTypes(Source,{{"company ticker symbol", type text}}),

#“调用的自定义函数”= Table.AddColumn(#“更改类型”,“fxGetDividendCA”,每个 fxGetDividendCA([公司代码])),

#"Expanded fxGetDividendCA" = Table.ExpandTableColumn(#"调用自定义函数", "fxGetDividendCA", {"Column1", "Column2"}, {"fxGetDividendCA.Column1", "fxGetDividendCA.Column2" }),

#"Filtered Rows" = Table.SelectRows(#"Expanded fxGetDividendCA", each ([fxGetDividendCA.Column1] = "Dividend Yield:")) 在#"Filtered Rows"