请帮我弄清楚如何参数化 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]])
如果他们启用了隐私级别,他们会看到隐私级别提示。他们可以选择分配适当的隐私级别(在本例中可能是组织隐私级别),也可以在选项对话框中禁用隐私级别。