Я считаю, что ваша логика правильна, но я бы посоветовал вам разбить все эти цепочечные условия на отдельные производные столбцы, особенно если через него будет проходить 1 млн строк.
Первая причина - производительность. Разбивая операции на более мелкие части, механизм потока данных может лучше использовать преимущества параллелизма. Исследование. Могут ли разные комбинации компонентов влиять на производительность потока данных? . Цитата денег от SQL CAT по теме
Наше тестирование показало, что если вы хотите изменить более одного столбца
в потоке данных с помощью задачи «Производный столбец» существует производительность
Преимущество разделения этого преобразования на несколько производных столбцов
задачи. В этой заметке мы покажем, что делать много мелких кусочков
работа в нескольких задачах производного столбца значительно быстрее, чем
делать всю работу в более сложной работе в одной производной колонке
задача.
Вторая причина - ремонтопригодность. Редактор выражений не только недружелюбен и не прощает, но и делает проверку промежуточных значений невероятно сложной.
Демо
Я собрал пакет воспроизведения, который использует задачу сценария для отправки N строк вниз по потоку данных с тем же значением во всех столбцах, что и номер строки. В первом потоке данных я изменяю значения Checksum и Premium при загрузке в диспетчер соединений кеша (для имитации различий в значениях поиска). Четные строки должны иметь нулевую контрольную сумму, а каждый третий ряд должен иметь нулевой премиум.
В этом потоке данных я использовал как исходное выражение (все в одной проверке), так и разбил его на проверку по условию.
Как вы можете , может быть увидеть в просмотрщике данных, прикрепленном к задаче «битовая корзина», измененные столбцы с именами после исправления имеют значение True только тогда, когда есть разница между исходным значением и значением поиска. (Строка, соответствующая 0 , является точной, поскольку (ISNULL(LookupTaxes) ? 0 : LookupTaxes)
приводит к тому, что нулевые значения равны нулю.
Если бы вы были на этом этапе, я бы заменил преобразование "битовая корзина" условным разбиением
- Имя выхода = UpdateRequired
- Состояние =
[TaxesChanged] || [ChecksumChanged] || [FeeIncomeChanged]|| [CommissionReceivedChanged] || [CommissionPaidChanged] || [PremiumChanged]
Если у вас по-прежнему возникают проблемы, вы можете включить средство просмотра данных в конвейер, чтобы найти условия, которые не оцениваются должным образом.