Поток данных ADF: присвоение нулевого значения отрицательному результату

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

введите описание изображения здесь

введите описание изображения здесь