Сравнение значений null в Power Query

Недавно мне нужно было сделать очень простую операцию в Power Query. В столбце с числами нужно было выполнить проверку «значение меньше N» и в новом столбце вывести соответствующий текст. Функция дополнительного столбца выглядит примерно так:

На самом деле некоторые значения — null (то есть пустые):

Данные содержат null и в результате сравнения возникает ошибка

И такая простая операция возвращает ошибку для этих значений!

Почему? Есть некоторая ловушка, спрятанная в глубинах документации (а именно на странице 67 PDF-файла  “Power Query Formula Language Specification (October 2016)”, который можно найти тут.

Если коротко, то вот краткая выжимка из документации:

Значения   null  можно сравнивать на равенство, но null равен только null:

Но если вы хотите сравнить   null с любым другим значением при помощи относительного оператора (например, <, >, <=, >=), тогда результат сравнения будет не логическое значение типа   true или  false, а именно  null. В разделе “6.7 Relational operators” об этом есть маленькое замечание:

If either or both operands are null , the result is the null  value.

Так и в чем уловка? В выражении if…then…else после слова if должно идти логическое значение (например, как результат какого-то сравнения):

Когда мы сравниваем (практически любые) значения одного типа, мы в результате получаем логическое значение: true  или  false . Но  в случае с   null  мы получим логическое значение только в случае, если мы сравниваем null на равенство:

НО если мы сделаем относительное сравнение  null с SomeValue, тогда результат — НЕ логическое значение (он будет null), и выражение if…then…else вернет ошибку:

Как избавиться от этой ошибки, если ваши данные содержат null и замена его на другое значение не подходит вам по каким-либо причинам?

Из сказанного выше очевидно, что мы должны проверить значение на равенство с null, и только если оно не равно null — выполнить относительное сравнение.

Нужно построить корректное выражение сравнения, добавив проверку на null на первое место. В моем случае должно получиться такое выражение:

Убедитесь, что вы сначала проверяете значения на равенство с  null ! Выражение if…then…else выполняет последовательное вычисление условий, и если первым условием будет идти относительное сравнение, ошибка снова появится и наследуется до конца расчета выражения:

Сначала проверяйте на равенство null, иначе ошибка опять появится

 

Share this
Номер недели ISO в Power Query / M и Power BI

Добавить комментарий

Your email address will not be published / Required fields are marked *