在 Power Query 中使用参数

在 Power Query 中使用参数

请帮我弄清楚如何参数化 Power Query。

我构建了一个 PowerQuery 查询,它查询 Web 服务中的特定数据并以正确的方式对其进行操作。假设我查询任务管理系统以获取我今天的任务。查询可能看起来像:

Web.Contents("http://intranet/tasks?assignee=John", [Content=Text.ToBinary("")]),

它运行良好,但我想与我的同事分享这个包含此查询的工作簿,以便他们可以将它用于自己的任务。

Web.Contents("http://intranet/tasks?assignee={INPUT HERE}", [Content=Text.ToBinary("")]),

理想情况下,我希望在某个地方有一个名为“受让人”的参数(例如在工作簿的单元格中)。我希望此工作簿的用户能够输入他们想要查询的受让人,例如 Peter,这样当他们刷新数据时,查询就会像这样使用他们的参数

Web.Contents("http://intranet/tasks?assignee=Peter", [Content=Text.ToBinary("")]),

我不希望他们打开 PowerQuery 编辑器并编辑查询代码,因为我们的用户会非常害怕这样做,而且可能会犯错误。我认为在工作簿中选择受让人的单元格是最实用的方法。

这可能吗?如果可能的话,怎么做?

谢谢

答案1

我在互联网上找到了这个解决方案,这正是我所寻找的。

创建一个新的查询,打开高级编辑器并粘贴以下代码:

let GetValue=(rangeName) => 
    let
      name = Excel.CurrentWorkbook(){[Name=rangeName]}[Content],
      value = name{0}[Column1]
    in
      value
    in GetValue

保存它,现在您有一个查询函数,您可以在另一个查询中使用它,如下所示:

GetValue("Password")

它的作用是在工作簿中查找名为“密码”的范围,并获取该范围内第一个单元格的值。

答案2

您可以使用Query记录传递参数。如果单元格值存储在上一步中Name,您可以使用公式栏中的 fx 按钮添加新步骤,并添加以下公式:

= Web.Contents("http://intranet/tasks", [Content=Text.ToBinary(""), Query=[assignee = Name]])

如果他们启用了隐私级别,他们会看到隐私级别提示。他们可以选择分配适当的隐私级别(在本例中可能是组织隐私级别),也可以在选项对话框中禁用隐私级别。

相关内容