将参数从 Power Query 传递到 T-SQL 并仍然编辑查询
Pass a Parameter from Power Query to T-SQL and Still Edit Query
是否可以在 T-SQL 查询中使用 Power Query 参数,但仍允许我像在链接图像中那样编辑 "Edit Settings" 部分中的源查询?我知道您可以通过“高级编辑器”屏幕插入参数,但之后很难对查询进行其他编辑。
基本上,我仍然希望在 SQL 查询中使用该参数,但又不会失去轻松进行编辑的能力。我在 Power BI(桌面)中使用 Power Query。感谢您的帮助。
是的,有可能。
当您创建该查询时,第一个应用步骤(请参阅屏幕截图中的右侧窗格)将是 M 代码,如下所示:
= Sql.Database("server", "db", [Query="SELECT * FROM ABC WHERE Date = [Parameter]"])
如果你有一个参数Param
,你可以像这样编辑动态代码:
= Sql.Database("server", "db", [Query="SELECT * FROM ABC WHERE Date = "&Text.From(Param)])
但是,PowerQuery 可以执行自己的查询折叠,这在许多情况下可能会更容易、更高效。
如果您在不使用 SQL 语句的情况下加载 table,您的查询应该如下所示:
let
Source = Sql.Database("server", "db"),
dbo_ABC = Source{[Schema="dbo",Item="ABC"]}[Data]
in
dbo_ABC
从那里你可以在你的 Date
列上应用过滤器(从下拉列表中选择任何日期),这应该会产生另一个看起来像这样的步骤:
#"Filtered Rows" = Table.SelectRows(dbo_ABC, each ([Date] = #date(2019, 12, 31)))
在这里,您可以用日期参数替换您选择的任何日期,这样现在您的整个查询如下所示:
let
Source = Sql.Database("server", "db"),
dbo_ABC = Source{[Schema="dbo",Item="ABC"]}[Data],
#"Filtered Rows" = Table.SelectRows(dbo_ABC, each ([Date] = Param))
in
#"Filtered Rows"
(请确保 Date
列和参数的数据类型相同,否则会出错。)
现在右键单击“应用步骤”中的最后一步,然后选择 'View Native Query',您将看到生成的 SQL 代码,PowerQuery 实际上正在发送回服务器。它看起来像这样(明确写入参数)。
select [_].[Col1],
[_].[Col2],
[_].[Col3],
[...]
from [dbo].[ABC] as [_]
where [_].[Date] = '2019-12-31' and [_].[Date] is not null
无论如何,重点是您可以在查询编辑器中工作,而不用修改查询字符串。
是否可以在 T-SQL 查询中使用 Power Query 参数,但仍允许我像在链接图像中那样编辑 "Edit Settings" 部分中的源查询?我知道您可以通过“高级编辑器”屏幕插入参数,但之后很难对查询进行其他编辑。
基本上,我仍然希望在 SQL 查询中使用该参数,但又不会失去轻松进行编辑的能力。我在 Power BI(桌面)中使用 Power Query。感谢您的帮助。
是的,有可能。
当您创建该查询时,第一个应用步骤(请参阅屏幕截图中的右侧窗格)将是 M 代码,如下所示:
= Sql.Database("server", "db", [Query="SELECT * FROM ABC WHERE Date = [Parameter]"])
如果你有一个参数Param
,你可以像这样编辑动态代码:
= Sql.Database("server", "db", [Query="SELECT * FROM ABC WHERE Date = "&Text.From(Param)])
但是,PowerQuery 可以执行自己的查询折叠,这在许多情况下可能会更容易、更高效。
如果您在不使用 SQL 语句的情况下加载 table,您的查询应该如下所示:
let
Source = Sql.Database("server", "db"),
dbo_ABC = Source{[Schema="dbo",Item="ABC"]}[Data]
in
dbo_ABC
从那里你可以在你的 Date
列上应用过滤器(从下拉列表中选择任何日期),这应该会产生另一个看起来像这样的步骤:
#"Filtered Rows" = Table.SelectRows(dbo_ABC, each ([Date] = #date(2019, 12, 31)))
在这里,您可以用日期参数替换您选择的任何日期,这样现在您的整个查询如下所示:
let
Source = Sql.Database("server", "db"),
dbo_ABC = Source{[Schema="dbo",Item="ABC"]}[Data],
#"Filtered Rows" = Table.SelectRows(dbo_ABC, each ([Date] = Param))
in
#"Filtered Rows"
(请确保 Date
列和参数的数据类型相同,否则会出错。)
现在右键单击“应用步骤”中的最后一步,然后选择 'View Native Query',您将看到生成的 SQL 代码,PowerQuery 实际上正在发送回服务器。它看起来像这样(明确写入参数)。
select [_].[Col1],
[_].[Col2],
[_].[Col3],
[...]
from [dbo].[ABC] as [_]
where [_].[Date] = '2019-12-31' and [_].[Date] is not null
无论如何,重点是您可以在查询编辑器中工作,而不用修改查询字符串。