Jaki jest właściwy sposób modelowania danych w schemacie gwiazdowym, tak że narzędzie BI (takie jak PowerBI) może wybrać zakres daty przekraczania wielu dni?

Obecnie mam stoły faktów, które mają oddzielne wymiary daty i godziny. Moja rozdzielczość odbywa się na drugą, data rezolucja jest na dzień.

Obecnie jest bardzo łatwy do wykonania agregację, zapewniającym dane zainteresowania, jest tego samego dnia, a nawet wiele całkowitych dni, ale staje się znacznie bardziej skomplikowany, gdy pytasz, powiedzmy, 12-godzinne okno walcujące przecina granicę północy .

Tak, mogę napisać oświadczenie SQL, aby najpierw wyciągnąć wszystkie wiersze za całe życie danego dnia, a następnie przechowywanie rzeczywistej daty w polu w tabeli faktów, mogę jeszcze bardziej filtrować do rzeczywistego zakresu czasu I " M Interesuje się, ale nie w niektórych przypadkach nie jest trywialne (lub możliwe), aby zrobić w narzędziach raportowania BI.

Jednak musi to być częstym scenariuszem w magazynach danych ... więc jak należy to zrobić?

Przykładem byłoby mi liczenie zamówionych elementów z tabeli fact_orders między 2017 / stycznia / 02 1600 a 2017 / stycznia / 03 0400.

Zamówienia są przechowywane indywidualnie w tabeli fact_orders.

W moim rzeczywistym scenariuszu używam Azure SQL bazy danych, ale jest to bardziej ogólne pytanie projektowe.

Dziękuję Ci.

1
Blootac 17 luty 2017, 02:17

2 odpowiedzi

Najlepsza odpowiedź

Moja pierwsza opcja byłaby (jak wspominasz w pytaniu), aby uwzględnić obliczoną kolumnę (datę + czas) w zapytaniu SQL, a następnie przefiltrować część czasu wewnątrz narzędzia BI.

Jeśli to nie działa, możesz utworzyć widok w bazie danych, aby osiągnąć ten sam efekt. Najłatwiej jest wziąć pełny dołączony fakt + Wymiary Zapytanie SQL, które chcesz użyć w narzędziu BI i dodać kolumnę daty w widoku.

Pamiętaj, aby nadal filtrować się w polu daty, aby umożliwić indeksowanie! Więc dla twojego przesuwnego okna twoje parametry byłyby coś takiego

WHERE Date between 2017/Jan/02 AND 2017/Jan/03 AND DateTime between 2017/Jan/02 1600 and 2017/Jan/03 0400

Jeśli to nie wystarczy wystarczająco dobrze z powodu woluminów danych, możesz skonfigurować i utrzymywać oddzielną tabelę lub zmaterializowany widok (w zależności od opcji DB i ETL), która robi kartezjański dołączy do wymiaru czasu z małym zakresem Wymiar daty (tylko w zeszłym tygodniu lub jakiś okres zainteresowany raportami dniach częściowych), a następnie dołączyć do tabeli faktów.

Tabela / widok DataTimewindow byłby indeksowany w kolumnie DateTime i mieć tylko dwie dodatkowe kolumny: Datekeey i Timeyey. Wewnętrzny Dołącz do tabeli faktów za pomocą obu kluczy i powinieneś uzyskać dokładnie okno, które chcesz, gdy narzędzie BI dostarcza zasięg datetime.

1
Cyrus 17 luty 2017, 08:25

To nie jest łatwe do modelowania. Rozwiązaniem byłoby zbudowanie dodatkowego wymiaru z datą + czasem. Oczywiście może to oznaczać, że musisz poważnie ograniczyć ziarnistość wymiaru czasu.

10-letnia Granularność Godzina: 365 * 10 * 24 = 87600 rzędów

10-letni ziarnistość: 365 * 10 * 24 * 60 = 5256000 rzędów

Możesz użyć tylko tego wymiaru lub (lepiej) Dodaj go i nie pokazuj go wszystkim użytkownikom. Oznacza to dodatkowy klucz w tabeli faktycznych: Jeśli FT nie jest gigantycznie, żadna wielka sprawa.

1
momobo 17 luty 2017, 15:30