5

Załóżmy, że mamy wymiar reprezentujący biura sprzedaży. Biura mogą się poruszyć, co oznaczałoby zmianę typu II. Chcielibyśmy śledzić operacje, które miały miejsce w lokalizacji starego biura, i operacje, które teraz będą miały miejsce w nowym, i wiedzieć, kiedy nastąpiła zmiana. Jak dotąd, tylko standardowy projekt typu II. Teraz powiedzmy, że biuro łączy się z innym biurem. Oznacza to, że działalność operacyjna dwóch pierwotnie odrębnych urzędów ("biur macierzystych") odbywa się obecnie w jednym biurze ("połączonym biurze"), co może być kontynuacją (fizycznie lub pod względem personelu) jednego lub dwóch pierwotnych biur, lub może to być nowe biuro, to znaczy z biznesowego punktu widzenia kontynuacja poprzednich dwóch.SCD typu II z podmiotami, które łączą się w czasie

Wymagania/analiza sprawozdań są następujące:

  • Chcemy, aby móc zobaczyć wszystkie bieżącej działalności do nowego biura scalonego.
  • Chcemy widzieć wszystkie czynności, które kiedykolwiek zostały wykonane przez połączone biuro lub przez biura macierzyste.
  • Chcemy mieć możliwość zobaczenia w czasie aktywności, która miała miejsce w jednym z biur macierzystych zarówno przed, jak i po fuzji, bez oglądania aktywności z drugiego biura macierzystego (przynajmniej przed połączeniem).

Nie jestem pewien, jak to modelować z dowolnym typem SCD. Jeśli po prostu zastąpimy dwie pozycje nadrzędnego biura pojedynczą nową i zaktualizujemy odpowiednio wszystkie tabele faktów, to zmienimy typ. To pozwala nam zobaczyć bieżącą aktywność w porządku, ale tracimy historię. Jeśli zachowamy oddzielne zapisy, nie dowiemy się o fuzji. Jeśli dodamy trzeci rekord do reprezentowania połączonego biura, stracimy także historię (który klucz naturalny by miał - żaden z kluczy naturalnych urzędów macierzystych nie byłby odpowiedni).

Czy muszę używać tabeli mostów/wielu do wielu? To wprowadza złożoność, której chciałbym uniknąć. Jeśli jednak jest to najlepszy sposób, to niech tak będzie. Nadal nie jestem pewien, jak to będzie zorganizowane. Być może tabela faktów wskazywałaby na wpis w biurze, a biura byłyby zgrupowane w wiele do wielu. Raportowanie byłoby przeprowadzane na podstawie grup, a nie bezpośrednio w wymiarze biura.

Odpowiedzi na ElectricLlama na pytania

  • Większość interakcji z użytkownikiem odbywa się za pomocą gotowych raportów, więc każdy złożoność z podstawowej struktury będzie ukryta przed nimi.
  • Niektórzy użytkownicy używają SQL lub SAS, aby uzyskać dostęp do danych. W tej chwili jest mało prawdopodobne, aby zajmowali się tym konkretnym problemem, ale to może się zmienić, ponieważ wprowadzamy więcej użytkowników za pomocą tych narzędzi.
  • Nie mamy pisarza zapytań w tym miejscu.
  • Nie sądzę, że będą fuzje wielopoziomowe, ale nie mogę definitywnie odmówić. Byłbym zaskoczony, gdyby tak było.
  • Nie wiem, jak uczynić tego rodzaju rzeczy łatwym dla użytkownika końcowego, co może być argumentem wystarczającym do złagodzenia pewnych wymagań.
+0

Q1: Ile poziomów scalania spodziewamy się zobaczyć? Czy możemy spodziewać się, że wiele biur na wielu poziomach zostanie połączonych z innymi biurami w przyszłości? A może oczekujemy tylko w najbardziej złożonych, wielu biurach łączących się w jedno biuro? Q2: "Aktywność w biurze macierzystym zarówno przed, jak i po fuzji". Oznacza to, że po scaleniu musisz w jakiś sposób śledzić czynności związane z połączonymi biurami. Czy to jest poprawne? –

+0

@ ElectricLlama: możliwe, że biuro, które jest wynikiem fuzji, może zostać połączone w pewnym momencie, chociaż nie mamy na to żadnych przykładów w obecnym czasie. Istnieje również możliwość podziału biur, choć jest to znacznie mniej prawdopodobne niż połączenie podstawowe lub złożone. Jeśli chodzi o twoje ostatnie pytanie, odpowiedź brzmi: tak, chciałbym śledzić wcześniej połączone działania. – siride

+0

Myślę, że trzecia opcja jest jedyną opcją - utwórz nowego członka - ponieważ jest to jedyny, który przechowuje wszystkie informacje. Wtedy jedynym wyzwaniem jest skojarzenie nowego członka z jego wcześniejszymi urzędami. Jest to podyktowane tym, w jaki sposób użytkownik końcowy otrzymuje te informacje. Czy ktoś buduje dla tego zapytania niestandardowe SQL, czy posiadasz samoobsługę lub czy masz raporty w puszkach z polem wyboru dla "powiązanych biur w tym raporcie"? Nie jestem świadomy jakiegoś konkretnego sukcesu, ale osobiście lubię unikać projektowania. –

Odpowiedz

1

Wolałbym najprostsze możliwe rozwiązanie, które klient mógłby zaakceptować, więc zrobiłbym następujące. chciałbym zapewnić dwa biura terenowego w wymiarze biurowej:

  1. Office_as_today
  2. Office_original

(oczywiście trzeba wybrać nazwy, które są dobre dla klienta) na początku tych dwóch pola będą ustawione równe. Kiedy dwa biura się połączą, powrócę do dwóch oryginalnych biur i zaktualizuję pole Office_as_today, z nazwą połączonego biura.

Nowe fakty (od scalenia) zostaną zarejestrowane w nowym wierszu z dwoma polami ponownie równymi.

Rozwiązanie jest bardzo proste i spełnia niemal wszystkie wymagania, z wyjątkiem braku możliwości śledzenia oryginalnych biur po scaleniu (tutaj podkreślam twoje "co najmniej").

+0

Te pola będą miały wymiar lub fakt? Zakładam ten wymiar, ale chcę tylko jasno. Jeśli chodzi o ostatni akapit, może to być akceptowalny kompromis. – siride

+0

W wymiarze. Zaktualizowałem odpowiedź. – momobo

+0

Myślę, że tak długo, jak istnieje tylko jedno połączenie w życiu biura (co będzie prawdą w prawdopodobnie> 95% przypadków), to rozwiązanie będzie najlepsze. Typ III to dobry kompromis. Wpadłem na pomysł, że mogę dołączyć tabelę, która przechowuje pełną historię w bardziej znormalizowany sposób, jeśli jest to wymagane, ale w większości przypadków tak się nie stanie. W związku z tym ta odpowiedź wystarcza. – siride