Данные SSAS и SCD типа 2

Мне не удается получить ожидаемый результат с данными SSAS и SCD типа 2. Ниже я перечислил простые таблицы, которые я использую, выходные данные SSAS, которые я получаю, и выходные данные SSAS, на которые я надеюсь. Я считаю, что SSAS должен иметь возможность извлекать данные так, как мне хотелось бы; Я считаю, что у меня просто возникают трудности с правильным подключением :).

Таблицы, которые я использую

DimClient
ID (PK)     AltID (Business Key)     Name        Start Date     End Date
1           1                        Client A    01/01/1995     01/31/1995
2           1                        Client ABC  02/01/1995     NULL

FactSales
ID (PK)     ClientID    Sales     SalesDate
1           1           $100      01/15/1995
2           1           $200      02/15/1995
3           1           $300      03/15/1995

Плюс таблица DimDate, в которой каждая дата с 01.01.1900 -> 31.12.2050 введена как PK, плюс их различные атрибуты, такие как День месяца, День недели и т. Д. И т. Д.

Выходы (текущие и ожидаемые)

Я пытаюсь просмотреть данные клиентов по месяцам и получаю следующее:

Month       Client      Sales
January     Client A    $100
February    Client A    $200
March       Client A    $300

Когда я ожидаю (и хочу) это увидеть:

Month       Client      Sales
January     Client A    $100
February    Client ABC  $200
March       Client ABC  $300

Почему мой куб SSAS не распознает, что клиент A был изменен на клиент ABC в феврале и марте?

Надеюсь, что вы немного поймете, как сейчас подключен мой куб:

-FactSales ClientID связан с DimClient AltID
-FactSales SalesDate связан с моим полем PK DimDate

Мне не удалось каким-либо образом связать DimClient с DimDate.

Спасибо за ваш вклад и помощь в решении моей проблемы!


person wh4tshisf4c3    schedule 09.01.2015    source источник


Ответы (1)


Вам нужно использовать другие ключи для связывания FactSales и DimClient.

Это идентификатор DimClient и новый ключ, описанный ниже.

Затем добавьте еще один ключ в FactSales (скажем, ClientSCD) и сопоставьте его на этапе ETL следующим образом:

update f set f.ClientSCD = isnull(c.ID,0)
/* if you have default NONE member with ID = 0 */
FactSales f
left join DimClient c
on f.ClientID = c.AltID
and f.SalesDate between c.[Start Date] and isnull(c.[End Date],'12/31/9999')

Используйте DimClient.ID и FactSales.ClientSCD в своем кубе в качестве ссылки.

person Alex Peshik    schedule 12.01.2015
comment
Спасибо, Алекс. Ваше решение создает именно то, что я искал! - person wh4tshisf4c3; 12.01.2015