PowerBI--自定义列-多条件IF语句

时间:2018-11-08 20:13:01

标签: powerbi dax

这里的初学者,迫切需要您的帮助。

基本上,我需要一个新列来获取图像中显示的任一列的值,除非这两列均为空。如果两者都为空,则新列应显示“未输入纪律”​​。

我的PowerBI版本仅在“编辑查询”窗口中添加了一个自定义列选项。我尝试了以下解决方案,但显然存在概念错误,没有正确使用解决方案。 感谢您的耐心配合和帮助!

Custom Formula Columns

4 个答案:

答案 0 :(得分:3)

获得“ Expression.Error:名称...”错误的原因是,您试图在Power Query编辑器中输入DAX公式。 Power Query使用另一种称为“ M”的语言,并且无法识别DAX。您可以通过两种方式解决此问题:

1)退出查询编辑器,然后在PowerBI窗口中转到“建模”选项卡并创建“新列”。在此处输入DAX公式;

2)如果您想解决Power Query中的问题,请在此处创建一个自定义列,然后输入以下“ M”公式:

each List.First(List.RemoveNulls({[PIDISK], [PI_DISK]}), "No Disk Entered"))

公式的工作方式:List.RemoveNulls从您提供的列列表中删除空值。然后从结果中选择第一个值;如果没有,则使用默认选项(“未输入磁盘”)。只要确保您的NULL真正为空即可。

答案 1 :(得分:0)

如果您想在DAX中执行此操作,建议您使用SWITCH ( TRUE() ...)方法来代替嵌套的if语句(this article会详细说明)。我相信这会产生预期的结果;根据您的屏幕截图,我认为这些空值是文本字符串vs. NULL。如果它是真实的NULL,则PowerBI使用BLANK()

= SWITCH (
    TRUE (),
    [PIDISC] <> "null", [PIDISC],
    [PI_DISC] <> "null", [PI_DISC],
    "no disc entered"
)

计算为TRUE()的第一个条件将优先。

答案 2 :(得分:0)

嵌套的IF对此还不错:

IF([PIDISC] = "null" && [PI_DISC] = "null",
   "NO DISC ENTERED,
   IF([PIDISC] = "null",
      [PI_DISC],
      [PIDISC]
   )
)

IF([PIDISC] <> "null",
   [PIDISC],
   IF([PI_DISC] <> "null",
      [PI_DISC],
      "NO DISC ENTERED"
   )
)

如果这些是空白而不是文本“ null”,那么它看起来可能会有所不同。

IF(ISLBANK([PIDISC]) && ISBLANK([PI_DISC]),
   "NO DISC ENTERED,
   IF(ISLBANK([PIDISC]),
      [PI_DISC],
      [PIDISC]
   )
)

IF(NOT(ISLBANK([PIDISC])),
   [PIDISC],
   IF(NOT(ISBLANK([PI_DISC]),
      [PI_DISC],
      "NO DISC ENTERED"
   )
)

编辑:

由于您尝试在查询编辑器中工作,因此您的M语言自定义列可能如下所示:

if [PIDISC] = "null" and [PI_DISC] = "null"
 then "NO DISC ENTERED"
else if [PIDISC] = "null" then [PI_DISC]
else if [PI_DISC] = "null" then [PIDISC]
else "Else Condition"

if [PIDISC] = "" and [PI_DISC] = "" then "NO DISC ENTERED"
else if [PIDISC] = "" then [PI_DISC]
else if [PI_DISC] = "" then [PIDISC]
else "Else Condition"

答案 3 :(得分:0)

怎么了?根据您是否具有“空”字符串或blank()值,这两种方法均应起作用:

“空”

New Column =
SWITCH (
    TRUE (),
    AND ( [PIDISC] = "null", [PI_DISC] = "null" ), "NO DISC ENTERED",
    [PIDISC] = "null", [PI_DISC],
    [PI_DISC] = "null", [PIDISC]
)

已测试:

enter image description here

BLANK()

New Column =
SWITCH (
    TRUE (),
    AND ( ISBLANK([PIDISC]), ISBLANK([PI_DISC]) ) , "NO DISC ENTERED",
    ISBLANK ( [PIDISC] ), [PI_DISC],
    ISBLANK ( [PI_DISC] ), [PIDISC]
)

希望这会有所帮助!