Parameters 使用参数限制通过Power Query提取的数据

Parameters 使用参数限制通过Power Query提取的数据,parameters,powerquery,Parameters,Powerquery,我有一个Power查询,它从一个超过一百万行的非常大的表中提取数据。当我尝试添加一个参数时,无论我把它放在查询的何处,查询都会拉取整个表,然后根据参数对其进行过滤。提取所有信息需要整整一分钟,所以我的问题是: 有没有一种方法可以构造Power查询,使它只根据参数而不是整个表提取我想要的数据 谢谢 连接使用Excel的“获取数据”功能,参数作为过滤器的一部分输入 下面是一个查询类型的示例,其中Begger和EndPer是开始和结束参数: let Source = Sql.Databases("TI

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

有没有一种方法可以构造Power查询,使它只根据参数而不是整个表提取我想要的数据

谢谢

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

下面是一个查询类型的示例,其中Begger和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)

筛选行

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

请参见高级查询编辑器中的此示例:

let
    Source = Sql.Database("my_server", "my_database", [Query="SELECT *  FROM [my_database]. 
       [dbo].[table1] Where column1 = '" & parameter & "'"])
in
    Source
语法很奇怪,所以你必须尝试一下。 请参见以下参考:


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

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。如果没有,则意味着它在最后一步工作时的所有数据都将完全下载到本地进行处理。

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