Power Query 中的嵌套 if 语句

Nested if statement in Power Query

我昨天发现并开始使用 Power Query。我写了一些查询来填充三个下拉列表,第二个和第三个取决于第一个中选择的内容,第三个则进一步取决于第二个中选择的内容。

当我在这些列表中创建可能项目的列表时,我在每个列表的顶部添加了一条“全部”记录作为我查询的一部分。我在填充第二个列表时使用了 if 语句,它基本上说 如果用户在第一个框中选择了全部,则获取所有记录,否则返回记录,其中特定列中的值等于已选择的值在第一个列表中.

然而,由于第三个列表需要检查是否在第一个和第二个列表框中都选择了“全部”,我相信我需要做两个 if 语句。我昨天整个下午都在互联网上搜索以找到一个成功有限的两个嵌套 if 语句的示例,每当我尝试自己做时,我都会遇到各种语法错误,我缺少令牌 Eof 或令牌 then 或逗号是丢失等等。

谁能给我一个简单的例子,说明如何布置嵌套的 if 语句?

谢谢

更新:

感谢您的回答。我仍然有真正的问题。这是我的查询,目前有效。

if Wholesaler_Cmbo_Lnkd_Cell <> "All wholesalers" then

let

    Source = Table.SelectRows(Query_GSR, each [Wholesaler number] = Wholesaler_Cmbo_Lnkd_Cell),
    #"GroupedSource" = Table.Group(Source, {"Month_Name", "Year_No", "Item Category", "Item Category Type", "Tariff status", "Weekday","Transaction type","Group number","Customer account number"}, {{"Gross sales", each List.Sum([Gross sales])},
                                                                                                                                            {"Rebates", each List.Sum([Rebates])},
                                                                                                                                            {"Net sales", each List.Sum([Net sales])},
                                                                                                                                            {"Direct materials", each List.Sum([Direct materials])},
                                                                                                                                            {"Packaging", each List.Sum([Packaging])},
                                                                                                                                            {"Lab consumables", each List.Sum([Lab consumables])},
                                                                                                                                            {"QC costs", each List.Sum([QC costs])},
                                                                                                                                            {"Stock adjustments", each List.Sum([Stock adjustments])},
                                                                                                                                            {"Product margin", each List.Sum([Product margin])},
                                                                                                                                            {"Gross profit", each List.Sum([Gross profit])},
                                                                                                                                            {"Carriage income", each List.Sum([Carriage income])},
                                                                                                                                            {"Carriage expense", each List.Sum([Carriage expense])},
                                                                                                                                            {"Orders", each List.Count([ID])}})
in

    #"GroupedSource" 

else

let

    Source = Query_GSR,
    #"GroupedSource" = Table.Group(Source, {"Month_Name", "Year_No", "Item Category", "Item Category Type", "Tariff status", "Weekday", "Transaction type", "Group number", "Customer account number"}, {{"Gross sales", each List.Sum([Gross sales])},
                                                                                                                                            {"Rebates", each List.Sum([Rebates])},
                                                                                                                                            {"Net sales", each List.Sum([Net sales])},
                                                                                                                                            {"Direct materials", each List.Sum([Direct materials])},
                                                                                                                                            {"Packaging", each List.Sum([Packaging])},
                                                                                                                                            {"Lab consumables", each List.Sum([Lab consumables])},
                                                                                                                                            {"QC costs", each List.Sum([QC costs])},
                                                                                                                                            {"Stock adjustments", each List.Sum([Stock adjustments])},
                                                                                                                                            {"Product margin", each List.Sum([Product margin])},
                                                                                                                                            {"Gross profit", each List.Sum([Gross profit])},
                                                                                                                                            {"Carriage income", each List.Sum([Carriage income])},
                                                                                                                                            {"Carriage expense", each List.Sum([Carriage expense])},
                                                                                                                                            {"Orders", each List.Count([ID])}})
in

    #"GroupedSource"

我知道我的布局很糟糕 - 需要改进。我更希望它看起来像这样:

