Na początek, to zależy od tego, czy chcesz zrobić prosty początkowego transferu danych lub coś bardziej wyrafinowane (np przyrostowego). Zakładam, że wykonujesz wstępny transfer danych.
Say tabela element ma kolumny w następujący sposób: id, cat1, cat2, cat3, cat4, ...
Zakładając kategorie 1-4 mają kolumny id, cat_name
można załadować dim_cat1 (tabela wymiarów z kategorii pkt 1) w następujący sposób:
insert into dim_cat1 (cat_name)
select distinct cat1 from item_table;
można wykonać to samo dla wszystkich pozostałych kategorii/tabel wymiarów. Zakładam, że tabele wymiarów automatycznie generują identyfikatory. Teraz, aby załadować tabelę fakt:
insert into fact_table (id, cat1_id, cat2_id, cat3_id, cat4_id, ...)
select id, dc1.id
from item_table it
join dim_cat1 dc1 on dc1.cat_name = it.cat1
join dim_cat2 dc2 on dc2.cat_name = it.cat2
join dim_cat3 dc3 on dc3.cat_name = it.cat3
join dim_cat4 dc3 on dc4.cat_name = it.cat4
...
Jeśli masz znaczną ilość danych, może to mieć sens, aby utworzyć indeksy nazw kategorii w item_table i może tabelach wymiarów.
Btw, jest to odpowiedź niezależna od bazy danych, nie pracuję z SSIS/SSAS: możesz mieć dostępne narzędzia, które usprawniają części tego procesu, ale naprawdę nie jest to trudne/czasochłonne do napisania zwykły SQL.