#azure-data-factory #azure-data-factory-2
#azure-data-factory #azure-data-factory-2
Вопрос:
У меня есть требование загружать значение null, если общее количество часов меньше предыдущего общего количества часов, иначе разница
iif(lesser(TOTAL_HOURS, PREVIOUS_TOTAL_HOURS),null(),TOTAL_HOURS-PREVIOUS_TOTAL_HOURS)
Это дает мне, что выражение не может быть оценено.
Не все строки имеют значения для этих полей, некоторые из них имеют значение null. Это числовые поля в базе данных.
Я просто хочу заменить отрицательные результаты на null
Ответ №1:
Если вы посмотрите на документ iif, в нем говорится
iif(<condition> : boolean, <true_expression> : any, [<false_expression> : any]) => any
В зависимости от условия применяется одно или другое значение. Если значение other
не указано, оно считается НУЛЕВЫМ. Оба значения должны быть совместимы (числовые, строковые …).
Теперь, согласно вашему выражению:
iif(lesser(TOTAL_HOURS, PREVIOUS_TOTAL_HOURS),null(),TOTAL_HOURS-PREVIOUS_TOTAL_HOURS)
поскольку первое указанное вами значение имеет тип null
, который он ожидает TOTAL_HOURS-PREVIOUS_TOTAL_HOURS
, оно также должно возвращать тот же тип null
Что вы можете попробовать, так это:
iif(lesser(TOTAL_HOURS, PREVIOUS_TOTAL_HOURS),toInteger(null()),TOTAL_HOURS-PREVIOUS_TOTAL_HOURS)
или
case(TOTAL_HOURS < PREVIOUS_TOTAL_HOURS, toInteger(null()), minus(TOTAL_HOURS,PREVIOUS_TOTAL_HOURS) )