Power Query 参数化 - 在使用参数加载有限数量的行或完整的行集之间进行选择

Power Query Parametrization - Choose between loading a limited number of rows or a complete rowset using a parameter

我希望我在 PBI 中的 SQL 查询由参数定义。 Parameter1 是两个值 BigSmall 的列表。如果我将 Parameter1 设置为 Small,那么我只想加载一个数据样本。我是这样做的:

let
  ReturnQueryVar = (optional x) => 
  if Parameter1 = "Small" 
  then " and Product in (1, 2, 3)" 
  else "",

  Source = Sql.Database(
    "myservername", 
    "mydatabase",
    [
      Query = "
        select *
        from table
        where
        1=1"
        & ReturnQuery()
    ]
  )
in
  Source

我收到这个错误:

Expression.Error: 名称 'ReturnQuery' 未被识别。确保拼写正确。

更新。

捂脸!这是一个错字。 ReturnQuery 应该是 ReturnQueryVar.

不过,我想留下以下部分的问题:

  ReturnQueryVar = (optional x) => 
  if Parameter1 = "Small" 
  then " and Product in (1, 2, 3)" 
  else ""

PowerQuery 是否有 IF 的语法:

TextVar = IF(Parameter1 = 'S', 'This', 'That' )

我没见过这样的语法,但如果你愿意,你可以创建一个函数来实现,基本上是 Power QueryIF 语句的“容器”。

例如,您可以使用以下内容创建名为 IFBlank Query

(cond as logical, if_true as any, if_false as any ) => 
 if cond then if_true else if_false

在任何地方使用该函数都会有类似的结果和 IF 语句。

我只是在这里分享我最终得到的一个 PowerQuery 片段。此代码允许您在两个备用查询之间选择一个参数 - 第一个用于样本,另一个用于完整行集。它只允许从大型 table 下载一小部分行到 Power BI Desktop。

let
  QueryCode = if Query_Parameter = "Sample" 
  then 
  "select 1" 
  else 
  "select 2",

  Source = Sql.Database(
    "MyServer", 
    "MyDataBase",
    [ Query = QueryCode ]
  )
in
  Source

在此之前,在 Power Query 编辑器 > 管理参数 > 添加名为 Query_Parameter 的新参数,其中包含 2 个文本值作为列表:“Sample”和“Full”,并基于此参数查询的来源变化。只需将“select 1”替换为任何缩小行的内容,如“select top 1000...”或添加 WHERE 条件。 “select 2”是包含完整行集的查询。