Power Query参数Table如何避免防火墙阻塞?
How to avoid firewall blockage in Power Query's Parameter Table?
This powerful custom fnGetParameter function 让您可以动态地将文件名插入到您的查询中。
但正因为如此,Data source settings
显示 Current Workbook
而不是 您实际导入的文件:
因此,正如许多人在 link 中评论的那样,它可能会导致此消息,例如,如果我尝试 Merge Queries
即 Table.NestedJoin()
:
Formula.Firewall: Query '{name}' (step '{step}') references other
queries or steps, so it may not directly access a data source. Please
rebuild this data combination.
示例数据
cities.csv
姓名
城市
约翰
纽约
史蒂夫
新泽西
cars.csv
姓名
汽车
史蒂夫
宝马
约翰
保时捷
Excel本身
table 名称=参数
参数
价值
城市
c:\users{输入您的用户名}\Downloads\cities.csv
汽车
c:\users{输入您的用户名}\Downloads\cars.csv
城市查询
let
Source = Csv.Document(File.Contents(fnGetParameter("cities")),[Delimiter=",", Columns=2, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Name", type text}, {"City", type text}})
in
#"Changed Type"
汽车查询
let
Source = Csv.Document(File.Contents(fnGetParameter("cars")),[Delimiter=",", Columns=2, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Name", type text}, {"Car", type text}}),
#"Merged Queries" = Table.NestedJoin(#"Changed Type", {"Name"}, cities, {"Name"}, "cities", JoinKind.LeftOuter),
#"Expanded cities" = Table.ExpandTableColumn(#"Merged Queries", "cities", {"City"}, {"City"})
in
#"Expanded cities"
需要的输出是左上合并table:
通过替换使用中间人没有帮助:
Source = Csv.Document(File.Contents(fnGetParameter("cars")),
有:
middleman = File.Contents(fnGetParameter("cars"),
Source = Csv.Document(middleman),
或
middleman=fnGetParameter("cars"),
Source = Csv.Document(File.Contents(middleman),
当我选择过度忽略隐私级别时,它当然有效,但我宁愿不走那条路,尤其是它似乎不是保存在文件中,而是保存在特定文件路径下的注册表中计算机。
还有其他方法可以避免防火墙错误吗?
我的临时解决方案是运行这个VBA暂时禁用防火墙:
ThisWorkbook.Queries.FastCombine = True
...refresh connections or edit queries
ThisWorkbook.Queries.FastCombine = False
This powerful custom fnGetParameter function 让您可以动态地将文件名插入到您的查询中。
但正因为如此,Data source settings
显示 Current Workbook
而不是 您实际导入的文件:
因此,正如许多人在 link 中评论的那样,它可能会导致此消息,例如,如果我尝试 Merge Queries
即 Table.NestedJoin()
:
Formula.Firewall: Query '{name}' (step '{step}') references other queries or steps, so it may not directly access a data source. Please rebuild this data combination.
示例数据
cities.csv
姓名 | 城市 |
---|---|
约翰 | 纽约 |
史蒂夫 | 新泽西 |
cars.csv
姓名 | 汽车 |
---|---|
史蒂夫 | 宝马 |
约翰 | 保时捷 |
Excel本身
table 名称=参数
参数 | 价值 |
---|---|
城市 | c:\users{输入您的用户名}\Downloads\cities.csv |
汽车 | c:\users{输入您的用户名}\Downloads\cars.csv |
城市查询
let
Source = Csv.Document(File.Contents(fnGetParameter("cities")),[Delimiter=",", Columns=2, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Name", type text}, {"City", type text}})
in
#"Changed Type"
汽车查询
let
Source = Csv.Document(File.Contents(fnGetParameter("cars")),[Delimiter=",", Columns=2, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Name", type text}, {"Car", type text}}),
#"Merged Queries" = Table.NestedJoin(#"Changed Type", {"Name"}, cities, {"Name"}, "cities", JoinKind.LeftOuter),
#"Expanded cities" = Table.ExpandTableColumn(#"Merged Queries", "cities", {"City"}, {"City"})
in
#"Expanded cities"
需要的输出是左上合并table:
通过替换使用中间人没有帮助:
Source = Csv.Document(File.Contents(fnGetParameter("cars")),
有:
middleman = File.Contents(fnGetParameter("cars"),
Source = Csv.Document(middleman),
或
middleman=fnGetParameter("cars"),
Source = Csv.Document(File.Contents(middleman),
当我选择过度忽略隐私级别时,它当然有效,但我宁愿不走那条路,尤其是它似乎不是保存在文件中,而是保存在特定文件路径下的注册表中计算机。
还有其他方法可以避免防火墙错误吗?
我的临时解决方案是运行这个VBA暂时禁用防火墙:
ThisWorkbook.Queries.FastCombine = True
...refresh connections or edit queries
ThisWorkbook.Queries.FastCombine = False