OnLine Analytical Processing (OLAP) Kostki OLAP i zapytania MDX 24 kwietnia 2014 Opis pliku z zadaniami Wszystkie zadania na zajęciach będą przekazywane w postaci plików PDF sformatowanych jak ten. Będą się na nie składały różne roadzje zadań, ale za każdym razem będą odpowiednio oznaczone: Zadania do wykonania na zajęciach oznaczone są symbolem nie są one punktowane, ale należy je wykonać w czasie zajęć. Punktowane zadania do wykonania na zajęciach oznaczone są symbolem należy je wykonać na zajęciach i zaprezentować prowadzącemu. Zadania do wykonania w domu oznaczone są symbolem - są one punktowane, należy je dostarczyć w sposób podany przez prowadzącego i w wyznaczonym terminie (zwykle do dwóch dni przed kolejnymi zajęciami). Po zakończeniu zajęć proszę o udzielenie odpowiedzi na kilka pytań zebranych w ankietę dostępną pod adresem http://goo.gl/gqo1uc 1
Stworzenie kostki OLAP dla bazy danych MSD Projekt kostki OLAP tworzymy za pomocą narzędzia Microsft SQL Server Data Tools, które jest częścią MS SQL Server i MS Visual Studio. Poniżej przedstawione są kroki tworzenia kostek OLAP na przykładzie bazy danych Million Song Dataset (MSD). Krok 1: Stworzenie nowego projektu Analysis Services Z okna New Project należy wybrać Analysis Services Multidimensional and Data Mining Project. Struktura nowego projektu jest następująca: Krok 2: Źródło danych Aby zdefiniować nowe źródło danych dla naszej kostki musimy wybrać polecenie New Data Source z menu kontekstowego pozycji Data Sources (w Solution Explorer): 2
Wybieramy połączenie z naszą bazą danych zawierającą dane MSD (jeżeli takie połączenie nie zostało zdefiniowane na wcześniejszych zajęciach, to należy to teraz uczynić klikając New): Następnie określamy sposób uwierzytelniania: 3
Ostatni krok kreatora definiowania źródła danych wyświetla podsumowanie informacji o połączeniu. Aby zakończyć klikamy Finish: Krok 3: Perspektywa źródła danych W kolejnym kroku definiujemy perspektywę źródła danych, czyli z jakich danych będziemy korzystać. W tym celu musimy wybrać polecenie New Data Source View z menu kontekstowego pozycji Data Source Views: 4
Wybieramy źródło danych: Wskazujemy tabele i perspektywy ze źródła danych: 5
Rezultatem powinien być następujący widok schematu naszej bazy danych: Krok 4: Kostka danych Aby zdefiniować nową kostkę danych należy wybrać polecenie New Cube z menu kontekstowego pozycji Cubes: 6
Wybieramy sposób tworzenia kostki tak, aby wykorzystano istniejące tabele w naszej bazie MSD: W kolejnym kroku wśród tabel ze źródła danych wskazujemy tabelę faktów: 7
Dalej definiujemy miary: Następnie musimy wybrać tabele wymiarów: 8
Po zakończeniu pracy kreatora kostki powinniśmy zobaczyć następujący widok: Krok 5: Definicja wymiarów i hierarchie W tym kroku musimy uzupełnić definicje wymiarów (Dates, Songs, Users) o wykorzystywane atrybuty oraz ich hierarchie. Aby edytować dany wymiar klikamy na niego dwukrotnie w widoku Solution Explorer lub wybieramy Open z jego menu kontekstowego: 9
Strukturę wymiaru definiujemy w widoku Dimension Structure. Aby uzupełnić definicję wymiaru o atrybuty musimy je przeciągnąć z tabeli w obszarze Data Source View do drzewka w obszarze Attributes. Aby zdefiniować hierarchię musimy przeciągnąć pozycję ID wymiaru oraz poszczególne atrybuty z obszaru Attributes do obszaru Hierarchies. Należy pamiętać o odpowiedniej kolejności atrybutów w tabelece w obszarze Hierarchies! Przykładowo dla wymiaru czasu najpierw ustawiamy rok, później miesiąc i dzień. Możemy też nadać nazwę naszej hierarchii, np. Date dla wymiaru Dates. 10
Zależności pomiędzy atrybutami można edytować w widoku Attribute Relationships: W analogiczny sposób jak zaprezentowano powyżej dla wymiaru Dates definiujemy atrybuty i hierarchie dla pozostałych wymiarów. Dla piosenek nie będą nam potrzebne tzw. text id. 11
Krok 6: Tworzenie kostki i umieszczenie jej w bazie danych Aby uruchomić proces tworzenia kostki należy wybrać polecenie Process z menu kontekstowego naszej solucji: Po chwili ukaże sie okno Process Database. Klikamy w nim przycisk Run w celu uruchomienia procesu generowania kostki danych: 12
Jeżeli proces zakończy się sukcesem, otrzymamy komunikat podobny do poniższego: Nasza kostka OLAP powinna znaleźć się w bazie danych MS SQL Server. Krok 7: Zapytania MDX do zdefiniowanej kostki Na naszych zajęciach będziemy tworzyć zapytania w jęzku MDX do zdefiniowanej kostki w narzędziu SQL Server Management Studio. Stworzymy nowe, puste zapytanie MDX. W tym celu wybieramy menu File, dalej New i Analysis Services MDX Query. Ukaże nam się okno Connect to Server, z domyślnie wybranym typem serwera Analysis Services (pole Server type). Klikamy Connect: Aby operować na stworzonej kostce danych musimy ją wybrać z pola combo Available Databases znajdującym się na pasku narzędzi: 13
Po wybraniu kostki przy edytorze zapytań zobaczymy szczegółowe infomacje o hierarchii w widoku Metadata. W edytorze możemy już pisać swoje zapytania. Aby wykonać wszystkie lub tylko zaznaczone klikamy przycisk Execute lub klawisz F5. 14
Przegląd języka MDX w MS SQL Server Poniżej zaprezentowano składnię prostego zapytania w języku MDX z użyciem klauzul WITH, SELECT, FROM i WHERE: [WITH <s p e c y f i k a c j a f o r m u l y > [, <s p e c y f i k a c j a f o r m u l y >.. ] ] SELECT [< s p e c y f i k a c j a o s i > [, <s p e c y f i k a c j a o s i >... ] ] FROM [< s p e c y f i k a c j a k o s t k i >] [WHERE [< s p e c y f i k a c j a p l a s t r a >] ] Na dzisiejszych zajęciach będziemy między innymi wykorzystywali następujące operatory, funkcje i właściwości języka zapytań MDX: Operator & W języku MDX możemy odwołać się do elementu wymiaru przez jego nazwę lub klucz. Operator ampersand (&) jest używany do odróżniania klucza elementu od nazwy. Przykład: (a) odwołanie się do elementu przez klucz: [Time].[2nd half].&[q4], (b) odwołanie się przez nazwę elementu: [Time].[2nd half].[4th quarter]. W skrócie: symbol (&) oznacza wyszczególnienie konkretnego elementu członkowskiego. Operator zakresu : Pozwala wykorzystać naturalny porządek elementów do utworzenia zbioru zawierającego się w podanym zakresie. Funkcja ALL Zawiera wszystkie elementy potomne dla danego wymiaru. Domyślnie, każdy wymiar nieprzyporządkowany do żadnej osi reprezentowany jest w klauzuli WHERE przez człon ALL. Funkcja MEMBERS Pozwala w łatwy sposób otrzymać wszystkie elementy należące do danego poziomu, hierarchii czy też wymiaru. Funkcja CHILDREN Zwraca dzieci, czyli elementy leżące w hierarchii poniżej wybranego elementu. Funkcja CROSSJOIN Funkcja CROSSJOIN(zbiór1,zbiór2) zwraca iloczyn kartezjański zbiorów zbiór1 i zbiór2. zbiór2 nie może zawierać żadnych wymiarów wykorzystywanych w zbiorze zbiór1. Operator * Jest odpowiednikiem funkcji CROSSJOIN: CROSSJOIN(zbiór1,zbiór2) zbiór1 * zbiór2. Funkcja ORDER Funkcja ORDER(zbiór,wyrażenie[,ASC DESC]) porządkuje elementy zbioru zgodnie z regułami określonymi przez wyrażenie. Wartość ostatniego parametru jako ASC porządkuje elementy rosnąco, a DESC malejąco. 15
Funkcja FILTER Funkcja FILTER(zbiór,warunek) zwraca krotki należące do zbioru elementów zbiór, spełniające kryteria selekcji określone przez warunek. Klauzula WITH MEMBER Umożliwia definiowanie nowych elementów w oparciu o wcześniej powstałe struktury wielowymiarowe kostki. Użycie: WITH MEMBER <rodzic członu>.<nazwa członu> AS wyrażenie Rozwiązanie Można szybko przejść ze studentami przez przykłady z pliku intro.mdx. Źródła: http://technet.microsoft.com http://www.staff.amu.edu.pl/ aniap/bazy%20ii/jezyk%20mdx.htm ftp://ftp.kamsoft.pl/pub/archiwum/ks-pbc/dokumenty%20og%c3%b3lne/podstawy%20mdx.pdf http://journals.bg.agh.edu.pl/automatyka/2010-01/auto05.pdf 16
1 Zapytania MDX max 15p. Treść Sformułuj poniższe zapytania w języku MDX. Przy treści każdego zapytania znajduje się zrzut ekranowy spodziewanego wyniku oraz liczba punktów do uzyskania. 0. Przykład: Wyświetl liczbę odsłuchań piosenek zespołu Queen w poszczególnych miesiącach lat 2001, 2002 i 2003. SELECT { [ Dates ]. [ Date ]. [ Year ]. & [ 2 0 0 1 ] : [ Dates ]. [ Date ]. [ Year ]. & [ 2 0 0 3 ] } ON COLUMNS, { [ Dates ]. [ Month ]. Members} ON ROWS FROM MSD WHERE [ Songs ]. [ A r t i s t ]. & [ Queen ] 1. Porównaj ze sobą liczbę odsłuchanych utworów zespołów Queen i Aerosmith, w latach 2001-2003. (1p.) 2. Wykonaj powyższe zapytanie dla lat 2001-2010 wykorzystując operator zakresu :. (1p.) 17
3. Ponownie wykonaj powyższe zapytanie, ale wykorzystując funkcję MEMBERS. (1p.) 4. Porównaj liczbę odsłuchań zespołów Queen i Aerosmith w miesiącach 2001 roku wykorzystując funkcję CHILDREN. (1p.) 5. Wykonaj podobne zapytanie do zapytania 4 dla miesięcy bez uwzględnienia lat. (1p.) 18
6. Wyświetl odsłuchania utworów zespołów Queen i Aerosmith w latach 2001-2010. Nazwa zespołu i tytuł piosenki powinny pojawić się w wierszach raportu. Wykorzystaj funkcję CROSSJOIN lub operator *. (2p.) 7. Wyświetl odsłuchania utworów zespołu Queen w latach 2001-2010 posortowane po liczbie odsłuchań w roku 2001. Wykorzystaj funkcję ORDER. (2p.) 19
8. Wykonaj podobne zapytanie do zapytania 7 ale odfiltruj utwory grane więcej niż 21 razy w roku 2001. Wykorzystaj funkcję FILTER. (2p.) 9. Porównaj ze sobą liczbę odsłuchanych utworów zespołów Queen i Aerosmith, kolejno w latach 2008 i 2007. Wyświetl dodatkowy wiersz zawierający różnice odsłuchań pomiędzy 2008 a 2007 rokiem. Wykorzystaj klauzulę WITH MEMBER. (2p.) 10. Podobnie jak w zapytaniu 9 porównaj odsłuchania utworów zespołów Queen i Aerosmith w latach 2008 i 2007. Wyświetl dodatkowy wiersz zawierający różnice odsłuchań oraz dodatkową kolumnę zawierającą sumy odsłuchań obu zespołów dla poszczególnych lat. Wykorzystaj klauzule WITH MEMBER. (2p.) 20
Zadania wykonujemy samodzielnie na zajęciach w dowolnej kolejności. Zadania, których student nie wykona na zajęciach powinien dokończyć w domu i przesłać prowadzącemu w pliku w formacie IMIE NAZWISKO NRINDEKSU.mdx, tak aby prowadzący mógł łatwo otworzyć i wykonać zapytania. W pliku proszę zamieścić komentarze z imieniem, nazwiskiem, numerem indeksu oraz numerami poszczególnych zapytań (komentarze poprzedza się podwójnym myślnikiem --). Za zadania wykonane w domu przysługuje maksymalnie połowa punktów możliwych do zdobycia podczas wykonywania danych zadań na zajęciach. Rozwiązanie Odpowiedzi znajdują się w pliku mdx queries.mdx. 21