【问题标题】:Limiting data pulled with Power Query using a Parameter使用参数限制使用 Power Query 提取的数据
【发布时间】:2019-12-12 00:34:20
【问题描述】:

我有一个 Power Query,它从一个非常大的表(超过一百万行)中提取数据。当我尝试添加参数时,无论我把它放在查询中的哪个位置,查询都会拉取整个表,然后根据参数对其进行过滤。提取所有信息需要整整一分钟,所以我的问题是:

有没有办法构建 Power Query,使其仅根据参数提取我想要的数据,而不是整个表?

谢谢! :)

连接正在使用 Excel 的获取数据功能,并且参数正在作为过滤器的一部分输入

下面是查询类型的示例,其中 BegPer 和 EndPer 是开始和结束参数:

let
Source = Sql.Databases("TIRPROD-MIRROR"),
SLZZZAPP = Source{[Name="SLZZZAPP"]}[Data],
dbo_AcctHist = SLZZZAPP{[Schema="dbo",Item="AcctHist"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(dbo_AcctHist,{{"FiscYr", Int64.Type}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each [FiscYr] >= BegPer and [FiscYr] <= EndPer)

在 #"过滤的行"

【问题讨论】:

  • 您使用的是哪种连接方式?你是怎么设置参数的?请举例说明你在做什么。对于大多数数据库连接器,PQ 应该能够在后端转换为 SQL,因此它返回的唯一数据是该查询的结果。但是,如果您通过 ODBC 在某些东西上运行,它就无法做到这一点,您唯一的选择是将单个初始自定义 SQL 查询作为字符串发送。
  • 我编辑了我的问题以添加更多信息。我大部分都是自学的,所以我做事的方式可能看起来有点奇怪。

标签: parameters powerquery


【解决方案1】:

是的,您可以连接到 SQL Server,然后在“高级选项”下插入您的 SQL 语句。 然后,创建一个参数。之后,编辑您的查询步骤,在 SQL 连接中您将看到您的查询,您可以修改并插入您想要的参数。

在高级查询编辑器中查看此示例:

let
    Source = Sql.Database("my_server", "my_database", [Query="SELECT *  FROM [my_database]. 
       [dbo].[table1] Where column1 = '" & parameter & "'"])
in
    Source

语法很奇怪,所以你必须尝试一下。 请参阅此内容以供参考: https://community.powerbi.com/t5/Desktop/How-do-I-pass-parameters-to-my-SQL-statement/td-p/118716

https://channel9.msdn.com/Blogs/MVP-Azure/Pass-parameter-to-SQL-Queries-statement-using-Power-BI

【讨论】:

    【解决方案2】:

    好的,我测试了一些东西,看起来问题是您没有选择初始数据库。似乎没有选择初始数据库会导致它以本机查询折叠不支持的方式编写查询。如果您尝试使用菜单选项再次创建查询,但选择了初始数据库,则它编写的代码将从此更改:

    Source = Sql.Databases("TIRPROD-MIRROR"),
    SLZZZAPP = Source{[Name="SLZZZAPP"]}[Data],
    dbo_AcctHist = SLZZZAPP{[Schema="dbo",Item="AcctHist"]}[Data],
    

    进入这个:

    Source = Sql.Database("TIRPROD-MIRROR", "SLZZZAPP"),
    dbo_AcctHist = Source{[Schema="dbo",Item="AcctHist"]}[Data],
    

    (您当然可以手动编辑现有查询中的代码以匹配此内容)。当它像这样设置时,一切都应该在后端正确转换为 SQL。您可以通过右键单击右侧“已应用步骤”列表中的步骤并查看“本机查询”是否可以选择或显示为灰色来检查此过程是否正在发生。如果您可以选择它,它将显示正在运行的后端 SQL。如果没有,那么这意味着它正在工作的最后一步的所有数据将被完全下载以在本地处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      相关资源
      最近更新 更多