Установка идентификатора в таблице фактов из таблицы измерений

В моей таблице измерений для отмененных вызовов у меня есть ID 1, код NO, ID 2, код YES. Я хочу загрузить эти идентификаторы в таблицу фактов, основываясь на том, был ли вызов отменен с помощью объединения.

Однако проблема в том, что значение Abandoned в моей базе данных равно NULL для NO и 1 для YES.

Поэтому, когда я присоединяюсь

 INNER JOIN datamartend.dbo.Abandoned_Call_Dim 
         ON incoming_measure.Abandoned = Abandoned_Call_Dim.abandoned_code

Это тянет без результатов?

Есть идеи по этому поводу?

В основном то, что нужно, это:

Я хочу, чтобы оставленный идентификатор из покинутого измерения был равен 2, если оставленное значение в показателе равно нулю, и оставленный идентификатор 2, если не равен нулю

Спасибо

2 ответа

Можете ли вы проверить, возможно ли вам использовать функцию декодирования для идентификатора, прежде чем присоединиться.

Декодировать (значение) = присоединяющийся столбец

или попробуйте использовать COALESCE(REPLACE(COL, VAL_TO_B_REPLACE_IF_NOT_NULL), VALUE_TO_REPLCE_WHEN_NULL)

Вы можете использовать предложение CASE WHEN, чтобы обойти это (или ISNULL, но случай, когда он более переносим между различными механизмами БД)

 INNER JOIN datamartend.dbo.Abandoned_Call_Dim 
         ON case when incoming_measure.Abandoned is null then '0' 
                 else  incoming_measure.Abandoned end 
          = case when Abandoned_Call_Dim.abandoned_code is null then '0' 
                 else Abandoned_Call_Dim.abandoned_code end 

Это заменит нули на 0. Пока у вас нет кода 0, все будет в порядке. Если вы это сделаете, попробуйте -1 или другое значение, которое, как вы знаете, отсутствует в возможном наборе кодов.

Еще одна вещь, которую нужно сделать, если у вас есть неизвестный набор кодов, это сделать соединение и добавить:

 OR (incoming_measure.Abandoned is null and Abandoned_Call_Dim.abandoned_code is null)

Который технически не присоединяется - он перекрестно соединяет нулевые записи (и до тех пор, пока есть только один нулевой, который имеет значение для оставленного вызова dim, у вас все хорошо).

Другие вопросы по тегам