if Wholesaler_Cmbo_Lnkd_Cell <> "All wholesalers" then

let

    Source = Table.SelectRows(Query_GSR, each [Wholesaler number] = Wholesaler_Cmbo_Lnkd_Cell)

in

    Source

else

let

    Source = Query_GSR

in

    Source

let

    #"GroupedSource" = Table.Group(Source, {"Month_Name", "Year_No", "Item Category", "Item Category Type", "Tariff status", "Weekday", "Transaction type", "Group number", "Customer account number"}, {{"Gross sales", each List.Sum([Gross sales])},
                                                                                                                                            {"Rebates", each List.Sum([Rebates])},
                                                                                                                                            {"Net sales", each List.Sum([Net sales])},
                                                                                                                                            {"Direct materials", each List.Sum([Direct materials])},
                                                                                                                                            {"Packaging", each List.Sum([Packaging])},
                                                                                                                                            {"Lab consumables", each List.Sum([Lab consumables])},
                                                                                                                                            {"QC costs", each List.Sum([QC costs])},
                                                                                                                                            {"Stock adjustments", each List.Sum([Stock adjustments])},
                                                                                                                                            {"Product margin", each List.Sum([Product margin])},
                                                                                                                                            {"Gross profit", each List.Sum([Gross profit])},
                                                                                                                                            {"Carriage income", each List.Sum([Carriage income])},
                                                                                                                                            {"Carriage expense", each List.Sum([Carriage expense])},
                                                                                                                                            {"Orders", each List.Count([ID])}})


in

    #"GroupedSource"

它说需要一个标记 Eof,当我试图将整个东西包装在另一个 "let" 和 "in" 中时,它说第一个 #[= 需要一个标记逗号36=]。我已经尝试了各种额外的 "in" 和 "let" 包含,但显然我缺少对 "let"、"in" 如何分配答案的基本理解 "variables" 工作.

你知道我做错了什么吗?

PowerQuery 中的嵌套 if 语句如下所示:

if [condition1]
    then (if [condition2] then [true1-true2 result] else [true1-false2 result])
    else [false result]

您还可以在 else 条件中添加一个 if:

if [condition1]
    then (if [condition2] then [true1-true2 result]  else [true1-false2 result])
    else (if [condition3] then [false1-true3 result] else [false1-false3 result])

好的,这完全不同,这可能是我在学习如何正确使用 Power Query。我用下面的代码实现了同样的事情:

let
    Source = Query_GSR,
    #"Added Custom" = Table.AddColumn(Source, "Orders", each if [Transaction type] = "Credit" then -1 else 1),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "WorkOutFilter", each if Wholesaler_Cmbo_Lnkd_Cell = "All wholesalers" then "Keep" else if [Wholesaler number] = Wholesaler_Cmbo_Lnkd_Cell then "Keep" else "Remove"),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom1", each ([WorkOutFilter] = "Keep")),
    #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"WorkOutFilter"})
in
    #"Removed Columns"

难以置信。我需要更少地思考我在编写代码,而更像这样,我在每条记录上而不是在代码中使用 if 语句!

再次感谢您的帮助 - 它确实有助于降低成本。

看起来您可以使用 Table.SelectRows 实现相同的效果(Power Query 相当于 Excel 中的过滤器)。您的代码修改如下。

let
    Source = Query_GSR,
    
    #"Added Custom" = Table.AddColumn(Source, "Orders", each if [Transaction type] = "Credit" then -1 else 1),
    
    Narrow = if Wholesaler_Cmbo_Lnkd_Cell = "" then #"Added Custom"
        else if Wholesaler_Cmbo_Lnkd_Cell = "All wholesalers" then #"Added Custom"
        else Table.SelectRows(#"Added Custom", each [Wholesaler number] = Wholesaler_Cmbo_Lnkd_Cell)
    
in
    Narrow

希望对您有所帮助。您可能希望对 Wholesaler_Cmbo_Lnkd_Cell 输入使用数据验证。

杰克