PowerBI - Пользовательский столбец - Несколько операторов условия - PullRequest
0 голосов
/ 08 ноября 2018

Начинающий здесь, отчаянно нуждающийся в вашей помощи.

По сути, мне нужен новый столбец, чтобы взять значение любого столбца, показанного на изображении, если только оба столбца не равны нулю. Если оба значения равны NULL, то в новом столбце должно быть написано: «Не введена дисциплина».

В моей версии PowerBI добавлена ​​только опция настраиваемого столбца в окне редактирования запросов. Я попытался поработать над приведенными ниже решениями, но у меня, очевидно, произошла ошибка концепции, и я не использовал решения соответствующим образом. Я ценю ваше терпение и помощь!

Специальная формула Колонны

Ответы [ 4 ]

0 голосов
/ 09 ноября 2018

Причина появления ошибок «Expression.Error: The name ...» в том, что вы пытаетесь ввести формулы DAX в редакторе Power Query. 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 действительно нулевые.

0 голосов
/ 09 ноября 2018

Вложенный 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"
   )
)

EDIT:

Поскольку вы пытаетесь работать в редакторе запросов, ваш пользовательский столбец языка 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"
0 голосов
/ 09 ноября 2018

Что случилось? Любой из них должен работать в зависимости от того, есть ли у вас «нулевые» строки или пустые значения ():

"пустой"

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]
)

Надеюсь, это поможет!

0 голосов
/ 09 ноября 2018

Если вы хотите сделать это в DAX, я рекомендую использовать метод SWITCH ( TRUE() ...) вместо вложенных операторов if (которые эта статья прекрасно объясняет). Я считаю, что это должно привести к желаемому результату; основываясь на вашем скриншоте, я предположил, что эти нули были текстовыми строками против NULL. Если это правда NULL, PowerBI использует BLANK().

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

Первое условие, которое оценивается как TRUE(), будет иметь приоритет.

...