连接到PostgreSQL DB时在Power Query中参数化源

时间:2019-06-28 14:07:30

标签: excel postgresql powerquery m

使用.Net data provider for postgresql,我想创建一个excel工作簿,该工作簿从给定的架构中加载一些表。使用excel工作簿中的命名范围设置架构,每个架构的表名都相同。

我尝试了以下操作:

将名为“ SchemaIdParam”的查询“从其他来源” /“空白查询”定义为

let
    rng= Excel.CurrentWorkbook(){[Name="schemaid"]}[Content]
in
    rng

(在工作簿中定义了“ schemaid”这个名称。)

将名为“ mytable”的“来自PostgreSQL数据库”的查询定义为

let
    src = PostgreSQL.Database("xxx.myhost.com:5235", "my_database"),
    tbl = src{[Schema=SchemaIdParam,Item="mytable"]}[Data]
in
    tbl

现在这不起作用。错误消息指出:“ [[Expression.Error]:键和表中的行之间不匹配”(自己的翻译)。但是,如果我用引号中的文字值替换SchemaIdParam,它将起作用。然后提供了正确的表格。

任何暗示我如何解决此问题的提示都非常感谢!

我要使用命名范围作为架构名称的原因是,我想以编程方式在excel之外设置架构名称。我非常乐意接受建议,以其他方式进行操作。

2 个答案:

答案 0 :(得分:1)

可能是类型错误。尝试将SchemaIdParam的值转换为文本,作为该查询的一部分,否则尝试

tbl = src{[Schema=Number.ToText(SchemaIdParam),Item="mytable"]}[Data]

答案 1 :(得分:0)

经过大量尝试,我找到了答案。我在定义e.g application_<cluster-timestamp>_<counter> cluster-timestamp = The start-time of the "ResourceManager" counter = Monotonically increasing counter for the application 时遇到问题。一个有效的定义是:

SchemaIdParam

即,我必须引用命名范围内的特定单元格。