将参数从Power Query传递到T-SQL并仍然编辑查询

Justin_Is_Clock

是否可以在T-SQL查询中使用Power Query参数,但仍然允许我像链接图像一样在“编辑设置”部分中编辑源查询?我知道您可以通过“高级编辑器”屏幕来插入参数,但随后很难对查询进行其他编辑。

本质上,我仍然希望在SQL查询中使用该参数,但又不会失去轻松进行编辑的功能。我在Power BI(桌面)中使用Power Query。谢谢你的帮助。

我想做的屏幕截图示例

亚历克西斯·奥尔森(Alexis Olson)

是的,有可能。

创建该查询时,第一个“应用的步骤”(请参见屏幕快照的右侧窗格)将是如下所示的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语句的情况下加载该表,则查询应如下所示:

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)))

在这里,您可以使用date参数替换您选择的任何日期,以便现在整个查询如下所示:

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列和参数是相同的数据类型,否则会出现错误。)

现在,在“应用步骤”中的最后一步上单击鼠标右键,然后选择“查看本机查询”,您将看到PowerQuery实际上发送回服务器的生成的SQL代码。看起来像这样(参数是显式编写的)。

select [_].[Col1],
    [_].[Col2],
    [_].[Col3],
    [...]
from [dbo].[ABC] as [_]
where [_].[Date] = '2019-12-31' and [_].[Date] is not null

无论如何,关键是您可以在查询编辑器中工作,而无需修改查询字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章