You are on page 1of 400

Wszelkie prawa zastrzeone.

Nieautoryzowane rozpowszechnianie caoci


lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione.
Wykonywanie kopii metod kserograficzn, fotograficzn, a take kopiowanie
ksiki na noniku filmowym, magnetycznym lub innym powoduje naruszenie
praw autorskich niniejszej publikacji.
Wszystkie znaki wystpujce w tekcie s zastrzeonymi znakami firmowymi
bd towarowymi ich wacicieli.
Autor oraz Wydawnictwo HELION dooyli wszelkich stara, by zawarte
w tej ksice informacje byy kompletne i rzetelne. Nie bior jednak adnej
odpowiedzialnoci ani za ich wykorzystanie, ani za zwizane z tym ewentualne
naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION
nie ponosz rwnie adnej odpowiedzialnoci za ewentualne szkody wynike
z wykorzystania informacji zawartych w ksice.
Redaktor prowadzcy: Ewelina Burska
Recenzent naukowy: prof. dr hab. in. Kazimierz Subieta
Projekt okadki: Studio Gravite/Olsztyn
Obarek, Pokoski, Pazdrijowski, Zaprucki
Materiay graficzne na okadce zostay wykorzystane za zgod iStockPhoto Inc.
Baz danych wykorzystan w zapytaniach analitycznych zamieszczonych w ksice
mona znale pod adresem: ftp://ftp.helion.pl/przyklady/hurdan.zip
Wydawnictwo HELION
ul. Kociuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (ksigarnia internetowa, katalog ksiek)
Drogi Czytelniku!
Jeeli chcesz oceni t ksik, zajrzyj pod adres
http://helion.pl/user/opinie?hurdan_ebook
Moesz tam wpisa swoje uwagi, spostrzeenia, recenzj.
ISBN: 978-83-246-5422-2
Copyright Helion 2011
Printed in Poland.
Pole ksik na Facebook.com

Ksigarnia internetowa

Kup w wersji papierowej

Lubi to! Nasza spoeczno

Oce ksik

Spis treci
Od autora ......................................................................................... 5
Rozdzia 1. Wstp .............................................................................................. 7
Rozdzia 2. Zapytania analityczne .................................................................... 13
Podstawy skadni ............................................................................................................ 13
Grupowanie w SQL ........................................................................................................ 18
Grupowanie nad oknem logicznym ................................................................................ 28
Operator COMPUTE ...................................................................................................... 32
Funkcje agregujce zdefiniowane przez uytkownika .................................................... 35

Rozdzia 3. Struktura hurtowni danych ............................................................... 43


Rola hurtowni danych w procesie przetwarzania ............................................................ 43
Proces integracji danych ................................................................................................. 46
Elementy hurtowni danych ............................................................................................. 48

Rozdzia 4. Integracja danych .......................................................................... 57


Wprowadzenie do Integration Services .......................................................................... 57
Prosta migracja danych ................................................................................................... 59
Kontener FOR LOOP ..................................................................................................... 72
Kontener FOREACH LOOP .......................................................................................... 83
Sprawdzanie zgodnoci danych ze sownikiem .............................................................. 94
Uruchamianie pakietw integracyjnych ....................................................................... 104
Wykorzystywanie zapyta SQL do migracji danych .................................................... 109

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych ........................... 119


Wstp do Analysis Services .......................................................................................... 119
Tworzenie podstawowej struktury hurtowni danych .................................................... 132
Modyfikacja struktury hurtowni danych ......................................................................... 146
Kostka o strukturze patka niegu ................................................................................. 160
Tworzenie hurtowni danych z zastosowaniem tabel porednich .................................. 163
Definiowanie zaawansowanych elementw kostki ....................................................... 173
Struktura uprawnie do korzystania z hurtowni danych ............................................... 184
Dodatkowe funkcjonalnoci Analysis Services ............................................................ 187

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL ............... 203


Podstawy skadni zapyta MDX ................................................................................... 203
Operacje na zbiorach atrybutw ................................................................................... 212
Definiowanie miar ad hoc ............................................................................................. 218
Definiowanie ad hoc zbiorw atrybutw ........................................................................ 225
Zastosowanie wskazania poziomu hierarchii do wyznaczania miar ............................. 230
Wywietlanie wielu poziomw hierarchii .................................................................... 234
Wyznaczanie miar jako wyrae dla rnych elementw i poziomw hierarchii ........ 236
Filtrowanie w zapytaniach MDX .................................................................................. 246
Wyznaczanie przedziaw i zakresw dla wymiarw ................................................... 251
Zastosowanie instrukcji warunkowych ......................................................................... 260
Zastosowanie funkcji agregujcych w zapytaniach MDX ............................................ 262
Definiowanie zoonej struktury dla wymiaru czasu .................................................... 267
Definiowanie operacji na zbiorach atrybutw .............................................................. 270
Funkcje analityczne i statystyczne w MDX .................................................................. 273
Podsumowanie wiadomoci o zapytaniach wybierajcych MDX ................................. 278
Tworzenie i testowanie nietrwaych struktur wielowymiarowych ................................ 287

Rozdzia 7. Raportowanie ............................................................................... 317


Zastosowanie MS Excel do tworzenia raportw dla hurtowni danych ......................... 317
Zastosowanie jzykw wyszego rzdu do tworzenia raportw ................................... 324
Zastosowanie Reporting Services podstawy ............................................................ 331
Konfigurowanie serwera http dla potrzeb Reporting Services ...................................... 339
Synchronizowanie raportw ......................................................................................... 346
Raporty o strukturze macierzowej ................................................................................ 356
Definiowanie akcji dla raportw ................................................................................... 361
Definiowanie grup hierarchicznych .............................................................................. 365
Raportowanie dla danych pochodzcych z hurtowni .................................................... 369

Rozdzia 8. Podsumowanie.
Co dalej z analitycznym przetwarzaniem danych? .......................... 383
Skorowidz .................................................................................... 387

Od autora
Szanowny Czytelniku, przekonywanie Ci o wielkoci wolumenw danych, ktre s
obecnie wykorzystywane w praktyce komercyjnej, o ich szybkim przyrocie, o znaczeniu
ich wydajnego i bezpiecznego przetwarzania jest truizmem. Jeli signe po t ksik,
masz ju tego pen wiadomo. Jedyn rzecz, do ktrej bd Ci usiowa przekona,
jest fakt, e przetwarzanie transakcyjne jest pocztkiem, a nie zwieczeniem moliwoci
i potrzeb wystpujcych w praktyce biznesowej. Jeli zastanowisz si nad tym, dla kogo
przeznaczane s wyniki oblicze i analiz, zauwaysz zapewne, e w duej mierze s to
osoby odpowiedzialne za podejmowanie decyzji na rnym poziomie zarzdzania przedsibiorstwem. To powinno wzbudzi w Tobie niepewno w stosunku do tego, co mog
zaoferowa im systemy transakcyjne. Jeli wywoao to w Tobie niepokj albo zainteresowanie, powiniene sign po t ksik. Jeli ju wiesz, e systemy transakcyjne nie
oferuj wszystkiego tego, czego potrzebujesz Ty albo potrzebuj Twoi przeoeni, na
pewno musisz j przeczyta. Rwnie jeeli jeste przekonany do roli i miejsca przetwarzania analitycznego, ta ksika jest wanie dla Ciebie.
Formalnie ksika ta jest adresowana do studentw informatyki oraz kierunkw zwizanych z zarzdzaniem i ekonomi, gdzie omawiane s zagadnienia przetwarzania analitycznego, hurtowni danych i systemw wspomagajcych podejmowanie decyzji. Zachcam jednak rwnie wszystkich pasjonatw szeroko pojtej tematyki baz danych do
lektury tej pozycji. Tak jak w przypadku poprzednich ksiek staraem si prowadzi wywd w taki sposb, aby zachowa moliwie prost jego posta, tak aby Czytelnik, ktry
nie ma duego dowiadczenia w przetwarzaniu transakcyjnym, mg w peni korzysta
z przedstawionego w niej materiau. Mam rwnie nadziej, e osoby o sporym dowiadczeniu znajd tu wiele przydatnych informacji, a prostota wywodu nie bdzie przeszkod,
ale pomoc w szybkim przyswojeniu zawartej w publikacji wiedzy. Przedstawiony zakres
materiau jest znacznym rozszerzeniem tego, ktry jest prezentowany podczas prowadzonych przeze mnie zaj z hurtowni danych na studiach drugiego stopnia w Wydziale
Elektrotechniki, Elektroniki, Automatyki i Informatyki Politechniki dzkiej oraz w Wyszej Szkole Informatyki. Na rozszerzenie skada si rozdzia powicony przetwarzaniu
analitycznemu po stronie transakcyjnej, realizowany wczeniej na zajciach powiconych serwerowi MS SQL, i omwienie tworzenia raportw, ktre nie ma swojego odzwierciedlenia w prowadzonych dotd przeze mnie zajciach.
Wszystkie przedstawione w tej ksice przykady zostay przeze mnie opracowane,
sprawdzone i przetestowane na rzeczywistej bazie danych, o strukturze zblionej do tych,

Hurtownie danych. Od przetwarzania analitycznego do raportowania

z jakimi moesz mie do czynienia w praktyce. Wierz bowiem, e jak powiedzia


Juliusz Cezar, nauczycielem wszystkiego jest praktyka. Dlatego staraem si przygotowywa przykady tak, aby dao si je albo zastosowa bezporednio do najczciej
spotykanych problemw, albo atwo zmodyfikowa do wasnych potrzeb. Aby uatwi
rozpoczcie pracy, przygotowana zostaa relacyjna baza danych, dostpna na stronie
wydawnictwa, ktra zawiera wyjciowy zestaw danych. Pozwala to na szybkie rozpoczcie praktycznego trenowania przykadw z jednoczesn moliwoci porwnania
zgodnoci wynikowych zestaww rekordw czy te wizualnej postaci wynikw.
Od lat utrzymuj bardzo dobre kontakty ze swoimi dyplomantami (a zebraa si ich spora
rzesza), z ktrych wikszo pracuje w firmach zajmujcych si tworzeniem oprogramowania komercyjnego, i wszyscy, jak jeden m, mwi, e brakuje na rynku specjalistw
rozumiejcych problematyk hurtowni danych i potraficych w praktyce t wiedz wykorzysta. Dlatego wierz, e opanowanie przedstawionego tutaj materiau moe Ci uatwi
start na rynku pracy, a jeeli ju pracujesz, pozwoli Ci na rozszerzenie zakresu Twoich
poszukiwa, jeli zechcesz zmieni prac. Rwnie w biecym miejscu pracy powiniene mie wiksze szanse na to, aby zosta zauwaonym przez kierownictwo, bo adresatem
Twoich dziaa przy budowie hurtowni bdzie wanie ono. Duo materiau zawartego
w tej ksice to rezultat wanie kontaktw z moimi byymi studentami. Dzikuj rwnie
moim doktorantom, ktrzy wspierali mnie duchowo podczas prac nad t publikacj. Byli
take pierwszymi recenzentami zawartych w niej przykadw oraz konsultantami w rozwizywaniu problemw powstajcych przy ich tworzeniu.
Prace nad t ksik trway o wiele duej, ni mogem wczeniej przypuszcza. Pomimo
uprzedniego przygotowania dominujcej wikszoci przykadw, ktre byy pokazywane na wykadach i analizowane podczas zaj w laboratorium, duo czasu zajo
mi wypracowanie w peni spjnej koncepcji prezentowania caoci materiau. Rwnie
przykady, ktre byy opracowywane ad hoc, aby wzbogaci czy uzupeni cao wywodu, spowodoway, e prace nad ksik trway o wiele duej, nibym chcia. Dlatego
jestem wdziczny Wydawnictwu, e cierpliwie czekao na ten produkt, chocia przekroczyem wszystkie moliwe terminy.
Ten dugi czas spowodowa, e moi NAJBLISI musieli uzbroi si w cierpliwo,
znoszc kolejne wieczory, ktre powicaem na pisanie. Dlatego chciabym Im
NAJSERDECZNIEJ podzikowa, zwaszcza e od duszego czasu syszeli tylko, ile
stron napisaem i ile jeszcze mi ich zostao. Niestety, nie mog Im obieca, e to ju
ostatnia ksika raczej nastpi cig dalszy.
Chciabym bardzo podzikowa Panu Profesorowi Stanisawowi Kozielskiemu za
nieocenion pomoc, ktrej dowiadczyem podczas wydawania poprzedniej publikacji.
Dobre emocje zwizane z tym zdarzeniem i przemie wraenia z kolejnych konferencji BDAS, ktrej Pan Profesor jest organizatorem, byy dla mnie podczas pracy jednym z najwaniejszych rde siy.
Rwnie serdecznie chciabym podzikowa Panu Profesorowi Kazimierzowi Subiecie
za yczliw i bardzo wnikliw recenzj niniejszej publikacji. Spotkania i dyskusje
z Nim prowadzone byy dla mnie wyjtkowo inspirujce.

Rozdzia 1.

Wstp

Aby da Czytelnikowi pen moliwo korzystania z przygotowanej bazy oraz prezentowanych skryptw, pozwol sobie przedstawi w skrcie podstawowe informacje
o elementach skadowych i organizacji MS SQL Server 2008. Po zainstalowaniu
oprogramowania, udostpnianego na zasadach licencji MSDN na wikszoci polskich
uczelni, lub uruchomieniu wersji treningowej o ograniczonym czasie uytkowania
powinnimy si poczy z serwerem. Najbardziej intuicyjnym narzdziem jest SQL
Server Management Studio, ktre jest dostpne z menu Start jako pozycja SQL Server
2008. Najpierw pojawia si okno dialogowe logowania przedstawione na rysunku 1.1.
Naley poda typ silnika Server type, ktry powinien mie warto Database Engine.
Innymi wartociami mog by serwery Integration Services, Reporting Services czy
Analysis Services bd o nich pisa w dalszej czci ksiki. Druga informacja to
nazwa serwera, ktra dla domylnej, pierwszej instancji bazy pokrywa si z nazw
komputera, na ktrym ten proces wykonano. Jeli jednak na tym samym komputerze
zainstalowane zostao MS Visual Studio, to razem z nim zainstalowany jest silnik serwera
w wersji Express, o czym naley pamita podczas dokonywania wyboru. Zawsze dostpna jest nazwa logiczna (local) lub . (kropka) odpowiadajca domylnej instancji
serwera. W przypadku wtpliwoci warto skorzysta z ostatniej pozycji listy <Browse>,
gdzie moemy wybra wykryte instancje lokalne, jak rwnie zarejestrowane w grupie roboczej lub domenie. Trzeci etap to wybr rodzaju uwierzytelnienia. Podczas instalacji sugerowany jest tzw. Mixed mode, w ktrego przypadku moliwe jest autoryzowanie si jako uytkownik systemu operacyjnego (Windows authentication) oraz
jako uytkownik serwera danych (SQL Server authentication). W tym pierwszym przypadku w stanie domylnym tylko uytkownicy z grupy Administratorzy bd mieli
moliwo logowania. Dla tego trybu nie jest konieczne podawanie adnych dodatkowych informacji, poniewa s one przejmowane od biecego uytkownika systemu
operacyjnego. W drugim trybie autoryzacji konieczne jest podanie nazwy uytkownika zdefiniowanego w SQL Server oraz jego hasa. Podczas instalacji tworzony jest
login sa, dla ktrego musimy poda haso inicjalne. W przykadzie z rysunku 1.1 zastosowano logowanie na konto superadministratora.
Po udanej prbie logowania powinnimy zobaczy hierarchiczn struktur serwera,
ktrej podstawow czci jest pozycja Databases, jak wida na rysunku 1.2. Najwaniejszymi elementami tej grupy s cztery bazy systemowe:

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 1.1. Definicja poczenia z baz


Rysunek 1.2.
Bazy systemowe,
treningowe
i uytkownika

master podstawowa baza systemowa, przechowujca wszystkie obiekty

systemowe (tabele, perspektywy), uszkodzenie tej bazy uniemoliwia prac


serwera;
msdb baza wykorzystywana podczas przetwarzania rozproszonego;
tempdb baza przechowujca wszystkie obiekty tymczasowe wystpujce

na poziomie instancji serwera, np. porednie stany sortowa, stany kursorw, etc.;
model baza stanowica szablon dla kadej nowo tworzonej bazy danych,

zawierajca midzy innymi perspektywy sownikowe; obiekty w niej


utworzone bd automatycznie kopiowane do kadej nowo tworzonej bazy;
nie jest to narzdzie CASE, czyli utworzone obiekty nie bd przenoszone
do ju istniejcych baz.
Pierwsze trzy bazy systemowe nie powinny by modyfikowane rcznie, a na pewno aden
z jej obiektw nie powinien by usuwany czy zmieniany. Dodanie nowych obiektw nie
jest niebezpieczne, ale nie zaleca si tego. Poza bazami systemowymi podczas instalacji
zwykle dodawane s bazy treningowe, np. Report Server, ReportServerTempDb,
AdwentureWorks, etc. Poza tym mog by tworzone nowe bazy uytkownikw.

Rozdzia 1. Wstp

Now baz mona utworzy za pomoc pierwszego polecenia menu podrcznego


New Database, ktre uruchamia odpowiednie okno edycyjne. Poniewa utworzenie
penej bazy danych, niezbdnej do przetrenowania wszystkich przykadw dostpnych
w tej ksice, a zwaszcza wypenienie jej sensownymi danymi moe by czasochonne i do uciliwe, w zamian doczmy do serwera istniejc baz danych.
Treningowa baza danych jest dostpna w postaci skompresowanego pliku na stronie
wydawnictwa. Po pobraniu jej na komputer lokalny i rozpakowaniu powinny pojawi si
dwa pliki o rozszerzeniach *.mdb i *.ldb. Pierwszy z nich jest plikiem danych i zawiera struktury logiczne obiektw i zapisane w nich fizyczne dane. Drugi jest plikiem
dziennika (loga) i zawiera informacje o logowaniach oraz operacjach wykonywanych
na obiektach bazy danych. Do funkcjonowania bazy s potrzebne oba pliki. Formalnie
plikw danych i loga moe by wicej, co jest wykorzystywane w duych bazach danych do zrwnoleglenia najwolniejszych procesw zapisu danych na noniku fizycznym i ich odczytu z niego. W takim przypadku s one umieszczane na rnych
dyskach. Poniewa przykadowa baza nie jest dua, nie zastosowano takiego dziaania, ktre jest nazywane partycjonowaniem fizycznym. Aby doczy istniejc baz
danych do serwera, naley z menu podrcznego wybra pozycj Attach (rysunek 1.3).
Rysunek 1.3.
Doczenie do
serwera przykadowej
bazy

Skutkiem wywoania tego polecenia jest pojawienie si okna dialogowego (rysunek 1.4).
Bezporednio po wywoaniu jest ono puste, dlatego przyciskiem Add naley wskaza
miejsce na dysku, gdzie znajduje si doczana baza danych. Wskazujemy plik danych *.mdb. W efekcie takiego postpowania okno dialogowe wypenia si danymi
przedstawionymi na rysunku 1.4. Informacje zawarte w grnym panelu dotycz nazwy fizycznej i logicznej bazy, lokalizacji wskazanego pliku danych, waciciela oraz
statusu. W dolnym zawarte s informacje o plikach skadajcych si na fizyczn
struktur bazy. Po zatwierdzeniu tych informacji przykadowa baza danych powinna
z powodzeniem zosta doczona do struktury logicznej serwera, czyli pojawi si jako
kolejny element drzewa w panelu Object Explorer.
Po doczeniu plikw bazy do logicznej struktury serwera s one dostpne do uycia,
jednak konsekwencj tego jest blokada moliwoci wykonywania na nich jakichkolwiek operacji z poziomu systemu operacyjnego (kopiowanie, przenoszenie, usuwanie).
Aby moliwe byo przeniesienie bazy do innej lokalizacji, na inny komputer, konieczne
jest jej odczenie, co mona zrealizowa z wykorzystaniem menu kontekstowego

10

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 1.4.
Wykaz plikw
przykadowej bazy

pozycja Tasks, polecenie Detach, jak pokazano na rysunku 1.5. Podmenu Tasks zawiera
inne uyteczne polecenia zwizane z migracj danych, takie jak: Export Data, pozwalajce na przeniesienie wybranych obiektw jednej bazy do innej, Copy Database, powodujce skopiowanie caej bazy danych do innej istniejcej, oraz Generate Scripts,
tworzce skrypt SQL, umoliwiajcy utworzenie wybranych elementw bazy cznie
z wypenieniem ich danymi. Ponadto dostpne s polecenia administracyjne odpowiedzialne za kopi (Back Up), odzyskiwanie (Restore) oraz wykonujce konsolidacj danych, zmniejszajc rozmiar plikw (Shrink).
Rysunek 1.5.
Przykad odczania
bazy w celu
wykonania operacji
dyskowych

Treningowa baza danych opisuje dziaalno firmy handlowej (hurtowni w rozumieniu


potocznym). Jej schemat relacyjny zosta zaprezentowany na rysunku 1.6. Moemy
go opisa w nastpujcy sposb. Firma sprzedaje towary, ktre s sklasyfikowane
wedug kategorii. Towary te produkowane s przez firmy z siedzibami w miastach pooonych w wojewdztwach. Towar kupuj klienci mieszkajcy w miejscowociach.

Rozdzia 1. Wstp

11

Dzialy
IdDzialu
Opis

Miasta

Klienci
Osoby
IdOsoby
IdDzialu
Nazwisk o

Wojewodztwa

IdKlienta

IdMiasta

IdFak tury

IdMiasta

IdW ojewodztwa

IdOsoby

Nazwisk o

Miasto

IdKlienta

Imie

Faktury

IdW ojewodztwa
W ojewdztwo

Data

Imie
Rok Urodz

Towar

W zrost
DataZatr

IdProducenta

IdKategorii

NazwaProducenta

IdTransak cji

IdProducenta

IdMiasta

IdFak tury

NazwaTowaru

IdTowaru

C ena

szt

C enaZak upu

Transakcje

IdSzefa

Zarobki
IdZarobk u
IdOsoby

Producenci

IdTowaru

Kategorie

Brutto

IdKategorii
NazwaKategorii

DataW y platy

Rysunek 1.6. Diagram schematu relacyjnego przykadowej bazy danych

Przy kadym zakupie wystawiana jest faktura, na ktrej w przypadku zakupu pewnej
iloci jednego typu towaru definiuje si transakcj. Na fakturze moe pojawi si
wiele transakcji. Kada faktura jest wystawiana przez pracownika naszej firmy, przypisanego do okrelonego dziau w strukturze organizacyjnej przedsibiorstwa. Kady
z pracownikw otrzymuje wiele rnego rodzaju wypat.
Tak opisana i zilustrowana graficznie struktura relacyjna wydaje si do atwa do
opanowania i nie powinna sprawia kopotu zwizanego z jej zrozumieniem. Chocia
jest oczywiste, e nie opisuje ona precyzyjnie wszystkich dziaa zwizanych z prowadzeniem firmy, w szczeglnoci dotyczcych wymogw ksigowoci, nie bdzie ona rozbudowywana, aby niepotrzebnie nie komplikowa i tak trudnych zagadnie zwizanych
z analiz danych. Ograniczenie to jest naturalnie spowodowane tylko chci utrzymania prostoty wywodu; prezentowana baza nie powinna by traktowana jako przykad
rzeczywistej struktury relacyjnej dla potrzeb komercyjnych. Dlatego zachcam Czytelnikw do jej rozbudowywania w celu wiczenia coraz bardziej zoonych zada.

12

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rozdzia 2.

Zapytania analityczne
Podstawy skadni
W praktyce komercyjnej spotykamy si z bardzo duymi wolumenami danych, najczciej przechowywanymi w postaci schematw relacyjnych. Ta ilo jest niekwestionowan zdobycz cywilizacji, a jednoczenie jej przeklestwem. Ze zgromadzonych
danych jeszcze nic nie wynika, nie nios w sobie adnej wiedzy. Nagromadzenie danych to nie jest jeszcze nauka (Galileusz). Aby uzyska jakkolwiek warto dodan,
musimy je przetworzy, a skutek tych operacji zrozumie.
Najczciej wykonywan operacj podczas analizy danych jest wybieranie ich z jednej lub wielu tabel. Najbardziej oglna, a zarazem elementarna posta zapytania wybierajcego moe zosta zapisana jako:
SELECT pola FROM relacja
WHERE warunek
GROUP BY pola
HAVING warunek
ORDER BY pola

Poszczeglne elementy przykadu mona opisa nastpujco:


pola reprezentuj list pl tabel (relacji) lub wyrae na nich opartych,

separowan przecinkami;
relacja stanowi definicj rda danych, tabel lub poczenie kilku tabel,

rwnie dynamicznych;
warunek jest wyraeniem zwracajcym zmienn logiczn (TRUE, FALSE, NULL).

Znakiem koczcym zapytanie jest rednik. Jednak zarwno podczas stosowania SQL,
jak i jego rozszerze proceduralnego (Transact-SQL), do analiz wielowymiarowych (MDX SQL) oraz zgbiania danych (DMX SQL) mona go pomin bez
szkody dla pniejszego przetwarzania skryptu. Mona jednak wskaza takie przypadki, kiedy przetwarzanie nie jest wykonywane poprawnie, dlatego e zosta pominity ten element skadniowy. Mona stwierdzi, e zapytania ze rednikiem na kocu
wykonuj si lepiej.

14

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Pomimo e zarwno w nazwach tabel, pl, jak i w poleceniach czy operatorach MS SQL
Server nie rozrnia wielkoci liter, w caej ksice stosowana bdzie notacja, w ktrej
stae elementy skadniowe zapyta (instrukcje, klauzule, operatory) zapisywane bd
duymi literami (kapitalikami). Pozostae elementy (nazwy pl i tabel, aliasy) nie bd
oznaczane w ten sposb. Taka forma jest tylko i wycznie wynikiem chci zachowania
przejrzystoci kodu, co jest szczeglnie istotne przy bardziej zoonym przetwarzaniu.
Jednymi z podstawowych informacji, jakich oczekujemy na skutek wykonania zapytania wybierajcego, jest wyznaczanie wyrae operujcych na polach tabel. Najczciej sigamy do podsumowa lub innych funkcji agregujcych: redniej, maksimum,
liczebnoci itp. Zapytanie w takim przypadku moe mie posta
SELECT Opis, Nazwisko, SUM(Brutto)
FROM Dzialy JOIN Osoby
ON Dzialy. IdDzialu=Osoby.IdDzialu
JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby
GROUP BY Opis, Nazwisko, Osoby.IdOsoby

Zapytanie to wyznacza sumy wypat brutto dla kadego z pracownikw firmy, wywietlajc obok nazw dziau. Poziom obliczania sumy jest wyznaczony przez najniszy poziom w hierarchii zawarty w klauzuli GROUP BY. Z przyczyn skadniowych
klauzula ta musi zawiera wszystkie pola przeznaczone do wywietlenia (wymienione
po sowie SELECT), na ktre nie dziaa funkcja agregujca. W prezentowanym przypadku dodane zostao rwnie pole IdOsoby, gdy przypuszczamy, e w naszym zestawie danych mog pojawi si osoby o takim samym nazwisku, pracujce w jednym
dziale. Uycie nazwy kwalifikowanej Osoby.IdOsoby wynika z koniecznoci identyfikacji rda pochodzenia tej kolumny. Wybr jednej z dwch tabel, w ktrych jest
ona zdefiniowana, nie jest istotny. Na rysunku 2.1 przedstawiono wntrze SQL Server
Management Studio z wyprowadzeniem wynikw przykadowego zapytania.
Rysunek 2.1.
Wykonanie zapytania
z funkcj agregujc
w SQL Server
Management Studio
z wyprowadzeniem
wynikw do postaci
tabelarycznej (grid)

Rozdzia 2. Zapytania analityczne

15

Dla wielu rodzajw zapyta wybierajcych przedstawienie ich wynikw w postaci tabelarycznej nie jest dostatecznie czytelne. Dotyczy to w duej mierze odwoa do
perspektyw sownikowych, gdzie zawarto kolumn moe by bardzo zoona, np.
zawiera ciao elementu proceduralnego funkcji, procedury lub wyzwalacza. Podobne problemy z czytelnoci moemy spotka rwnie przy przetwarzaniu zapyta
analitycznych, w szczeglnoci kiedy mamy do czynienia z wielopoziomowymi podsumowaniami. Dlatego warto rozway wyprowadzenie wynikowego zestawu rekordw do postaci tekstowej, jak pokazuje rysunek 2.2.
Rysunek 2.2.
Wykonanie zapytania
z funkcj agregujc
w SQL Server
Management Studio
z wyprowadzeniem
wynikw do postaci
tekstowej

Ten sposb prezentacji jest rwnie stosowany, kiedy wyniki wyprowadzane s do


pliku tekstowego ( ). Na tym etapie tworzymy do proste zapytania wybierajce.
Naley sobie jednak zdawa spraw z tego, e praktycznie wykonywane analizy wymagaj konstruowania zapyta o bardzo duej zoonoci formalnej, ktre bd prezentowane w dalszej czci tego rozdziau. Dlatego istotnym elementem bdzie proces optymalizacji skadni, tak aby zapytanie mogo by wykonywane jak najszybciej,
przy jednoczenie moliwie maym zuyciu zasobw systemu. Mamy tu do czynienia
z przykadem optymalizacji dwukryterialnej (czas, zasoby), ktra w oglnym przypadku nie posiada jednego i jednoznacznego rozwizania. Musimy zatem ustali pewien kompromis, ktry z tych parametrw jest dla nas istotniejszy. W wikszoci
przypadkw wielkoci t jest czas przetwarzania. Takiej optymalizacji moe suy
plan wykonania zapytania, ktry pokazuje formalny sposb realizacji zapytania z rozbiciem na czynnoci elementarne, sposobem ich powizania i kolejnoci przetwarzania. Przykad takiego planu dla analizowanego zapytania przedstawia rysunek 2.3.
Plan ten jest szacowany na podstawie analizy semantycznej zapytania. W rodowisku
SQL Serwer jest on reprezentowany graficznie z zastosowaniem opisanych ikon. Jako
dodatkowa informacja zawarty jest procentowy udzia elementarnych zada w koszcie przetworzenia caego zapytania. Dlatego warto ta nie moe by bezporednio
uywana do porwnywania dwch realizacji tego samego zapytania. Schemat narysowany jako drzewo powinien by odczytywany od strony prawej do lewej z wczaniem

16

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 2.3. Zapytanie z funkcj agregujc w SQL Server Management Studio z wyznaczonym
szacowanym planem wykonania zapytania

po kolei wszystkich bocznych gazi drzewa. W naszym przypadku pocztkowe czynnoci to przeszukiwanie indeksw dwch tabel czonych pierwszym zczeniem. Nastpnie realizowane jest zczenie wedug schematu zagniedonych zapyta. Kolejnym krokiem jest skanowanie trzeciej doczanej tabeli i zrealizowanie zczenia za
pomoc dopasowania indeksw. Jak wida z tego fragmentu planu, kolejno realizowania zcze ma wpyw (w wikszoci przypadkw decydujcy) na czas przetwarzania. W praktyce w pierwszej kolejnoci powinny by czone tabele lub te podzapytania czy perspektywy o najmniej licznym zestawie rekordw. Kolejnymi etapami
wykonania s sortowanie, wyznaczanie grup (poziomw agregacji), wyznaczenie
konkretnej funkcji agregujcej, a na koniec wyprowadzenie wynikw na standardowe
wyjcie. Naley jednak podkreli, e jest to plan szacowany na podstawie skadni, a nie
na podstawie rzeczywistego wykonania, std mog istnie istotne rnice, nie w sposobie realizacji, ale w udziale poszczeglnych elementw przetwarzania.
Z kad ikon obrazujc etap wykonywania zapytania zwizany jest zestaw informacji szczegowych, dostpny po najechaniu na ni wskanikiem myszy (rysunek 2.4).
Najwaniejszymi informacjami s dane dotyczce zapotrzebowania na zasoby fizyczne (I/O najwolniejsza z operacji) oraz pami. Poza tym podawane s informacje
dotyczce liczby wykona, liczby przetworzonych wierszy, rozmiar pamici dla pojedynczego wiersza, lista wynikowych kolumn i sposb sortowania. Kada z operacji
posiada zestaw informacji charakterystycznych tylko dla niej.
Poza szacowanym planem wykonania zapytania istnieje moliwo wygenerowania
biecego planu. Jest on tworzony na podstawie rzeczywistego przetworzenia zapytania, dlatego aby go uzyska, konieczne jest wykonanie zapytania po wczeniu waciwej opcji (rysunek 2.5).

Rozdzia 2. Zapytania analityczne

17

Rysunek 2.4.
Zapytanie z funkcj
agregujc w SQL
Server Management
Studio szczegowe
informacje z jednego
wza szacowanego
planu wykonania

Rysunek 2.5.
Zapytanie z funkcj agregujc
w SQL Server Management
Studio z wyznaczonym
biecym planem wykonania
zapytania

Podobn rol w optymalizacji zapyta moe odgrywa statystyka klienta (rysunek 2.6).
Zawiera ona informacje o wykonanych zapytaniach wybierajcych lub modyfikujcych dane. Naley zwrci uwag na fakt, e podzapytania traktowane s jako oddzielny element, std w prezentowanym przykadzie s dwa polecenia SELECT (dla
kadej pary elementw czonych operatorem JOIN). Ponadto moemy dowiedzie
si, jaka jest liczba bajtw przesanych od klienta do serwera i odwrotnie (SQL Server
Management Studio jest wbudowan kocwk klienta wzgldem silnika serwera).
Podawany jest czas przetwarzania, z rozdzieleniem na czas po stronie serwera (przesanie zapytania oraz o wiele duszy czas wywietlania wynikw na urzdzeniu I/O
przy zapytaniach wybierajcych), czas odpowiedzi serwera, a take pokazywana jest
ich suma. Przedstawiana jest liczba pakietw TDS (Tabular Data Stream Protocol)
przesyanych do i z silnika serwera. Informacje te s bardzo uyteczne w momencie
szacowania wydajnoci poszczeglnych zapyta oraz skryptw. Wygenerowanie statystyk, podobnie jak biecego planu wykonania, wymaga przetworzenia zapytania,
co w praktyce sprowadza si do przeprowadzenia prb na testowej instancji bazy danych, tak aby nie obcia instancji produkcyjnej.
Problematyka optymalizacji zoonych zapyta i strojenia (tuning) bazy danych jest
bardzo wanym zagadnieniem praktycznym. W przypadku zapyta analitycznych,
ktre ze swojej natury maj skomplikowan posta, pojawia si prawie zawsze. Ze
wzgldu na brak cisych, oglnych zasad postpowania przypomina bardziej sztuk
ni dziaanie inynierskie. Zagadnienia te jednak nie le w gwnym toku materiau,
ktremu ta ksika jest powicona. Pokazane narzdzia maj tylko zachci Czytelnika do wasnych poszukiwa w przypadku rozwizywania rzeczywistych problemw
wydajnoci przetwarzania.

18

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 2.6.
Zapytanie z funkcj
agregujc
w SQL Server
Management Studio
z wyznaczonymi
statystykami klienta

Grupowanie w SQL
Powrmy teraz do naszego podstawowego zapytania, w ktrym wyznaczalimy sum brutto dla kadego z pracownikw. Jeeli po poleceniu SELECT ograniczymy si
tylko do pola Opis, to w klauzuli GROUP BY moemy ograniczy si do tego samego
pola. Spowoduje to, e podsumowanie bdzie tym razem wykonywane dla kadego
dziau wszystkich jego pracownikw. Jak wida, zmiana opcji grupowania pociga
za sob zmian poziomu, na ktrym wyznaczane s funkcje agregujce. Oznacza to,
e nie istnieje moliwo wykonania podsumowania na dwch poziomach za pomoc
pojedynczego zapytania wybierajcego, uywajcego tej klauzuli. Rozwizaniem tego
problemu jest zastosowanie podzapytania wyznaczajcego podsumowanie na poziomie dziaw i poczenie go operatorem JOIN z zapytaniem gwnym, ktre oblicza
sum dla kadego z pracownikw. Suma dla dziau jest pobierana jako zwyke pole
z podzapytania. Realizacja tego zadania jest przedstawiona poniej.
SELECT Opis, Nazwisko, SUM(Brutto) AS Razem, SD
FROM Dzialy JOIN Osoby
ON Dzialy.IdDzialu=Osoby.IdDzialu
JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby
JOIN
(SELECT IdDzialu, SUM(brutto)AS SD
FROM Osoby JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby
GROUP BY IdDzialu) AS xxx
ON Dzialy.IdDzialu=xxx.IdDzialu
GROUP BY Opis ,Nazwisko, Osoby.IdOsoby, SD

Poniewa pole SD przechowujce sum brutto dla dziau zostao wybrane do wywietlania w zapytaniu nadrzdnym, a w tym nie dziaa na nie adna funkcja agregujca, musi by ono dodane jako kolejny element klauzuli grupujcej GROUP BY.
Skutek wykonania przedstawionego zapytania przedstawia rysunek 2.7.

Rozdzia 2. Zapytania analityczne

19

Rysunek 2.7.
Zapytanie z funkcj
agregujc z dwoma
poziomami
grupowania
dla wyznaczenia
sumy brutto (Dzialy,
Osoby) w SQL Server
Management Studio

Ten sam wynik zosta zaprezentowany ponownie w postaci tabelarycznej (tabela 2.1)
ma to na celu zapoznanie Czytelnika ze sposobem prezentacji kolejnych zapyta
prezentowanych w tej ksice w porwnaniu z rzeczywist ich postaci w SQL Server
Management Studio.
Tabela 2.1. Skutek wykonania zapytania wyznaczajcego sum wypat na dwch rnych poziomach
Opis

Nazwisko

Razem

SD

Administracja

Rusnarczyk

9906,51

63742,05

Administracja

Nowak

18555,45

63742,05

Administracja

Stpie

16066,98

63742,05

Administracja

Ciszewski

19213,11

63742,05

...

...

...

...

Zaplecze

Tuz

21398,00

72377,67

Zaplecze

Wojton

20761,80

72377,67

Zaplecze

Buczek

30217,87

72377,67

Jak wida, aby wyznaczy podsumowanie na dwch poziomach agregacji, potrzebne


jest jedno gwne zapytanie i jedno podzapytanie. Przez analogi dla trzech poziomw
konieczne jest zastosowanie poza gwnym zapytaniem dwch podzapyta, a dla
czterech poziomw trzech itd. Powoduje to znaczn komplikacj formaln i wyduenie zapisu zapytania, co sprzyja popenianiu bdw skadniowych oraz powstawaniu
rozwiza mao optymalnych. Znaczna ilo poziomw agregacji jest czsto wystpujcym przypadkiem w momencie wyznaczania rzeczywistych analiz, zwaszcza
natury ekonomicznej lub finansowej. Konieczno uproszczenia zapisu tego typu zapyta
spowodowaa wprowadzenie dyrektyw WITH w klauzuli GROUP BY. Taka posta

20

Hurtownie danych. Od przetwarzania analitycznego do raportowania

spotykana bya ju w realizacji MS SQL 2000 i funkcjonuje do tej pory. Pierwszym


wariantem jest zastosowanie operatora ROLLUP, ktry wylicza podsumowania na
wszystkich poziomach wymienionych jako argumenty grupowania, ponadto dodajc
podsumowanie dla penego zestawu rekordw. Przykad zapytania majcego na celu
wyznaczenie wszystkich podsumowa brutto zawiera kod zamieszczony poniej.
SELECT Opis, Nazwisko, SUM(Brutto) AS Razem
FROM Dzialy JOIN Osoby
ON Dzialy.IdDzialu=Osoby.IdDzialu
JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby
GROUP BY Opis, Nazwisko
WITH ROLLUP

Rezultatem tego zapytania jest podsumowanie wypat dla kadego pracownika z wymienion przy nim nazw dziau, w ktrym pracuje. Rekordy zawierajce nazw dziau
z pust informacj o pracowniku przedstawiaj podsumowanie zarobkw osignitych
w tym dziale. Natomiast rekord z pustymi informacjami o nazwie dziau i nazwisku pracownika zawiera podsumowanie wszystkich zarobkw w firmie, co pokazuje tabela 2.2.
Tabela 2.2. Skutek wykonania zapytania wyznaczajcego sum wypat na dwch rnych poziomach
z zastosowaniem operatora WITH ROLLUP
Opis

Nazwisko

Razem

Administracja

Ciszewski

19213,11

Administracja

Nowak

18555,45

Administracja

Rusnarczyk

9906,51

Administracja

Stpie

16066,98

Administracja

NULL

63742,05

...

...

...

Zaplecze

Buczek

30217,87

Zaplecze

Tuz

21398,00

Zaplecze

Wojton

20761,80

Zaplecze

NULL

72377,67

NULL

NULL

767641,48

Kolejnym przykadem jest zastosowanie operatora CUBE, ktry stanowi rozszerzenie


ROLLUP.
SELECT Opis, Nazwisko, SUM(brutto) AS Razem
FROM Dzialy JOIN Osoby
ON Dzialy.IdDzialu=Osoby.IdDzialu
JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby
GROUP BY Opis, Nazwisko
WITH CUBE
ORDER BY Opis,Nazwisko

Rezultatem tego zapytania jest rozszerzenie poprzedniego zestawu rekordw o podsumowania dla pracownikw z odseparowaniem informacji od nazw dziaw, w ktrych pracuj, jak pokazuje tabela 2.3.

Rozdzia 2. Zapytania analityczne

21

Tabela 2.3. Skutek wykonania zapytania wyznaczajcego sum wypat na dwch rnych poziomach
z zastosowaniem operatora WITH CUBE
Opis

Nazwisko

Razem

NULL

NULL

767641,48

NULL

Blicharz

28103,36

...

...

...

NULL

Zikowski

23795,28

NULL

Zjawin

13895,07

Administracja

NULL

63742,05

Administracja

Ciszewski

19213,11

Administracja

Nowak

18555,45

Administracja

Rusnarczyk

9906,51

Administracja

Stpie

16066,98

...

...

...

Zaplecze

NULL

72377,67

Zaplecze

Buczek

30217,87

Zaplecze

Tuz

21398,00

Zaplecze

Wojton

20761,80

Niestety, mona powiedzie, e Microsoft przegra w tej mierze potyczk z komitetem


ANSI, ktry zadecydowa, e skadnia tych dwch opcji grupowania bdzie realizowana
w nieco inny sposb. Taka posta zostaa wprowadzona dopiero w MS SQL Server 2008,
dlatego w przypadku stosowania starszych plikw baz danych doczonych (attache,
sp_attache_db) do tej realizacji produktu wymagana jest modyfikacja formatu przechowywania. Jest to realizowane na skutek uruchomienia zapytania modyfikujcego
baz danych i ustalajcego zgodno z aktualnym formatem, jak pokazuje zapytanie:
ALTER DATABASE BazaRelacyjna SET COMPATIBILITY_LEVEL = 100;

Po wykonaniu tego zapytania w stosunku do starszych, doczanych baz i w przypadku bazy utworzonej bezporednio w serwerze 2008 moliwe jest stosowanie skadni
zgodnej ze standardem ANSI, w ktrym operator grupowania (ROLLUP lub CUBE)
nastpuje bezporednio po klauzuli grupujcej, a nazwy pl wyznaczajce poziomy
grupowania umieszcza si w nawiasach, tak jak pokazuj kolejne przykady.
SELECT Opis, Nazwisko, SUM(brutto) AS Razem
FROM Dzialy JOIN Osoby
ON Dzialy.IdDzialu=Osoby.IdDzialu
JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby
GROUP BY ROLLUP (Opis, Nazwisko)
SELECT Opis, Nazwisko, SUM(brutto) AS Razem
FROM Dzialy JOIN Osoby
ON Dzialy.IdDzialu=Osoby.IdDzialu
JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby
GROUP BY CUBE (Opis, Nazwisko)

22

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Skutek wykonania tych zapyta jest w peni zgodny z rezultatami zapyta, w ktrych
uywano starszej postaci skadniowej tabele 2.2 i 2.3. Nowym elementem jest moliwo zastosowania operatora GROUPING SETS zgodnie z kolejnym przykadem.
SELECT Opis, Nazwisko, SUM(brutto) AS Razem
FROM Dzialy JOIN Osoby
ON Dzialy.IdDzialu=Osoby.IdDzialu
JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby
GROUP BY GROUPING SETS (Opis, Nazwisko)

Taka opcja grupowania powoduje, e sumy wyznaczane s na obu poziomach, wskazanych parametrami grupowania. W obu przypadkach informacja jest odseparowana
od informacji z drugiego z poziomw. Niemoliwe jest w zwizku z tym precyzyjne
wskazanie, ktrzy pracownicy s zwizani z konkretnym dziaem (tabela 2.4). Mona
jedynie oprze si na przesankach, liczc rcznie poszczeglne kombinacje sum
dla pracownikw.
Tabela 2.4. Skutek wykonania zapytania wyznaczajcego sum wypat na dwch rnych poziomach
z zastosowaniem operatora GROUPING SETS
Opis

Nazwisko

Razem

NULL

Blicharz

28103,36

NULL

Buczek

30217,87

NULL

Chadaj

8296,85

NULL

Chmura

19609,96

...

...

...

NULL

Zikowski

23795,28

NULL

Zjawin

13895,07

Administracja

NULL

63742,05

...

...

...

Zaplecze

NULL

72377,67

Podobn analiz podsumowa mona przeprowadzi dla zadania wyznaczenia sum


wartoci sprzeday. W tym celu naley poczy operatorami JOIN pi tabel, tak aby
mona byo wywietli informacj o wojewdztwie i miecie, w ktrym ma siedzib
producent, jego nazwie, nazwie konkretnego towaru oraz sumowa wartoci w postaci wyraenia cena*szt.
SELECT Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru, SUM(cena *szt) As Wartosc
FROM Wojewodztwa
JOIN Miasta ON Wojewodztwa.IdWojewodztwa=Miasta.IdWojewodztwa
JOIN Producenci ON Miasta.IdMiasta=Producenci.IdMiasta
JOIN Towar ON Producenci.IdProducenta=Towar.IdProducenta
JOIN Transakcje ON Towar.IdTowaru=Transakcje.IdTowaru
GROUP BY Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru

Poniewa w przykadzie zastosowano zwyke grupowanie z wykorzystaniem wszystkich atrybutw, obliczone sumy dotycz osobno kadego z towarw (tabela 2.5).

Rozdzia 2. Zapytania analityczne

23

Tabela 2.5. Skutek wykonania zapytania wyznaczajcego sum wartoci sprzeday towarw
Wojewdztwo

Miasto

NazwaProducenta

NazwaTowaru

Wartosc

dzkie

KUTNO

IZO COMMUNICATION

S5800

1041,44

dzkie

KUTNO

IZO COMMUNICATION

S6001

812,94

dzkie

KUTNO

IZO COMMUNICATION

S6700

214,90

...

...

...

...

...

dzkie

ZGIERZ

Optyka ZOO

Statyw

378,36

dzkie

ZGIERZ

Optyka ZOO

Statyw AX

776,60

dzkie

ZGIERZ

SCOTT GOLD INC

M330

53,01

...

...

...

...

...

lskie

KNURW

TADIRAN APPLIANCES LTD

Fizyka

1442,07

wielkopolskie

OSTRZESZW

DE NATIONALE
INVESTERINGSBANK N.V

Miarka

259,83

wielkopolskie

OSTRZESZW

PRIFAST AB

Pudeko

95,04

W celu uzyskania podsumowa na kadym z wymienionych poziomw agregacji moemy zastosowa operator ROLLUP bez koniecznoci zmiany struktury poprzedniego
zapytania.
SELECT Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru, SUM(cena *szt) As Wartosc
FROM Wojewodztwa JOIN Miasta ON Wojewodztwa.IdWojewodztwa=Miasta.IdWojewodztwa
JOIN Producenci ON Miasta.IdMiasta=Producenci.IdMiasta
JOIN Towar ON Producenci.IdProducenta=Towar.IdProducenta
JOIN Transakcje ON Towar.IdTowaru=Transakcje.IdTowaru
GROUP BY ROLLUP (Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru)

Posta wynikw otrzymanych na skutek wykonania zapytania zawiera tabela 2.6


cz rekordw ze rodka zestawu pominito ze wzgldu na du ich liczb.
Ciekaw cech stosowania operatora GROUPING SETS jest moliwo czenia atrybutw, co mona sensownie pokaza na co najmniej czterech poziomach agregacji. W prezentowanym przykadzie zdecydowano si na poczenie informacji geograficznej (wojewdztwo, miasto) oraz atrybutw opisujcych nazw producenta i nazw towaru.
Oczywicie moliwe jest czenie atrybutw w grupy liczniejsze ni dwa.
SELECT Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru, SUM(cena *szt) As Wartosc
FROM Wojewodztwa
JOIN Miasta ON Wojewodztwa.IdWojewodztwa=Miasta.IdWojewodztwa
JOIN Producenci ON Miasta.IdMiasta=Producenci.IdMiasta
JOIN Towar ON Producenci.IdProducenta=Towar.IdProducenta
JOIN Transakcje ON Towar.IdTowaru=Transakcje.IdTowaru
GROUP BY GROUPING SETS ((Wojewdztwo, Miasto), (NazwaProducenta, NazwaTowaru))

Takie poczenie w grupy w stanie podstawowym jest tylko zabiegiem formalnym


majcym wpyw na sposb wywietlenia rekordw, a co za tym idzie, podsumowa,
jak pokazuje tabela 2.7.

24

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 2.6. Skutek wykonania zapytania wyznaczajcego sum wartoci sprzeday towarw na czterech
poziomach grupowania z zastosowaniem operatora ROLLUP
Wojewdztwo

Miasto

NazwaProducenta

NazwaTowaru

Wartosc

dzkie

KUTNO

IZO COMMUNICATION

S5800

1041,44

dzkie

KUTNO

IZO COMMUNICATION

S6001

812,94

dzkie

KUTNO

IZO COMMUNICATION

S6700

214,90

dzkie

KUTNO

IZO COMMUNICATION

S7900S

1316,15

dzkie

KUTNO

IZO COMMUNICATION

NULL

3385,43

dzkie

KUTNO

IZO COMMUNICATION

S5800

1041,44

...

...

...

...

...

dzkie

ZGIERZ

Optyka ZOO

Statyw AX

776,60

dzkie

ZGIERZ

Optyka ZOO

NULL

6257,53

dzkie

ZGIERZ

SCOTT GOLD INC

M330

53,01

dzkie

ZGIERZ

SCOTT GOLD INC

NULL

53,01

dzkie

ZGIERZ

NULL

NULL

8691,34

dzkie

NULL

NULL

NULL

61842,63

...

...

...

...

...

wielkopolskie

OSTRZESZW

DE NATIONALE
INVESTERINGSBANK N.V

Miarka

259,83

wielkopolskie

OSTRZESZW

DE NATIONALE
INVESTERINGSBANK N.V

NULL

259,83

wielkopolskie

OSTRZESZW

PRIFAST AB

Pudeko

95,04

wielkopolskie

OSTRZESZW

PRIFAST AB

NULL

95,04

wielkopolskie

OSTRZESZW

NULL

NULL

354,87

wielkopolskie

NULL

NULL

NULL

354,87

NULL

NULL

NULL

NULL

92984,44

Moliwo czenia atrybutw w grupy dla operatora GROUPING SETS staje si naprawd wartociowa dopiero wtedy, kiedy sprbujemy jedn z nich potraktowa jako
argumenty wewntrznego operatora, np. ROLLUP. Przykad takiego zapytania pokazany zosta w kolejnym listingu.
SELECT Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru, SUM(cena *szt) As Wartosc
FROM Wojewodztwa JOIN Miasta ON Wojewodztwa.IdWojewodztwa=Miasta.IdWojewodztwa
JOIN Producenci ON Miasta.IdMiasta=Producenci.IdMiasta
JOIN Towar ON Producenci.IdProducenta=Towar.IdProducenta
JOIN Transakcje ON Towar.IdTowaru=Transakcje.IdTowaru
GROUP BY GROUPING SETS ((Wojewdztwo, Miasto),ROLLUP (NazwaProducenta,
NazwaTowaru))

Tym razem wynikowy zestaw rekordw ma inn, bardziej rozbudowan posta. Pierwsza
grupa argumentw jest wyprowadzana dokadnie tak samo jak poprzednio (kiedy nie
stosowano dodatkowych wewntrznych operatorw grupowania), natomiast druga para ma podsumowania zrealizowane tak, jakby dziaa na nie tylko operator ROLLUP.
Reprezentatywny fragment zestawu rekordw pokazuje tabela 2.8.

Rozdzia 2. Zapytania analityczne

25

Tabela 2.7. Skutek wykonania zapytania wyznaczajcego sum wartoci sprzeday towarw na czterech
poziomach grupowania z zastosowaniem operatora GROUPING SETS z poczeniem atrybutw
grupowania w pary
Wojewdztwo Miasto

NazwaProducenta

NazwaTowaru

Wartosc

NULL

SUN BANCORP INC

Akwarela

721,89

NULL

NULL

NULL

WINDSOR PLC

Analiza

1840,32

...

....

...

....

....

NULL

NULL

TRUST OF PROPERTY PLC

Zestaw
kominkowy

1103,30

NULL

NULL

PHOTO ENGRAVERS &


ELECTROTYPERS L

Zestaw Lux

1742,40

lskie

BIELSKO-BIAA

NULL

NULL

16677,98

pomorskie

KPICE

NULL

NULL

2042,04

...

...

...

...

...

dzkie

ZDUSKA WOLA

NULL

NULL

11982,50

dzkie

ZGIERZ

NULL

NULL

8691,34

Tabela 2.8. Skutek wykonania zapytania wyznaczajcego sum wartoci sprzeday towarw na czterech
poziomach grupowania z zastosowaniem operatora GROUPING SETS z poczeniem atrybutw
grupowania w pary i zastosowaniem operatora ROLLUP dla jednej z nich
Wojewdztwo Miasto

NazwaProducenta

NazwaTowaru Wartosc

NULL

NULL

ANTOFAGASTA HOLDINGS PLC

Mikrofala

4973,76

NULL

NULL

ANTOFAGASTA HOLDINGS PLC

Mikser A1

2197,00

NULL

NULL

ANTOFAGASTA HOLDINGS PLC

Toster

463,80

NULL

NULL

ANTOFAGASTA HOLDINGS PLC

NULL

7634,56

...

...

...

...

....

NULL

NULL

Zegarmistrz INC

Damski

1187,64

NULL

NULL

Zegarmistrz INC

Kominkowy

945,52

NULL

NULL

Zegarmistrz INC

Mski

1595,52

NULL

NULL

Zegarmistrz INC

Wahado

619,26

NULL

NULL

Zegarmistrz INC

NULL

4347,94

NULL

NULL

NULL

NULL

92984,44

lskie

BIELSKO-BIAA

NULL

NULL

16677,98

pomorskie

KPICE

NULL

NULL

2042,04

...

...

...

...

...

dzkie

ZGIERZ

NULL

NULL

8691,34

Do dowolnej z grup moemy zastosowa operator CUBE, podobnie jak operator


ROLLUP, co rozszerza zakres podsumowa dla tej grupy. Przykad formalnej realizacji takiego podsumowania prezentuje kolejne zapytanie.

26

Hurtownie danych. Od przetwarzania analitycznego do raportowania


SELECT Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru, SUM(cena *szt) As Wartosc
FROM Wojewodztwa JOIN Miasta ON Wojewodztwa.IdWojewodztwa=Miasta.IdWojewodztwa
JOIN Producenci ON Miasta.IdMiasta=Producenci.IdMiasta
JOIN Towar ON Producenci.IdProducenta=Towar.IdProducenta
JOIN Transakcje ON Towar.IdTowaru=Transakcje.IdTowaru
GROUP BY GROUPING SETS ((Wojewdztwo, Miasto),CUBE (NazwaProducenta, NazwaTowaru))

Wynikowy zestaw rekordw, ograniczony ze wzgldu na ich liczb do najbardziej reprezentatywnych fragmentw, zawarty jest w tabeli 2.9.
Tabela 2.9. Skutek wykonania zapytania wyznaczajcego sum wartoci sprzeday towarw na czterech
poziomach grupowania z zastosowaniem operatora GROUPING SETS z poczeniem atrybutw
grupowania w pary i zastosowaniem operatora CUBE dla jednej z nich
Wojewdztwo Miasto

NazwaProducenta

NazwaTowaru Wartosc

NULL

NULL

SUN BANCORP INC

Akwarela

721,89

NULL

NULL

NULL

Akwarela

721,89

NULL

NULL

WINDSOR PLC

Analiza

1840,32

NULL

NULL

NULL

Analiza

1840,32

NULL

NULL

GAB BETEILIGUNGS-AG

Arkusz

1288,94

NULL

NULL

NULL

Arkusz

1288,94

...

...

...

...

...

NULL

NULL

PHOTO ENGRAVERS &


ELECTROTYPERS L

Zestaw Lux

1742,40

NULL

NULL

NULL

Zestaw Lux

1742,40

NULL

NULL

NULL

NULL

92984,44

NULL

NULL

ANTOFAGASTA HOLDINGS PLC

NULL

7634,56

NULL

NULL

ARENA LEISURE PLC

NULL

7091,42

...

...

...

...

...

NULL

NULL

Wydawnictwo INC

NULL

5718,24

NULL

NULL

Zegarmistrz INC

NULL

4347,94

lskie

BIELSKOBIAA

NULL

NULL

16677,98

pomorskie

KPICE

NULL

NULL

2042,04

....

...

...

..

....

dzkie

ZDUSKA
WOLA

NULL

NULL

11982,50

dzkie

ZGIERZ

NULL

NULL

8691,34

Dla prezentowanego schematu relacyjnego moliwe jest zrealizowanie przykadu o jeszcze bardziej rozbudowanej strukturze grupowania. Zauwamy, e kady z towarw
nie tylko ma zdefiniowanego jednoznacznie producenta, ale rwnie zosta przypisany do
kategorii (grupy towarw). Przy czym producent moe produkowa towary nalece
do wielu grup. Nie ma jednoznacznego odwzorowania producent kategoria. W takim
przypadku podstawowe zapytanie musi by uzupenione o doczenie jeszcze jednej
tabeli. Natomiast w opcjach grupowania GROUPING SETS sensowne jest utworzenie

Rozdzia 2. Zapytania analityczne

27

dwch grup posiadajcych jeden wsplny element NazwaTowaru. Jest on poczony


zarwno z kategori, jak i nazw producenta. Zapytanie realizujce takie postulaty
przedstawiono niej.
SELECT Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru, NazwaKategorii,
SUM(cena *szt) As Wartosc
FROM Wojewodztwa JOIN Miasta ON Wojewodztwa.IdWojewodztwa=Miasta.IdWojewodztwa
JOIN Producenci ON Miasta.IdMiasta=Producenci.IdMiasta
JOIN Towar ON Producenci.IdProducenta=Towar.IdProducenta
JOIN Kategorie On Towar.IdKategorii=Kategorie.IdKategorii
JOIN Transakcje ON Towar.IdTowaru=Transakcje.IdTowaru
GROUP BY GROUPING SETS ((Wojewdztwo, Miasto),
(NazwaProducenta, NazwaTowaru),
(NazwaKategorii, NazwaTowaru))

W zestawie wynikowym wida konsekwencje takiego grupowania, ktre prezentuje


tabela 2.10. Wyranie da si wyrni dodan grup podsumowa czcych towar
i kategori.
Tabela 2.10. Skutek wykonania zapytania wyznaczajcego sum wartoci sprzeday towarw na piciu
poziomach grupowania z zastosowaniem operatora GROUPING SETS z poczeniem atrybutw grupowania
w pary, z ktrych dwie maj element wsplny
Wojewdztwo Miasto

NazwaProducenta

NazwaTowaru NazwaKategorii Wartosc

NULL

NULL

NULL

Pasek

Akcesoria

294,00

NULL

NULL

NULL

Podstawka

Akcesoria

250,29

...

...

...

...

...

...

NULL

NULL

NULL

Wahado

Zegary

619,26

NULL

NULL

NULL

Wielofunkcyjny

Zegary

273,84

NULL

NULL

SUN BANCORP INC

Akwarela

NULL

721,89

NULL

NULL

WINDSOR PLC

Analiza

NULL

1840,32

...

...

...

...

...

...

NULL

NULL

TRUST OF
PROPERTY PLC

Zestaw
kominkowy

NULL

1103,30

NULL

NULL

PHOTO
ENGRAVERS &
ELECTROTYPERS L

Zestaw Lux

NULL

1742,40

lskie

BIELSKOBIAA

NULL

NULL

NULL

16677,98

pomorskie

KPICE

NULL

NULL

NULL

2042,04

...

...

...

...

...

...

dzkie

ZDUSK
A WOLA

NULL

NULL

NULL

11982,50

dzkie

ZGIERZ

NULL

NULL

NULL

8691,34

Rwnie w tym przypadku do kadej z wewntrznych grup operatora GROUPING SETS


moemy doda jeden z operatorw ROLLUP lub CUBE. Naley zaznaczy, e istnieje
moliwo dowolnego mieszania tych operatorw, niezalenie dla kadej z grup.

28

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Grupowanie nad oknem logicznym


Tutaj naley powici troch miejsca problematyce wyznaczania funkcji nad oknem
logicznym (partycj logiczn). Rozpocznijmy od prostych przykadw, ktre na pierwszy
rzut oka mog odstawa od gwnego nurtu wywodu. Jednak wkrtce poka, e s
one cile zwizane z problematyk wykonywania analiz.
Jednym z do prozaicznych problemw w MS SQL by brak narzdzia do numerowania rekordw podczas ich wyprowadzania zapytaniem wybierajcym. Rozwizaniem jest funkcja ROW_NUMBER(), definiowana nad oknem OVER(). Minimaln
definicj okna jest podanie sposobu sortowania przez zastosowanie klauzuli ORDER BY.
SELECT IdDzialu, Nazwisko, Wzrost,
ROW_NUMBER() OVER (ORDER BY Wzrost)AS NumerWiersza
FROM Osoby

W prezentowanym przykadzie wyprowadzone na standardowe wyjcie rekordy zostay ponumerowane zgodnie z narastajc wartoci kolumny Wzrost. W przypadku
rwnych wartoci atrybutu sortowania numer wiersza jest przyznawany przypadkowo
(precyzyjnie naleaoby powiedzie, e zgodnie z indeksem CLUSTERED albo jeli
nie ma indeksu grupujcego, zgodnie z innym indeksem, ktry zawiera w sobie odwoanie do pola, a jeli nie ma adnego indeksu losowo). Fragment zestawu rekordw generowanych tym zapytaniem przedstawia tabela 2.11.
Tabela 2.11. Skutek wykonania zapytania zawierajcego numeracj wierszy
IdDzialu

Nazwisko

Wzrost

NumerWiersza

ozowski

1.63

Rybiski

1.63

Blicharz

1.64

Gil

1.65

Kurek

2.08

49

Konarski

2.08

50

Zmiana kierunku sortowania w definicji okna spowoduje zmian numeracji wierszy, jak
pokazano w kolejnym zapytaniu. Skutek jego wykonania zosta zawarty w tabeli 2.12.
SELECT IdDzialu, Nazwisko, Wzrost,
ROW_NUMBER() OVER (ORDER BY Wzrost DESC)AS NumerWiersza
FROM Osoby

Stosowanie numeracji nad oknem logicznym pozwala na jednoczesne ponumerowanie wierszy wzgldem rnie definiowanych partycji. Rezultat taki otrzymujemy bez
koniecznoci dodawania innych elementw skadniowych poza kolejnym zastosowaniem funkcji ROW_NUMBER(). Sprbujmy ponumerowa wiersze wedug malejcego wzrostu w ramach kadego z dziaw oraz dla caej tabeli.

Rozdzia 2. Zapytania analityczne

29

Tabela 2.12. Skutek wykonania zapytania zawierajcego numeracj wierszy


IdDzialu

Nazwisko

Wzrost

NumerWiersza

Kurek

2.08

Konarski

2.08

Pogorzelski

2.07

Blicharz

1.64

48

Rybiski

1.63

49

ozowski

1.63

50

SELECT IdDzialu, Nazwisko, Wzrost,


ROW_NUMBER() OVER (PARTITION BY IdDzialu ORDER BY Wzrost DESC)AS NumerWDziale,
ROW_NUMBER() OVER (ORDER BY Wzrost DESC)AS NumerWiersza
FROM Osoby

W rezultacie otrzymujemy zestaw rekordw, w ktrym decydujcy wpyw na kolejno wyprowadzanych wierszy ma drugi w kolejnoci sposb numeracji, co ilustruje
tabela 2.13. Ten sposb wyprowadzania danych daje wraenie zupenej przypadkowoci numeracji w dziale.
Tabela 2.13. Skutek wykonania zapytania zawierajcego numeracj wierszy wedug dwch kryteriw
IdDzialu

Nazwisko

Wzrost

NumerWDziale

NumerWiersza

5
6

Konarski

2.08

Kurek

2.08

Pogorzelski

2.07

Rusnarczyk

2.05

Gil

1.65

47

Blicharz

1.64

48

ozowski

1.63

11

49

Rybiski

1.63

11

50

Moliwe jest uporzdkowanie numeracji dziki ujednoliceniu sposobu sortowania w obu


partycjach. Oczywicie zmienia to sens numeracji wierszy dla caej tabeli, ale daje
wraenie uporzdkowania rekordw. W praktycznych realizacjach to drugie podejcie
ma z reguy czstsze zastosowanie. W takim przypadku zawarto pitej z kolumn
jest tylko numeratorem kolejnego wiersza, a porzdek wymusza pierwsza z definicji
partycji. Wykonanie tego zapytania daje rezultat pokazany w tabeli 2.14.
SELECT IdDzialu, Nazwisko, Wzrost,
ROW_NUMBER() OVER (PARTITION BY IdDzialu ORDER BY IdDzialu, Wzrost DESC)AS
NumerWDziale,
ROW_NUMBER() OVER (ORDER BY IdDzialu, Wzrost DESC)AS NumerWiersza
FROM Osoby

30

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 2.14. Skutek wykonania zapytania zawierajcego numeracj wierszy wedug dwch kryteriw
z ujednoliconym sposobem sortowania
IdDzialu

Nazwisko

Wzrost

NumerWDziale

NumerWiersza

Muras

2.00

Wrblewski

1.98

Zikowski

1.95

Piechowski

1.83

Rusnarczyk

2.05

Blicharz

1.64

47

Buczek

2.05

48

Wojton

1.93

49

Tuz

1.93

50

Poza funkcj ROW_NUMBER() wprowadzone zostay funkcje wyznaczajce rang


wzgldem sposobu sortowania, rwnie z moliwoci zastosowania podziau na okna
logiczne, dziki wykorzystaniu PARTITION BY. W przykadzie zaprezentowano sposb
ich dziaania dla takich samych zakresw podziau (w ramach kadego dziau) oraz
z jednakowym sortowaniem.
SELECT IdDzialu, Nazwisko, Wzrost,
RANK() OVER (PARTITION BY IdDzialu ORDER BY IdDzialu, Wzrost DESC)AS Ranking,
DENSE_RANK() OVER (PARTITION BY IdDzialu ORDER BY IdDzialu, Wzrost DESC)AS RankingGesty,
NTILE(2) OVER (PARTITION BY IdDzialu ORDER BY IdDzialu, Wzrost DESC)AS RankingDo2
FROM Osoby

Funkcje RANK() i DENSE_RANK() rni si od funkcji numerujcej ROW_NUMBER()


stosunkiem do rwnych wartoci pl, wzgldem ktrych dokonujemy sortowania. Obydwie rangi uznaj pozycje ex aequo, nadajc im t sam warto. Rni si natomiast wartociami nadawanymi po wystpieniu pl rwnych. Zwyky ranking powoduje, e numeracja przeskakuje o liczb powtrze pomniejszon o jeden. Natomiast
w przypadku rankingu gstego po rwnych wartociach nastpuje warto kolejna.
Nieco inaczej dziaa funkcja NTILE(n), ktra ma zdefiniowan parametrem gboko
kodowania. Oznacza to, e maksymalna warto rangi moe by co najwyej n, jeli
liczba rekordw jest co najmniej rwna tej wartoci. Zamy, e liczba rekordw jest
k. Jeli k jest podzielne przez n, kada ranga bdzie zawieraa k/n rekordw. Jeli k nie
jest podzielne przez n, to r pierwszych rang bdzie o jeden liczniejsze od pozostaych,
gdzie r jest reszt z dzielenia k przez n. Przykadowy zestaw rekordw generowany
przez takie zapytanie przedstawia tabela 2.15.
Funkcje analityczne wyznaczane nad oknem logicznym, w tym rwnie funkcje agregujce mog by elementami bardziej zoonych wyrae. Jednym z waniejszych
praktycznych zastosowa jest okrelanie udziau wartoci wyznaczanej na jednym
poziomie, w tej samej wartoci, wyznaczonej na jednym z wyszych poziomw grupowania. W przykadzie pokazano wyznaczenie sum wypat na trzech poziomach

Rozdzia 2. Zapytania analityczne

31

Tabela 2.15. Skutek wykonania zapytania zawierajcego funkcje rankingowe


IdDzialu

Nazwisko

Wzrost

Ranking

RankingGesty

RankingDo2

Muras

2.00

Wrblewski

1.98

Zikowski

1.95

Piechowski

1.83

Rusnarczyk

2.05

Stpie

2.05

Nowak

1.78

...

...

...

...

...

...

Buczek

2.05

Wojton

1.93

Tuz

1.93

(caej firmy, dziau i pracownika) oraz udziay wypaty pracownika w sumie jego wypat i w sumie wszystkich wypat dziau. W tabeli 2.16 przedstawiony zosta fragment
zestawu rekordw generowanych poniszym zapytaniem.
SELECT IdDzialu, Osoby.IdOsoby, Brutto,
SUM(Brutto) OVER() AS Suma,
SUM(Brutto) OVER(PARTITION BY IdDzialu) AS SumaDzial,
Brutto/SUM(Brutto) OVER(PARTITION BY IdDzialu) AS UdzialWDziale,
SUM(Brutto) OVER(PARTITION BY Osoby.IdOsoby) AS SumaOsoba,
Brutto/SUM(Brutto) OVER(PARTITION BY Osoby.IdOsoby) AS Udzial
FROM Osoby JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby

Tabela 2.16. Skutek wykonania zapytania zawierajcego funkcje agregujce nad oknem logicznym
IdDzialu IdOsoby Brutto

Suma

SumaDzial UdzialWDziale

SumaOsoba Udzial

3286,69

767641,48

51790,54

0,0634

10129,47

0,3244

4300,36

767641,48

51790,54

0,083

10129,47

0,4245

1661,61

767641,48

51790,54

0,032

10129,47

0,164

880,81

767641,48

51790,54

0,017

10129,47

0,0869

2476,75

767641,48

51790,54

0,0478

3362,85

0,7365

886,10

767641,48

51790,54

0,0171

3362,85

0,2634

1065,30

767641,48

51790,54

0,0205

14502,94

0,0734

4801,65

767641,48

51790,54

0,0927

14502,94

0,331

4789,57

767641,48

51790,54

0,0924

14502,94

0,3302

2531,25

767641,48

51790,54

0,0488

14502,94

0,1745

...

...

...

...

...

...

...

...

Tego typu podsumowania prawdziw si pokazuj dopiero wtedy, kiedy ronie liczba poziomw, na ktrych chcemy oblicza funkcje agregujce. Wystarczy wwczas tylko poprawnie zrealizowa zczenie midzy tabelami zawierajcymi interesujce nas poziomy

32

Hurtownie danych. Od przetwarzania analitycznego do raportowania

oraz sumowane pola (wyraenia), a nastpnie wielokrotnie zastosowa znan konstrukcj,


uzupeniajc jedynie list pl wyznaczajcych okno logiczne po operatorze PARTITION BY.
Prezentowany przykad wyznacza sum wartoci sprzedanych towarw na poziomie wojewdztwa, miasta (dotyczy siedziby firmy), producenta i towaru. Reprezentatywny zestaw rekordw wygenerowany tym zapytaniem przedstawia tabela 2.17.
SELECT Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru, cena *szt As Wartosc,
SUM(cena *szt)OVER(PARTITION BY Wojewdztwo) AS SumaWojewodztwo,
SUM(cena *szt)OVER(PARTITION BY Wojewdztwo, Miasto) AS SumaMiasto,
SUM(cena *szt)OVER(PARTITION BY Wojewdztwo, Miasto, NazwaProducenta) AS SumaProducent,
SUM(cena *szt)OVER(PARTITION BY Wojewdztwo, Miasto, NazwaProducenta, NazwaTowaru)
AS SumaTowar
FROM Wojewodztwa JOIN Miasta ON Wojewodztwa.IdWojewodztwa=Miasta.IdWojewodztwa
JOIN Producenci ON Miasta.IdMiasta=Producenci.IdMiasta
JOIN Towar ON Producenci.IdProducenta=Towar.IdProducenta
JOIN Transakcje ON Towar.IdTowaru=Transakcje.IdTowaru

SumaTowar

IZO
S5800
COMMUNICATION

195,27

61842,63 21735,09

3385,43

1041,44

dzkie

KUTNO

IZO
S5800
COMMUNICATION

260,36

61842,63 21735,09

3385,43

1041,44

...

...

...

...

...

...

dzkie

KUTNO

SUN BANCORP INC Puzderko

288,63

61842,63 21735,09

2994,54

1443,15

Wartosc

Miasto

SumaMiasto

KUTNO

NazwaTowaru

dzkie

Wojewdztwo

SumaProducent

SumaWojewodztwo

NazwaProducenta

Tabela 2.17. Skutek wykonania zapytania dokonujcego podsumowania na czterech poziomach


agregacji z zastosowaniem okien logicznych

...

dzkie

KUTNO

SUN BANCORP INC Puzderko

384,84

61842,63 21735,09

2994,54

1443,15

...

...

...

...

...

...

...

dzkie

ZGIERZ

SCOTT GOLD INC

M330

5,89

61842,63 8691,34

53,01

53,01

dzkie

ZGIERZ

SCOTT GOLD INC

M330

11,78

61842,63 8691,34

53,01

53,01

...

...

..

...

...

...

...

...

...

wielkopolskie

OSTRZESZW PRIFAST AB

Pudeko

42,24

354,87

354,87

95,04

95,04

wielkopolskie

OSTRZESZW PRIFAST AB

Pudeko

52,80

354,87

354,87

95,04

95,04

...

Operator COMPUTE
O ile zastosowanie funkcji agregujcych wyznaczanych nad oknem logicznym jest pomysem wprowadzonym w wersji MS SQL 2008, o tyle we wczeniejszych wersjach, ale
rwnie w obecnej do wyznaczania wielopoziomowych podsumowa mona stosowa
operator COMPUTE. Tak jak poprzednio podstaw jest skonstruowanie zapytania

Rozdzia 2. Zapytania analityczne

33

wybierajcego pola definiujce poziomy podsumowania oraz pola (wyraenia), dla


ktrych wyznaczane bd funkcje agregujce. Na kocu zapytania definiowane s po
operatorze COMPUTE funkcje agregujce, a po sowie kluczowym BY poziomy, dla
ktrych funkcje te maj by obliczane. Jeli chcemy wyprowadza wiele funkcji agregujcych, wymieniamy je w postaci listy separowanej przecinkami. Jeli mamy wiele poziomw wyznaczania agregatw, to naley pamita, e trzeba je wymienia, poczwszy
od najbardziej wewntrznego. Najpierw podsumowanie dla kadego z pracownikw
dziau, a dopiero potem podsumowanie dla dziau, w ktrym pracuj. Definicja poziomu podrzdnego musi zawiera definicj pola wyznaczajcego poziom nadrzdny.
Operator COMPUTE musi mie zestaw rekordw uporzdkowany zgodnie z hierarchi wyznaczania podsumowa, dlatego przed jego pierwszym wystpieniem musi
pojawi si klauzula ORDER BY z wykazem wszystkich pl wyznaczajcych najniszy (najbardziej zagniedony) poziom hierarchii. Jest to jedyny przypadek, kiedy
klauzula ORDER BY nie jest ostatnim elementem zapytania wybierajcego.
SELECT Opis, Nazwisko, Osoby.IdOsoby, Brutto
FROM Dzialy JOIN Osoby
ON Dzialy.IdDzialu=Osoby.IdDzialu
JOIN Zarobki
ON Osoby.IdOsoby=Zarobki.IdOsoby
ORDER BY Dzialy.IdDzialu, Osoby.IdOsoby
COMPUTE SUM(Brutto) BY Dzialy.IdDzialu, Osoby.IdOsoby
COMPUTE SUM(Brutto) BY Dzialy.IdDzialu

Wykonanie takiego zapytania w SQL Server Management Studio z wyprowadzeniem


do postaci grid daje do dziwny rezultat (rysunek 2.8). Kady fragment przetwarzania jest traktowany jako oddzielne zapytanie wybierajce. Najpierw prezentowany
jest zestaw rekordw podstawowego zapytania dla pierwszego poziomu sumowania,
nastpnie, tak jak w przypadku pojedynczego zapytania, wynik podsumowania tego
poziomu. Taka kombinacja powtarza si a do wyczerpania wszystkich danych dla
pierwszej wartoci poziomu drugiego i znw podsumowanie dla tego poziomu.
Taka struktura powtarza si a do wyczerpania zestawu rekordw zapytania i wyznaczenia wszystkich podsumowa.
Rysunek 2.8.
Skutek wykonania
zapytania
podsumowujcego
przy uyciu operatora
COMPUTE w SQL
Server Management
Studio

34

Hurtownie danych. Od przetwarzania analitycznego do raportowania

W przypadku wyznaczania podsumowa z zastosowaniem operatora COMPUTE o wiele


czytelniejsze jest wyprowadzenie wynikw do postaci tekstowej, tak jak przedstawiono niej:
Opis

Nazwisko

IdOsoby

Brutto

--------------- --------------- ----------- --------------------Dyrekcja


Muras
1
3286,69
Dyrekcja
Muras
1
4300,36
Dyrekcja
Muras
1
1661,61
Dyrekcja
Muras
1
880,81
sum
10129,47
................................................................
Opis

Nazwisko

IdOsoby

Brutto

--------------- --------------- ----------- --------------------Dyrekcja


Zikowski
29
1919,52
Dyrekcja
Zikowski
29
4804,68
Dyrekcja
Zikowski
29
4997,72
Dyrekcja
Zikowski
29
341,30
Dyrekcja
Zikowski
29
3886,26
Dyrekcja
Zikowski
29
4754,95
Dyrekcja
Zikowski
29
3090,85
sum
23795,28
sum
51790,54
................................................................
Opis

Nazwisko

IdOsoby

Brutto

--------------- --------------- ----------- --------------------Zaplecze


Tuz
19
3095,75
Zaplecze
Tuz
19
978,86
Zaplecze
Tuz
19
4432,18
Zaplecze
Tuz
19
4538,72
Zaplecze
Tuz
19
3982,42
Zaplecze
Tuz
19
916,86
Zaplecze
Tuz
19
3453,21
sum
21398,00
................................................................
Opis

Nazwisko

IdOsoby

Brutto

--------------- --------------- ----------- --------------------Zaplecze


Buczek
45
4118,18
Zaplecze
Buczek
45
492,14

Rozdzia 2. Zapytania analityczne


Zaplecze
Zaplecze
Zaplecze
Zaplecze
Zaplecze
Zaplecze
Zaplecze
Zaplecze
Zaplecze
Zaplecze

Buczek
Buczek
Buczek
Buczek
Buczek
Buczek
Buczek
Buczek
Buczek
Buczek

45
45
45
45
45
45
45
45
45
45

35
3752,77
2502,31
3696,95
984,34
1011,82
2700,47
4109,81
230,53
3459,18
3159,37

sum
30217,87
sum
72377,67

Funkcje agregujce zdefiniowane


przez uytkownika
Istnieje moliwo prowadzenia analiz nie tylko odwoujcych si do wbudowanych
funkcji silnika bazy danych. Uytkownik ma moliwo zbudowania wasnych funkcji, ktre moe wykorzysta do wyznaczania zoonych wyrae podsumowujcych.
Aby jednak nie tworzy bardzo zoonych przykadw, wemy funkcj wyznaczajc
redni geometryczn wzrostu w dziale, ktrego identyfikator dany jest parametrem
@gdzie. Oglna definicja redniej geometrycznej zmiennej nieujemnej xi ma posta

xg = n

i =1

W skrypcie dodana zostaa nadmiarowa instrukcja usuwania funkcji; instrukcja ta przy


pierwszym wykonywaniu skryptu bdzie generowaa komunikat o bdzie, ale bdzie
uyteczna podczas modyfikowania funkcji.
DROP FUNCTION GAVE_s
GO
CREATE FUNCTION GAVE_s
(@gdzie int)
RETURNS real
AS
BEGIN
DECLARE @ret real, @temp real, @ile int, @wyk real
DECLARE cur CURSOR FOR SELECT Wzrost FROM Osoby WHERE IdDzialu=@gdzie
SET @ret=1
SET @ile=1
OPEN cur
FETCH NEXT FROM cur INTO @temp
WHILE @@FETCH_STATUS=0
BEGIN

36

Hurtownie danych. Od przetwarzania analitycznego do raportowania


IF NOT @temp IS NULL
BEGIN
SET @ret=@ret*@temp
SET @ile=@ile+1
END
FETCH NEXT FROM cur INTO @temp
END
CLOSE cur
DEALLOCATE cur
SET @wyk=1.0/@ile
SET @ret=POWER(@ret,@wyk)
RETURN @ret
END

W ciele funkcji zadeklarowano zmienne: @ret przekazujc wynik oblicze, @temp


pomocnicz wykorzystywan do oblicze, @ile przechowujc liczb przetworzonych rekordw, @wyk zawierajc wykadnik potgi. Ponadto zadeklarowano
kursor cur, ktrego definicj stanowi zapytanie zwracajce wzrost liczby osb pracujcych w dziale o identyfikatorze rwnym parametrowi funkcji @gdzie. Po zainicjowaniu zmiennych @ret i @ile nastpuje otwarcie kursora oraz przejcie do pierwszego rekordu z zestawu rekordw zdefiniowanych podczas jego deklaracji, a warto
wzrostu przekazywana jest do zmiennej @temp. Nastpnie w ptli, ktra wykonuje
si do momentu, kiedy jeszcze istnieje kolejny rekord zestawu, sprawdzane jest, czy
warto wzrostu zawarta w zmiennej @temp nie jest NULL. W przypadku pozytywnym stara warto @ret jest mnoona przez @temp i podstawiana jako nowa warto
do @ret, ponadto zwikszany jest licznik @ile. Rwnie w ciele ptli pozycja kursora
jest przesuwana o jeden rekord. Po zakoczeniu ptli kursor jest zamykany, a zarezerwowane dla niego zasoby s zwalniane poleceniem DEALLOCATE. Pozostaje obliczenie wykadnika, ktry jest odwrotnoci licznika, obliczenie pierwiastka stopnia
@ile dziki zastosowaniu funkcji POWER podnoszcej iloczyn @ret do potgi @wyk
oraz przekazanie wartoci do wywoania. Tak zdefiniowana funkcja skalarna moe
by wywoana w skrypcie obliczajcym redni wzrostu w wybranym dziale, w prezentowanym przykadzie o identyfikatorze 2.
DECLARE @GAV real
SET @GAV= dbo.GAVE_s(2)
PRINT @GAV

Jednak lepsz ilustracj jest wywoanie utworzonej funkcji skalarnej w zapytaniu wybierajcym. Pozwala to na wyznaczenie geometrycznej redniej wzrostu w kadym
dziale zdefiniowanym w tabeli Dzialy. Rezultat otrzymany dziki wykonaniu tego zapytania zawiera tabela 2.18.
SELECT IdDzialu, Opis, dbo.GAVE_s(IdDzialu)AS GAV
FROM Dzialy

Moliwe jest zdefiniowanie praktycznie dowolnej metody podsumowywania wynikw z zastosowaniem zarwno funkcji skalarnych, jak i zwracajcych tabel. Jednak
s one mao elastyczne, poniewa ustalaj pole i tabel, dla ktrej to podsumowanie
jest wyznaczane. Dynamiczne przetwarzanie zapyta nie jest w Transact-SQL najlepiej rozwizane, np. nie pozwala na przekazywanie danych do zmiennych, co komplikuje ich praktyczne zastosowanie. Trudno rwnie powiedzie, e utworzone w ten

Rozdzia 2. Zapytania analityczne

37

Tabela 2.18. Skutek wykonania zapytania obliczajcego geometryczn redni wzrostu w kadym dziale
IdDzialu

Opis

GAV

Dyrekcja

1.698385

Administracja

1.67641

Techniczny

1.739499

Inny

1.691496

Handlowy

1.729834

Obsuga

1.768733

Pomocniczy

1.602062

Zaplecze

1.66233

sposb funkcje w peni odgrywaj rol funkcji agregujcych. Rozwizaniem jest zastosowanie tzw. Assemblies zoe pozwalajcych na wykorzystanie po stronie
Transact-SQL bibliotek napisanych w dowolnym jzyku platformy .NET. Naley
utworzy publiczn struktur przeciajc publiczne klasy Init(), odpowiedzialn za
inicjacj zmiennych, Accumulate(parametr), zawierajc zasadnicz cz oblicze
dla kadego rekordu, Merge(struktura), czc obliczenia z procesw rwnolegych
(o ile istniej), oraz Terminate(), wyznaczajc kocow posta wyniku. Jako przykad rozpatrzmy bibliotek napisan w jzyku C#, cieszcym si coraz wiksz popularnoci listing 2.1. Po wskazaniu bibliotek, midzy ktrymi musz si znale
odpowiadajce za obsug kocwki klienta SQL Data.SqlClient oraz definiujce typy zgodne z jzykiem zapyta Data.SqlTypes, a ktre zostan wykorzystane do oblicze, nastpuje sekcja dyrektyw kompilatora wskazujca na stopie izolacji transakcji
Serializable i fakt wykorzystywania struktury do definiowania funkcji agregujcej
uytkownika SqlUserDefinedAggregate. Tworzona struktura moe mie dowoln nazw i zawiera dowoln liczb deklaracji zmiennych wewntrznych, w prezentowanym przykadzie trzy: licznik zliczajc rekordy, iloczyn przeznaczon na wynik oblicze porednich, oraz pomocnicz temp.
Listing 2.1. Struktura wyznaczajca redni geometryczn kod w C#
using
using
using
using
using

System;
System.Data;
System.Data.SqlClient;
System.Data.SqlTypes;
Microsoft.SqlServer.Server;

[Serializable]
[SqlUserDefinedAggregate(Format.Native, Name = GeoAve)]
public struct GEOAVE
{
private int licznik;
// zmienna zliczajca liczb wierszy niemajcych wartoci NULL
private double iloczyn; // zmienna przechowujca iloczyn pl
private double temp;
// zmienna pomocnicza
public void Init()
{
licznik = 0; // inicjalizacja
iloczyn = 1;

38

Hurtownie danych. Od przetwarzania analitycznego do raportowania


}
public void Accumulate(double? Value)
{
if (Value != null) // wyznaczanie iloczynu dla pl niemajcych wartoci NULL
{
licznik++;
temp = (double)Value;
iloczyn = iloczyn*temp;
}
}
public void Merge(GEOAVE Group)
{
this.iloczyn *= Group.iloczyn;
this.licznik += Group.licznik;
// kiedy obliczenia rwnolege, iloczyn staje si iloczynem z wszystkich procesw, a licznik sum
}
public SqlDouble Terminate()
{
temp=1.0/licznik;
iloczyn = Math.Pow(iloczyn, temp);
return new SqlDouble(this.iloczyn); //zwrcenie ostatecznej wartoci oblicze
}
}

W publicznej klasie Init() nastpuje inicjalizacja zmiennych licznik wartoci 0 oraz


iloczyn wartoci 1. Brak inicjalizacji spowodowaby, e obie miayby warto pust,
co uniemoliwioby pniejsze obliczenia. W klasie Accumulate(double? Value) nastpuje sprawdzenie, czy wartoci przekazywan parametrem nie jest null. Naley
zwrci uwag na deklaracj typu parametru w postaci double?, ktry to typ poprawnie interpretuje warto NULL otrzymywan z poziomu SQL. Jeli wyraenie jest
prawdziwe, licznik jest inkrementowany o 1, a iloczyn mnoony przez warto parametru. Zastosowane zostao rzutowanie typu double? na typ double. Klasa ta jest wykonywana cyklicznie dla kadego rekordu grupy. Klasa Merge(GEOAVE Group) czy
wyniki z rozwidlonych procesw przez pomnoenie ich oraz zsumowanie licznikw.
W klasie Terminate() nastpuje wyznaczenie wspczynnika potgi jako odwrotnoci
zmiennej licznik. Naley zauway, e w liczniku wyraenia wystpuje zapis zmiennopozycyjny wartoci 1.0, aby zapewni, e rezultat bdzie liczb rzeczywist. Uycie
liczby cakowitej 1 spowodowaoby, e skutkiem dzielenia zawsze byaby warto 0.
Nastpnie wyznaczany jest ostateczny wynik jako uamkowa potga iloczynu (pierwiastek). Warto ta przekazywana jest do miejsca wywoania.
Kolejny krok to inkapsulacja klasy CLR do postaci funkcji agregujcej MS SQL Server.
USE [BazaRelacyjna]
GO
DROP AGGREGATE GeoAvg
GO
DROP ASSEMBLY [GeoAvg_a]
GO
CREATE ASSEMBLY [GeoAvg_a]

Rozdzia 2. Zapytania analityczne

39

AUTHORIZATION [dbo]
FROM C:\hurtownia_ap\sred_goeom\sred_goeom\bin\Debug\sred_goeom.dll
WITH PERMISSION_SET = SAFE
GO
CREATE AGGREGATE GeoAvg(@value float)
RETURNS float
EXTERNAL NAME GeoAvg_a.GEOAVE;
GO

W pierwszej linii skryptu wskazano na baz, w ktrej bdzie wykonywana reszta polece. Kolejne dwie instrukcje odpowiadaj za usunicie zoenia ASSEMBLY oraz
funkcji agregujcej AGGREGATE. Bd one nieuyteczne w pierwszej prbie tworzenia obu obiektw, ale zostay dodane celowo, aby pokaza, e w przypadku modyfikacji biblioteki CLR oba obiekty powinny zosta usunite i utworzone ponownie.
Utworzenie obiektu ASSEMBLY polega na podaniu jego nazwy i wskazaniu kwalifikowanej nazwy pliku zawierajcego skompilowan bibliotek *.dll. Natomiast utworzenie funkcji agregujcej wymaga rwnie podania nazwy i wskazania zewntrznej,
kwalifikowanej nazwy struktury. Nazwa ta skada si z nazwy obiektu ASSEMBLY
oraz nazwy struktury rozdzielonych kropk.
SELECT IdDzialu, dbo.GeoAvg(Wzrost) AS Sr_Geo
FROM Osoby
GROUP BY IdDzialu

Tak utworzona funkcja agregujca moe by teraz uywana na zasadach obowizujcych podczas stosowania wbudowanych, systemowych funkcji agregujcych, jak pokazano wyej. Skutek wykonania tego zapytania przedstawiony jest w tabeli 2.19.
Tabela 2.19. Skutek wykonania zapytania z funkcj agregujc utworzon przez uytkownika
IdDzialu

Sr_Geo

1,93885451242535

1,90754700161009

1,82928270445688

1,84635945910526

1,8181975615587

1,91885654670971

1,8023922637054

1,96919848521198

Analogicznie do wbudowanych funkcji agregujcych moliwe jest stosowanie ich nad


oknem logicznym OVER (PARTITION BY ), co znacznie zwiksza ich funkcjonalno. Przykad takiego zapytania przedstawiono poniej, a skutek jego wykonania jest
zawarty w tabeli 2.20.
SELECT IdDzialu, Wzrost,
dbo.GeoAvg(Wzrost) OVER(PARTITION BY IdDzialu) AS Sr_Geo
FROM Osoby

40

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 2.20. Skutek wykonania zapytania z funkcj agregujc utworzon przez uytkownika nad oknem
logicznym
IdDzialu

Wzrost

Sr_Geo

2.00

1,93885451242535

1.83

1,93885451242535

1.98

1,93885451242535

1.95

1,93885451242535

2.05

1,96919848521198

1.93

1,96919848521198

1.93

1,96919848521198

Poniewa struktury bibliotek CLR mog by tworzone z zastosowaniem dowolnego


jzyka platformy .NET, poniej zostaa powtrzona definicja dla starego, powszechnie znanego jzyka, jakim jest Visual Basic listing 2.2. Poza rozbienociami formalnymi wynikajcymi z rnic skadniowych midzy obydwoma jzykami naley
zwrci uwag na rozszerzon sekcj dyrektyw kompilatora, koniecznych do funkcjonowania tej biblioteki jako rda dla funkcji agregujcej.
Listing 2.2. Struktura wyznaczajca redni geometryczn kod w VB
Imports
Imports
Imports
Imports
Imports
Imports

System
System.Data.SqlTypes
Microsoft.SqlServer.Server
System.Data
System.Data.SqlClient
System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential)> _
<Serializable()> _
<SqlUserDefinedAggregate(Format.Native, _
IsInvariantToDuplicates:=False, _
IsInvariantToNulls:=True, _
IsInvariantToOrder:=True, _
IsNullIfEmpty:=True, _
Name:=GEOAVE)> _
Public Class GEOAVE
Private licznik As Integer
Private iloczyn As Double
Private temp As Double
Public Sub Init()
licznik = 0
iloczyn = 1.0
End Sub
Public Sub Accumulate(ByVal value As SqlDouble)
If (Not value.IsNull) Then
Licznik = licznik+1
iloczyn = iloczyn*value
End If
End Sub

Rozdzia 2. Zapytania analityczne

41

Public Sub Merge(ByVal group As GEOAVE)


licznik = licznik + group.licznik
iloczyn = iloczyn * group.iloczyn
Accumulate(group.Terminate())
End Sub
Public Function Terminate() As SqlDouble
temp = 1.0 / licznik
iloczyn = Math.Pow(iloczyn, temp)
Return iloczyn
End Function
End Class

Poniewa rnice formalne nie powinny by trudne do przeanalizowania nawet dla


przecitnie sprawnego programisty, nie zostan tutaj szerzej omwione. Natomiast
naley zwrci uwag na sposb odwoania si do klasy biblioteki podczas tworzenia
funkcji agregujcej. Pena nazwa kwalifikowana w tym wypadku skada si z nazwy
ASSEMBLY, w ktrej po kropce ujta w nawias kwadratowy nastpuje kwalifikowana
nazwa klasy publicznej, skadajca si z rozdzielonych kropk nazwy struktury i nazwy klasy. Pokazana rozbieno stanowi najistotniejszy element odrniajcy funkcj
agregujc utworzon w jzyku C# od takiej samej funkcji utworzonej w jzyku VB.
USE [BazaRelacyjna]
GO
DROP AGGREGATE GeoAvg_v
GO
DROP ASSEMBLY [GeoAvg_a_v]
GO
CREATE ASSEMBLY [GeoAvg_a_v]
AUTHORIZATION [dbo]
FROM C:\hurtownia_ap\sred_geom_v\sred_geom_v\bin\Debug\sred_geom_v.dll
WITH PERMISSION_SET = SAFE
GO
CREATE AGGREGATE GeoAvg_v(@value float)
RETURNS float
EXTERNAL NAME GeoAvg_a_v.[sred_geom_v.GEOAVE];
GO

Aby pokaza rwnoznaczno definicji bez wzgldu na zastosowany jzyk, przedstawiono zapytanie, w ktrym wyznaczono t sam funkcj agregujc, napisan z zastosowaniem C# i VB. Skutek wykonania tego zapytania pokazuje tabela 2.21.
SELECT IdDzialu, dbo.GeoAvg_v(Wzrost) AS Sr_Geo_v, dbo.GeoAvg(Wzrost) AS Sr_Geo
FROM Osoby
Group By IdDzialu

Jak wida z zaprezentowanych przykadw, moliwoci wykonywania analiz po stronie struktury relacyjnej s due. Sdz, e s w stanie zaspokoi zdecydowan wikszo potrzeb osb, ktre takich wynikw wymagaj. Mona miao powiedzie, e
zaprezentowane w tym rozdziale metody zapewniaj pene opracowanie sprawozdawczoci z dziaalnoci kadej firmy.

42

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 2.21. Porwnanie skutku dziaania funkcji agregujcych napisanych w C# oraz VB


IdDzialu

Sr_Geo_v

Sr_Geo

1,93885451242535

1,93885451242535

1,90754700161009

1,90754700161009

1,82928270445688

1,82928270445688

1,84635945910526

1,84635945910526

1,8181975615587

1,8181975615587

1,91885654670971

1,91885654670971

1,8023922637054

1,8023922637054

1,96919848521198

1,96919848521198

Rozdzia 3.

Struktura
hurtowni danych
Rola hurtowni danych
w procesie przetwarzania
Po rozwaaniach przeprowadzonych w poprzednim rozdziale pojawia si wtpliwo,
czy potrzebne nam s jeszcze jakie dodatkowe narzdzia do prowadzenia analizy danych. Przecie zakres funkcji proponowany po stronie transakcyjnej jest tak duy.
Niestety, nie wyczerpuje to oczekiwa, jakie przed analizami relacyjnych modeli baz
danych stawia wspczesno. Przede wszystkim naley odrzuci zaoenie, przyjmowane dotd niejawnie, e mamy niewyczerpane zasoby sprztowe. Dua ilo danych z reguy pociga za sob du ilo da dostpu. Dla duych wolumenw
przetwarzanie zoonych zapyta analitycznych wie si z duym zapotrzebowaniem
na pami. Powoduje to znaczce obcienie systemu, co moe prowadzi do problemw z wydajnoci biecego przetwarzania operacji transakcyjnych. Prostym
rozwizaniem wydaje si przeniesienie wykonywania zapyta analitycznych na okres
najmniejszego obcienia bazy danych zwykle pomidzy 3 a 5 w nocy (nocne
marki ju pi, a ranne ptaszki jeszcze nie wstay). Dodatkowe zamknicie przetwarzania w ramach transakcji z adekwatnie wysokim poziomem izolacji transakcji (read
only) powoduje, e wszystkie analizy prowadzone bd dla tego samego zestawu rekordw, np. z godziny 0:00, kiedy przestawiono poziom izolacji transakcji i rozpoczto transakcj analityczn. Silnik serwera odciony, zestaw danych ustalony,
liczba funkcji analitycznych wystarczajca mona powiedzie, e wszystkie warunki zostay spenione. Niestety, wraz ze wzrostem liczby danych ronie zarwno
zapotrzebowanie na liczb wykonywanych analiz, jak i czas realizacji kadej z nich
i proste zabiegi odciajce serwer mog by niedostateczne. Ponadto zaoono do
wyidealizowany zestaw danych wyjciowych. Przede wszystkim przyjto, e wszystkie dane zgromadzone w systemie transakcyjnym s przydatne w analizie. W praktyce przetwarzaniu analitycznemu podlega tylko niewielka liczba kolumn wyjciowych
tabel. Pomijane s najbardziej szczegowe informacje zawarte w rekordach. Drugim

44

Hurtownie danych. Od przetwarzania analitycznego do raportowania

uproszczeniem jest zaoenie, e wszystkie informacje s wprowadzone poprawnie.


Niestety, jake czsto w praktyce nie s stosowane sowniki wartoci, a istotne wartoci atrybutw s wpisywane rcznie, np. nazwy miast. W przetwarzaniu transakcyjnym powstaje rwnie sporo mieci bdcych efektem niefrasobliwych dziaa
operatorw: zapisywanie pustych lub niepenych rekordw, etc. Te dane powinny zosta odfiltrowane i ujednolicone. Najwaniejszym jednak problemem pozostaje to, e
w przypadku prowadzenia analiz dla duych przedsibiorstw rzadko kiedy mamy do
czynienia z jednolitym systemem transakcyjnym obowizujcym w caej firmie. Rne
dziay maj rnie przechowywane dane, inny system obsuguje ksigowo, inny sprzeda, a kolejny jest uywany w logistyce. Dane te powinny zosta zintegrowane tak, aby
mona byo dokonywa wsplnych oblicze dla caej firmy jednoczenie. Pamitajmy
rwnie, e cz danych historycznych nie musiaa w caoci zosta przeniesiona na
platformy relacyjne, std sporo informacji moe pochodzi ze starych baz btrieveowych
lub plikw MS Excela. Te wszystkie wyzwania spowodoway konieczno wprowadzenia specjalizowanych narzdzi do analizy danych, jakimi s hurtownie danych.
By moe eksperci zwizani z zarzdzaniem lub ekonomi nie s przekonani do tych
argumentw, ale nauka to wiara w ignorancj ekspertw (Richard Feynman).
Co zatem oferuj hurtownie danych? Przede wszystkim:
fizyczne odseparowanie przetwarzania analitycznego od przetwarzania

transakcyjnego (rne serwery);


posta danych przygotowan do prowadzenia analiz, zarwno pod wzgldem

zawartoci, jak i organizacji perspektywy lub ich materializacj do tabel;


wstpne przetworzenie danych wyznaczenie podsumowa dla wybranych

kolumn;
model przechowywania danych adekwatny do potrzeb analizy pozwala to

na szybkie wybieranie i filtrowanie danych otrzymanych z analizy;


tworzenie nowych analiz korzystajcych z istniejcych oblicze i specjalnego

zestawu funkcji i operatorw dedykowanego dla potrzeb hurtowni danych;


odpytywanie danych za pomoc rozszerzenia jzyka SQL MDX SQL

(MultiDimensional eXtension);
wizualizacj danych uzyskanych po przeprowadzeniu analiz.

Najwaniejszym pytaniem, jakie powinnimy sobie postawi, zanim zaczniemy tworzy hurtowni danych, jest to, dla kogo ma by ona przeznaczona. W kadym szanujcym si przedsibiorstwie bardzo dua liczba pracownikw (zwykle przewaajca)
ma dostp tylko do jakiego fragmentu bazy danych. Pracownicy najniszych szczebli
bd zapewne mieli dostp tylko do odczytu wybranych danych. Do pewnego poziomu im wyej w hierarchii, tym wiksze moliwoci dostpu do danych i manipulowania nimi. Zamy, e opisujemy struktur dostpu do danych w banku, a podstawowym poziomem jest operator (kasjer). Oczywicie s w tej strukturze rwnie osoby
o niszym dostpie do danych, np. ochrona nie ma wgldu w transakcje, ale moe
mie wgld w dane dotyczce informacji, ktry operator kiedy pracuje. Nasz operator
wykonuje w czasie pracy ogromn liczb transakcji, podejmujc przy tym bardzo du
liczb decyzji czy dokona wypaty i do jakiej kwoty, czy mona przyj depozyt,

Rozdzia 3. Struktura hurtowni danych

45

etc. Decyzje te s oczywicie cile okrelone wewntrznymi uregulowaniami banku


i nasz operator ma znikom szans na ich interpretacj. Wane jest, e pomimo bardzo
duej liczby decyzji ich oddziaywanie na funkcjonowanie firmy jest niewielkie.
Rwnie ewentualne skutki podjcia niewaciwej decyzji nie zawa na oglnej sytuacji
banku. Patrzc na kolejne szczeble w strukturze organizacyjnej, widzimy o wiele
szerszy dostp do danych, np. moliwo sprawdzania caej historii rachunkw cznie z informacj dotyczc rde, z ktrych wpyway przelewy, debetw, etc. Na tym
szczeblu mog by podejmowane decyzje o udzielaniu wysokich kredytw lub zakadaniu specjalnych lokat czy kont. W tym miejscu liczba podejmowanych decyzji jest
zdecydowanie mniejsza, ronie samodzielno decydowania, ale skutki popenienia
bdu s rwnie powaniejsze. Pomimo to nie powinny by one niebezpieczne dla
firmy jako caoci. Podjcie waciwej decyzji moe owocowa powanym zyskiem.
Na poziomie zarzdczym jednostki lub grupy paradoksalnie maleje zapotrzebowanie
na dostp do szczegowych danych. Prawdopodobnie pracownicy tego szczebla maj
potencjalny do nich dostp, jednak trudno sobie wyobrazi, e wasnorcznie wykonuj transakcje lub przegldaj szczegowe dane pojedynczego klienta. Bardziej s
zainteresowani danymi zbiorczymi, np. tym, jakie s wyniki finansowe z rozbiciem
na rodzaj produktu dla rnych kredytw, lokat; ktra grupa klientw przynosi
najwiksze dochody i jakimi produktami mona by j zainteresowa; jak ksztatowaa si
sytuacja finansowa jednostki na przestrzeni czasu. Tutaj liczba podejmowanych decyzji nie jest dua, ale potencjalne bdy mog by odczuwalne. Tak samo jak podjcie
poprawnej decyzji moe przynie naprawd duy zysk. Jeli przeniesiemy si na
najwyszy, centralny szczebel w hierarchii, zarzd caej firmy (wszystkich bankw
jednostkowych), to zauwaymy, e nie ma ju tam zapotrzebowania na dostp do danych szczegowych. Natomiast znacznie ronie rola przeprowadzanych analiz. To
one s podstaw podejmowania najwaniejszych w skali przedsibiorstwa decyzji
strategicznych, np. dotyczcych oprocentowania poszczeglnych produktw, zakresu
i adresatw kampanii reklamowej, oglnych zasad prowadzenia rachunkw i udzielania kredytw. Liczba podejmowanych decyzji jest niewielka, natomiast ich waga znaczca. Zarwno skutki bdw, jak i poprawnych dziaa mog decydowa o losach
firmy. Ten schematyczny rozkad liczby decyzji i ich konsekwencji dla firmy przedstawia rysunek 3.1. Zaznaczono na nim miejsce systemw transakcyjnych, OLTP (On
Line Transactional Processing), oraz analitycznych, OLAP (On Line Analytical Processing). W czci rodkowej zasig obu mechanizmw przetwarzania moe by
zmienny, w zalenoci od sposobu organizacji firmy. Moe rwnie istnie zakres,
w ktrym istnieje rwnolegy dostp do nich obu.
Mona zatem powiedzie, e przetwarzanie transakcyjne odpowiada za biec obsug klienta (firmy). Miernikiem oceny jest atwo przetwarzania, szybko dostpu
do danych mierzona liczb transakcji w jednostce czasu. Drugim aspektem jest pewno przechowywania danych i zapewnienie dostpu do nich tylko autoryzowanym
uytkownikom (ochrona danych). Oba kryteria s obiektywne i atwe do sprawdzenia
i porwnania.
W przypadku przetwarzania analitycznego OLAP kryterium jest jako podejmowanych decyzji, ktre s skutkiem przeprowadzanych analiz. Poniewa na rnym szczeblu
zakres podejmowanych decyzji jest rny, zestaw prowadzonych analiz musi by do
nich dostosowany. W zwizku z tym hurtownie danych, a przynajmniej dostp do ich
rnych czci, musz by dedykowane do poziomu w hierarchii zarzdzania firm.

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 3.1.
Miejsce
przetwarzania
analitycznego
i transakcyjnego
w zalenoci od wagi
i liczby decyzji

Waga decyzji
(zysk/strata)

46

OLAP

OLTP

Liczba decyzji

Narzdzia wykorzystujce OLAP s si rzeczy rozwizaniami dedykowanymi. Poniewa o skutku podjtej decyzji moemy przekona si dopiero ex post, rozwizania
analityczne musz by modyfikowane zgodnie z wynikami tych dziaa, czyli powinny ewoluowa wraz z rozwojem firmy. Niestety, postawione kryterium oceny trudno
nazwa obiektywnym, gdy jeli jakie dziaanie przynioso zysk, to nie da si wykluczy, e inne spowodowaoby jeszcze lepszy wynik. Podobnie w przypadku straty
moliwe jest, e istnieje dziaanie lepsze, dajce wynik pozytywny lub przynajmniej
mniej negatywny. Std proces udoskonalania rozwiza analitycznych musi by
oparty na dowiadczeniu, intuicji i nie da si go w peni zobiektywizowa, a tym samym zoptymalizowa pod wzgldem formalnym.

Proces integracji danych


Jak ju wspomniano, pierwszym etapem budowy hurtowni, poprzedzajcym wykonywanie jakichkolwiek analiz, jest zasilenie jej danymi (rysunek 3.2). Cao tego procesu
okrelana jest skrtem ETL (Extract, Transform, Load). W wikszoci przypadkw problem wywodzi si z prawdziwego zaoenia, e w duych organizacjach dane do analiz
pochodz z wielu rde, ktre maj niejednolit struktur. Pierwszym etapem jest oczywicie wskazanie tych rde. Zazwyczaj naley wskaza odpowiedni sterownik,
most (getway) dostpu do danych, np. dedykowane rozwizania: ODBC, OLE DB,
JDBC itd. Dla kadego z nich trzeba zdefiniowa sposb poczenia acuch poczeniowy (connection string) oraz sposb i dane potrzebne do autoryzacji na wskazanym
serwerze. Kolejny krok to wskazanie obiektw (tabel), ktre zawieraj dane potrzebne do
przeprowadzenia analizy. Poniewa rzadko mamy do czynienia z tabelami tak zorganizowanymi po stronie relacyjnej, e zawieraj tylko takie dane, a ponadto ich posta
nie jest dopasowana do potrzeb analiz (cz danych jest obliczana na podstawie kilku pl, np. warto=cena*ilo, opis osoby zawiera poczenie nazwiska z imieniem
itd.), zwykle budowane s odpowiednie perspektywy. Pobranie danych z perspektywy
wymaga wykonania zapytania, ktre j definiuje, a ktre moe by zoone, zatem
czsto stosuje si ich materializacj do nowych tabel, bezporednio wykorzystywanych w analizie, co prowadzi do poprawy wydajnoci zasilania hurtowni.

Rozdzia 3. Struktura hurtowni danych


Rysunek 3.2.
Proces ETL i jego
elementy skadowe
oraz miejsce
hurtowni danych
w przetwarzaniu
danych

47

Ekstrakcja
Baza A

Synchronizacja

Baza B

Baza X

Integracja

adowanie

Hurtownia
Danych

Transformacja

Poniewa dane mog by zapisywane w rnej postaci, naley je ujednolici. Najprostszym przykadem jest pole daty, ktre nie ma standardowego formatowania i jest
zalene od ustawie narodowych, ale rwnie moe by definiowane przez programist. Najprostszym zabiegiem jest przeksztacenie daty na wewntrzn posta numeryczn, a nastpnie zwrotnej konwersji na posta zgodn z jednym wybranym formatowaniem. Taki zabieg powinien by przeprowadzony po stronie serwera relacyjnego,
poniewa dla rnych producentw oprogramowania typ daty ma rn dat pocztkow, od ktrej jest wyznaczana wewntrzna liczbowa reprezentacja (Oracle
1 stycznia 4712 p.n.e., MS SQL Server datatime: 1 stycznia 1753, smalldatatime:
1 stycznia 1900). Jest jeszcze gorzej jeli dane tego typu zapisywane s w polach
tekstowych, moemy mie do czynienia z pen dowolnoci zapisu, rnorodn
w pojedynczej bazie lub nawet tabeli. Powoduje to konieczno budowania specjalnego oprogramowania do parsowania i formatowania tych danych. Na szczcie coraz
rzadziej mamy z tym do czynienia. Podobne kopoty mog nas spotka w przypadku
liczb rzeczywistych: rne separatory dziesitne, stosowanie separacji tysicy (z reguy Chr(162) unbreakable space, a nie, jak si zwyko sdzi, Chr(32) spacja),
a w przypadku waluty odmienny zapis jej symbolu. Duym problemem jest ujednolicenie zapisu danych tekstowych, ktre nie byy pobierane ze sownikw wartoci.
Dla kadego zapis d, Lodz czy U (najkrtsza nazwa miasta w Polsce) jest na
pierwszy rzut oka nazw tego samego miasta chocia znieksztacon. O ile trzeci
wariant nie bdzie wystpowa, poza dowcipami z brod, o tyle nie da si wykluczy
bdw w zapisie, spowodowanych nieuwag, nieumiejtnoci wprowadzenia polskich znakw diakrytycznych czy te wynikajcych z nieznajomoci ortografii. Usunicie bdw zapisu wydaje si atwe, kiedy mamy t operacj wykona rcznie.
Natomiast napisanie oprogramowania, ktre bdzie automatyzowa ten proces, jest
zadaniem naprawd zoonym, zwaszcza e istnieje wiele podobnie brzmicych
nazw, jak choby wojewdztwa lubelskie i lubuskie, ktre w przypadku bdw
w zapisie mog si jeszcze bardziej upodobni. Naley zauway, e informacja geograficzna jest czsto podstaw wykonywania analiz. Dodajmy do tego jeszcze fakt, e
dane po stronie relacyjnej s czsto zamiecone w efekcie niedokoczonych dziaa
operatorw niedokoczone wpisy w rekordach, nieusunite puste transakcje. Bdy
mog pojawia si rwnie (niewspmiernie rzadziej) na skutek usterek przetwarzania, niezalenych od operatora, pojawiajcych si na poziomie aplikacji obsugujcej
baz danych czy te po stronie serwera danych. Proces oczyszczania danych pomimo
pozorw prostoty jest jednym z najmudniejszych i najbardziej kopotliwych zada
przygotowywania danych.

48

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Kolejnym etapem jest synchronizacja danych pochodzcych z rnych rde. Moe


to by zwizane z ujednoliceniem indeksowania kluczy tabel zarwno sownikowych,
jak i zawierajcych informacje o przeprowadzanych operacjach, eliminacj powiele
wartoci w sownikach, etc. Po poprawnie wykonanym oczyszczaniu proces ten powinien by wzgldnie mao skomplikowany. Nastpnie dane te mog zosta zintegrowane do wsplnej postaci, np. do poredniego schematu relacyjnego utworzonego
na odseparowanej od wyjciowych rde instancji serwera BD.
Pozostaje jeszcze proces adowania danych do schematu, ktry bdzie bezporednio
wykorzystywany przez hurtowni. Trzeba zaznaczy, e ze wzgldu na fakt, i analizy prowadzone s na bardzo duych wolumenach danych, proces adowania moe by
do dugotrway. Cay proces ETL naley do najbardziej czasochonnych operacji
wrd rozwaanych przez nas zagadnie. Poniewa dane po stronie baz transakcyjnych cay czas przyrastaj, s modyfikowane, proces zasilania hurtowni te powinien
odbywa si cyklicznie. Najgorszym pomysem jest ponawianie za kadym razem
caego cyklu wraz z niezmienionymi po stronie transakcyjnej, wczeniej zaadowanymi
rekordami. Warto rozway proces zasilania rnicowego, co wie si ze znakowaniem
rekordw wczeniej przesanych lub replikowaniem danych albo ze stosowaniem kopiowania rnicowego z wykorzystaniem polecenia MERGE czy te kursorw.

Elementy hurtowni danych


W kocu jestemy po stronie hurtowni danych, gdzie przechowywane s wstpnie
przetworzone dane. Dane te mog mie w dalszym cigu posta relacyjn ROLAP
(Relational OnLine Analytical Processing) lub najczciej stosowan posta wielowymiarow MOLAP (Multidimensional OnLine Analytical Processing). Dopuszczalne jest przechowywanie i przetwarzanie struktur mieszanych HOLAP (Hybrid OnLine
Analytical Processing). Z reguy jednak mylimy o hurtowni danych jako pewnej
strukturze wielowymiarowej, co z reguy przyprawia wiele osb o dreszcze, gdy jak
powiedzia Albert Einstein, gdy niematematyk syszy o czwartym wymiarze, to dostaje gsiej skrki.
Grne ograniczenie liczby wymiarw wynosi z reguy kilkadziesit i jest zalene od
konkretnego rodowiska. Zgodnie z dokumentacj MS w tym rozwizaniu liczba
wymiarw jest nieograniczona. W tym kontekcie mona przytoczy anegdot dotyczc Stefana Banacha, wybitnego specjalisty midzy innymi z zakresu topologii.
Rozpoczynajc wykady z nowym rocznikiem studentw, mwi tak:
Wyobracie sobie dziesiciowymiarow, ortogonaln przestrze metryczn
patrzy na studentw. No dobrze, wyobracie sobie piciowymiarow,
ortogonaln Rozumiem, wyobracie sobie trjwymiarow przestrze
euklidesow znw rozglda si z wyran rezygnacj. Dobrze, wemy
kartk papieru.
Jestemy w o wiele trudniejszej sytuacji, gdy ograniczenie si do dziesiciu wymiarw, ilustrowanych osiami liczbowymi, jak proponowa Banach, jest bardzo duym
uproszczeniem tego, z czym mamy do czynienia na co dzie, analizujc struktury

Rozdzia 3. Struktura hurtowni danych

49

hurtowni danych. C, moliwoci postrzegania przez czowieka ograniczaj si do


trzech wymiarw i tyle jestemy w stanie z wykorzystaniem perspektywy narysowa
na kartce papieru. Dlatego te kolejne ilustracje ograniczaj si do takiej postaci. Podstawow struktur moemy zatem przedstawi tak jak na rysunku 3.3.
Rysunek 3.3.
Podstawowa struktura
hurtowni danych
uproszczona
do trzech wymiarw

Wymiar Z

Zn

Z2

Y1
Y2

Wymiar X

Z1
X1

X2

X3

Xn

Yn

Wymiar Y

Osie wsprzdnych reprezentuj wymiary, z reguy opisane przez wartoci dyskretne. Dlatego podobiestwo do szecianu narysowanego w ukadzie kartezjaskim jest
do zwodnicze. Co prawda moemy przyj, e wartoci atrybutw na osiach s
w jaki sposb uporzdkowane, ale nie stanowi osi liczbowych. Przykadem takiego
wymiaru, czsto stosowanego w praktyce, moe by pooenie geograficzne, okrelajce np. lokalizacj jednostek naszej firmy przez podanie miasta: Wrocaw, d,
Warszawa, Olsztyn, Szczecin. Jak wida, zostao wykorzystane uporzdkowanie
w kierunku narastajcej wartoci szerokoci geograficznej (od poudnia do pnocy
geograficznej). Takie wartoci, atrybuty, wzgldem ktrych dokonujemy sortowania,
nazywamy regresorem. Intuicja podpowiada, e wybr sposobu rozmieszczenia atrybutw na osi moe mie wpyw na rezultaty analiz, chociaby przy porwnywaniu
wynikw dwch ssiadw. Moe jednak w naszym przykadzie zmieni ukad atrybutw i posuy si ich dugoci geograficzn ze wschodu na zachd? W realiach
Polski ma to uzasadnienie zarwno historyczne, jak i gospodarcze. Nasza o miaaby
wtedy posta: Olsztyn, Warszawa, d, Wrocaw, Szczecin. Moemy rwnie zastosowa jako regresor liczb pracownikw kadego z oddziaw (lub wybranego dziau
tego oddziau, np. zbytu, handlowego, etc.). Takie uporzdkowanie ma rwnie silne,
a moe i silniejsze ni poprzednie umocowanie w praktyce wiksze jednostki powinny przynosi wiksze zyski. Jak wida, wybr sposobu organizacji osi moe mie
rne uwarunkowania i prowadzi do innej postaci wymiaru. Innym przykadem czsto spotykanego wymiaru jest o produktw. Trzymajc si przykadu bankowego,
moemy mie tu atrybuty o wartociach: lokata, kredyt, karta, etc. Tak jak poprzednio, trudno jednoznacznie okreli sposb organizacji osi. Wydaje si, e na tym tle
do dobrze prezentuje si o opisujca kolor, w przypadku banku by moe mao
praktyczna, ale jeli wybierzemy wartoci: bronze, silver, gold, platinum, to mamy
okrelenie rodzaju karty kredytowej lub patniczej. Poza stopniowaniem zgodnym
z wartoci kruszcu moemy rwnie stosowa jako regresor dugo fali odpowiadajcej danej barwie. Ale znajc pomysowo handlowcw, czasami trudno okreli,
z czym mamy do czynienia. Prosz pomyle, c to za kolor noc Kairu. Jest to

50

Hurtownie danych. Od przetwarzania analitycznego do raportowania

przykad wzity z ycia miaem kiedy samochd w tym kolorze. Ale przecie mamy
rwnie wymiary reprezentowane przez wartoci numeryczne. W tym przypadku
sprawa wydaje si zupenie prosta. Wymiar jest w sposb naturalny uporzdkowany
i nie powinien nastrcza adnych problemw. Jednak jeli zaoymy, e atrybutem
jest cena towaru, to w zasadzie trudno bdzie nam znale dwa towary o takiej samej
wartoci, z dokadnoci co do grosza. W wyniku bdziemy mieli o, ktra de facto
dubluje informacje o towarach, na dodatek trudn do przeanalizowania, poniewa odczytanie nazwy towaru na podstawie ceny wie si z dodatkowym przeszukiwaniem
bazy. Analiza sprzeday dla dokadnej ceny produktu te wydaje si mao celowa,
zwaszcza e dany towar mg na przestrzeni czasu zmienia swoj cen. Dlatego
atrybuty numeryczne rzadko kiedy reprezentowane s przez dokadne wartoci;
znacznie czciej s reprezentowane przez ich przedziay, ktre s etykietowane napisami objaniajcymi ich sens (w dziedzinie cen: bardzo tanie, tanie, przecitne, drogie, bardzo drogie), co powoduje przejcie do atrybutw symbolicznych, dyskretnych.
Procesy dyskretyzacji i etykietowania (dobr waciwych sownikw) s zadaniami
do zoonymi i zostan precyzyjniej wyjanione w omawianych dalej rozwizaniach praktycznych.
W praktyce najczciej wystpuje o daty (czasu), ktra w wewntrznej reprezentacji
kadego systemu komputerowego ma posta liczby. Tak samo jak w przypadku innych
wymiarw numerycznych, problemem nie jest uporzdkowanie, ale dyskretyzacja.
Na szczcie tutaj moemy mwi o naturalnych poziomach granulacji: rok, procze,
kwarta, miesic, tydzie, dzie, a pniej podobnie w odniesieniu do czasu. Dodatkowo poziomy te stanowi naturaln hierarchi rok skada si z proczy, rok
i procze z kwartaw itd. Musimy ustali, czy wszystkie one s dla nas interesujce
oraz na jakim najniszym poziomie zakoczy podzia. Niestety, pojawia si rwnie
i drugi problem, ktry wyranie wida przy tygodniach. Miesic nie skada si z penych tygodni (jest to moliwe tylko dla lutego w latach nieprzestpnych), co zaburza
mechanizm penego zagniedania si poziomu podrzdnego w nadrzdnym. Znw
musimy podj arbitraln decyzj, co zrobi z pocztkami i kocami tygodni nie
w peni nalecymi do miesicy. Jak wida z przykadw, proces tworzenia wymaga
podejmowania wielu decyzji, ktre musz by oparte tylko na dowiadczeniu projektanta hurtowni danych oraz na rozpoznaniu potrzeb rodowiska, dla ktrego ta hurtownia jest przeznaczona.
Jeli zdefiniowalimy ju wymiary w ilustracji graficznej, trzy (x, y, z) to wybr wartoci atrybutu, np. x3 definiuje przekrj (plaster kostki), do ktrego bdziemy mieli
szybki dostp rysunki 3.3 i 3.4. Podobnie w przypadku atrybutu zi definiowany jest
przekrj dla ustalonej wartoci tego atrybutu. Ponadto moemy w ten sposb odwoa si
do czci wsplnej dla pary wartoci niezalenych atrybutw. Wybr trzech wartoci
xi, yi, zi prowadzi w przypadku trzech wymiarw do wskazania konkretnej komrki,
w ktrej s przechowywane wartoci funkcji agregujcych wyznaczonych w trakcie
przetwarzania. Powoduje to, e odzyskanie wartoci analiz dla patw, ich przeci
czy konkretnych komrek jest bardzo szybkie. Podstawowymi funkcjami agregujcymi stosowanymi podczas definiowania kostki s suma i liczebno elementw
(SUM, COUNT). Moemy, odwoujc si do przykadu bankowego i rysunku 3.4,
przyj, e w oddziale zi (Zgierz) w miesicu xi (marcu) sprzedano produkty yi (karty
kredytowe) za czn sum 12 000 z, a transakcji byo 20. W rodowisku Analysis

Rozdzia 3. Struktura hurtowni danych


Rysunek 3.4.
Podstawowa struktura
hurtowni danych
zawarto
pojedynczej komrki

51

12000 z
20 szt.
480 z

Wymiar Z

Zn

Z2

Y1
Y2

Wymiar X

Z1
X1

X2

X3

Xn

Yn

Wymiar Y

Services nie definiuje si innych funkcji agregujcych, std warto rednia musi by
obliczana definicyjnie (x = xi/n). Dokadnie rzecz ujmujc, istnieje funkcja AVG, ale
nie jest wyznaczana na wyjciowym zestawie wartoci, lecz na ich podsumowaniach
rednia z sumy. Zastosowanie wyraenia pozwalajcego na wyznaczenie innych
wartoci w komrkach wie si z utworzeniem tzw. miary kalkulowanej (obliczanej). Na rysunku 3.4 trzeci wartoci jest wanie warto rednia.
W poprzednich rozwaaniach zaoono, e kady wymiar ma jeden poziom granulacji.
Jednak praktyka mwi, e wikszo atrybutw moe mie podpoziomy, std kady
z nich moe zosta rozwinity i pokazywa poziom niszy. Ilustruje to rysunek 3.5,
gdzie jedna z komrek zostaa przedstawiona w postaci podkostki, co ma symbolizowa wanie taki stan. Oznacza to, e komrka ta zawiera nie tylko podsumowania dla
waciwego poziomu, ale rwnie wskazanie na wszystkie elementy poziomw pochodnych. Ta sama ilustracja moe te symbolizowa to, e dane do hurtowni niekoniecznie musz by pobierane bezporednio ze schematu relacyjnego, ale mog pochodzi take z mniejszych, tematycznych hurtowni danych, dawniej nazywanych
skadnicami danych (Data Marts). Podzielam pogld, e dla rozwiza dedykowanych
czy te ich pocze naley stosowa nazw hurtownia danych, dodatkowo okrelajc tylko jej zakres. Jeli czymy wiele rozwiza tematycznych, to raczej dane
z jednego z nich bd zawieray jeden pat, np. wszystkie agregacje dla jednego oddziau lub przynajmniej wikszy jego fragment, np. dla zestawu produktw.
Powrmy do problematyki definiowania wymiarw. Wiele atrybutw, nawet symbolicznych, ma bardzo du liczb wartoci. Opaca si wtedy poczy je w grupy.
Zwykle wykonuje si to, tworzc hierarchi, gdzie wyszy poziom wyznacza pogrupowane atrybuty. Moliwe jest tworzenie sztucznych poziomw agregacji, opierajc
si na rwnej liczebnoci grupy lub jawnie podajc liczb grup. Najczciej jednak
jest tak, e moliwe jest wyznaczenie logicznego poziomu nadrzdnego (rysunek 3.6).
Towary moemy poczy w kategorie towarw. Oczywicie takich poziomw moemy wyznacza wiele, np. kategorie, podkategorie, grupy, towary. Liczba poziomw
w hierarchii nie jest ograniczona, ale musi by w tym przypadku dana jawnie. Zwykle
wymiary uzupeniane s na kadym poziomie o atrybut reprezentujcy nieznane (najczciej null) wartoci na kadym poziomie unknown.

52

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 3.5.
Idea przechowywania
danych w strukturze
wielowymiarowej,
definiowania
przekrojw
i drenia danych

Wymiar Z

Zn

Z2

Y1
Y2

Wymiar X

Z1
X1

X2

X3

Xn

Yn

Wymiar Y

Rysunek 3.6.
Hierarchiczna
struktura wymiaru
o dwch poziomach

Atrybut 1
Atrybut 2
Kategoria 1

...
Atrybut n

Atrybut n+1
ALL

Kategoria 2

...
Atrybut n+m

Atrybut n+m+1
Kategoria 3

...
Atrybut n+m+k

...
...

Kady z wymiarw moe mie zdefiniowanych wiele hierarchii. Naturalnym przykadem


drzewiastej struktury jest wymiar daty i czasu omawiany poprzednio (rysunek 3.7).
W tym przypadku rwnie mamy do czynienia z wieloma poziomami, przy czym ich
liczba moe by naprawd dua: rok, procze, kwarta, miesic, dzie. Co wicej,
moemy definiowa rne czciowo niezalene hierarchie dla tego samego wymiaru:
rok, trymestr, miesic; rok, miesic, dzie; rok, tydzie, dzie. Jak wida, hierarchie
te mog mie wsplne poziomy, mog stanowi podzbir ju istniejcej hierarchii. Zawsze jednak maj zdefiniowan podczas ich tworzenia liczb poziomw. Kady wymiar
hierarchiczny ma zdefiniowany obiekt nadrzdny o domylnej nazwie ALL, ktry stanowi korze drzewa (ROOT). Wskazuje on na podsumowania dla wszystkich elementw danego wymiaru.
Innym przykadem hierarchii s hierarchie oparte na relacji rodzic potomek. Rozwamy przykad tabeli Osoby, w ktrej kluczem gwnym jest pole IdOsoby (rysunek 3.8).
Kady pracownik ma swojego przeoonego szefa, ktrego wskazuje klucz obcy
IdSzefa. Kady szef jest rwnie pracownikiem firmy posiadajcym wasny identyfikator
IdOsoby. Dlatego w polu IdSzefa zapisywane s wskazania na pole IdOsoby waciwego

Rozdzia 3. Struktura hurtowni danych


Rysunek 3.7.
Przykad struktury
hierarchicznej
dla wymiaru daty

53

ALL
2006
1. kwarta
stycze
luty
marzec
...
4. kwarta
padziernik
listopad
grudzie
...
2009
1. kwarta
stycze
luty
marzec
...
4. kwarta
padziernik
listopad
grudzie

przeoonego. Mwimy tutaj o samozczeniu, gdy relacja jeden do wielu dotyczy


pl tej samej tabeli. Taka sama struktura jest w stanie opisa dowolny graf. Mwimy
o notacji krawdziowej, poniewa para wartoci IdOsoby, IdSzefa wystpujca w tym
samym rekordzie pokazuje krawd grafu midzy tymi dwoma wzami.
Rysunek 3.8.
Definicja
samozczenia
w tabeli Osoby
krawdziowa
reprezentacja grafu

Osoby

IdOsoby

Nazwisko

IdSzefa

IdOsoby
...
Nazwisko

Kowalski

Nowak

Janik

IdSzefa

Wilk

Lis

Kowal

Pawlak

Kowalik

W celu wyznaczenia najbardziej nadrzdnego elementu szefa wszystkich szefw


(capo di tutti capi) zwykle podajemy w kluczu obcym tego rekordu warto NULL.
Rwnie tego typu hierarchie mog stanowi osie wielowymiarowej struktury hurtowni danych. Ciekaw ich cech jest to, e nie posiadaj cile okrelonej liczby poziomw. Ich liczba wynika z rzeczywistych danych, a kada reorganizacja moe spowodowa zmian tej struktury cznie z liczb poziomw. Przykad hierarchii rodzic
potomek przedstawia rysunek 3.9.

54

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 3.9.
Drzewiasta
struktura wymiaru
rodzic potomek;
odwzorowanie tabeli
z rysunku 3.8

Samozczenie moe wystpowa na wielu poziomach. W sferze organizacji przedsibiorstwa moemy definiowa wzajemn podlego rnych jednostek dziaw. Nadrzdnym dziaem bdzie np. dyrekcja, ktrej bezporednio podlegaj dziay administracji i techniczny. Natomiast dzia handlowy jest podporzdkowany administracji.
Moe doj do ciekawej sytuacji, kiedy zaoymy, e szefem pracownika moe by
tylko osoba z tego samego dziau lub dziau, ktry wystpuje bezporednio nad nim
w strukturze podlegoci dziaw. Z reguy tak jest w praktyce. Mamy tutaj do czynienia
ze zjawiskiem synchronizowania hierarchii (drzew). Pomimo e takie wymiary maj
swoje uzasadnienie praktyczne, nie maj jeszcze, ze wzgldu na swoj zoono, realizacji praktycznej w adnym komercyjnym rozwizaniu hurtowni danych.
Moemy ju dokona pierwszego podsumowania wiadomoci o strukturach, ktre bdziemy za chwil tworzy. Podstaw jest wielowymiarowa struktura (kostka) zawierajca
podsumowania w kadej z elementarnych komrek wyznaczone podczas przetwarzania
(rysunek 3.10). Atrybuty zawierajce te podsumowania nosz nazw miar (MEASURES).
Dla kostki moe by wyznaczonych wiele miar, ktre s zwykle podsumowaniem.
W wikszoci przypadkw wyznaczana jest rwnie miara reprezentujca liczb jednostek, obliczana przez zliczenie wystpie klucza podstawowego tabeli zawierajcej
dane do sumowania. Miary mog by te wyznaczane na podstawie wyrae; nazywane s wtedy miarami kalkulowanymi (obliczanymi).
Rysunek 3.10.
Poziomy definiowania
miar i wymiarw
w hurtowni danych

KOSTKA

WYMIARY
(DIMENSIONS)

MIARY
(MEASURES)

ATRYBUTY
WYMIARU

POZIOMY

HIERARCHIE

Krawdzie kostek s wyznaczane przez wymiary (DIMENSIONS). Wymiary mog


by opisywane zarwno atrybutami opisowymi (dyskretnymi), ktre wymagaj ustalenia
sposobu porzdkowania, jak i numerycznymi (cigymi), ktre z reguy musz by
dzielone na dyskretne zakresy, przedziay. Atrybuty s czsto grupowane w poziomy,

Rozdzia 3. Struktura hurtowni danych

55

a te z kolei mog wyznacza dla kadego wymiaru wiele hierarchii. Jak wida, problemy ze zrozumieniem wielowymiarowoci reprezentowanej przez ukad ortogonalnych
osi liczbowych jest drobnostk w porwnaniu ze struktur wielowymiarow, z ktr
przyszo nam si mierzy. Na marginesie mona doda, e w hurtowniach wymiary
nie musz by ortogonalne czy niezalene liniowo. Mona sobie wyobrazi atrybuty
czciowo skorelowane, wyznaczajce dwa rne wymiary. Takie podejcie wymuszane bdzie przez oczekiwanie odbiorcw albo, co jest rwnie czste, na skutek braku
moliwoci wyeliminowania zalenych wymiarw przed przeprowadzeniem analizy.
Moemy dokona tylko korekty a posteriori. Praktyczne wymagania analiz bywaj
bardzo zoone. No c, rzeczywisto nie zawsze jest tym, czym si wydaje (Terry
Pratchett (Mort)). Co daj nam takie komplikacje formalne i pojciowe? Poniewa
w kadej komrce mamy ju przygotowane policzone dane, a wskazanie ich odbywa si
przez wybranie odpowiedniego atrybutu, poziomu lub ich zbioru, pozyskiwanie danych
jest duo szybsze ni w przypadku bezporedniego odpytywania struktur relacyjnych.
Przyjrzyjmy si strukturze relacyjnej odwzorowujcej na poziomie warstwy logicznej,
a take na poziomie poredniej warstwy relacyjnej struktur wielowymiarow przed
jej przetworzeniem (rysunek 3.11). Centraln jej cz stanowi zawsze tabela faktw,
ktra zawiera wszystkie wielkoci stanowice podstaw do wyznaczania miar, czyli
fakty. Wartoci tych atrybutw musz by numeryczne ze wzgldu na wykonywane
na nich pniej obliczenia (w praktyce rwnie w przypadku funkcji COUNT, ktra
radzi sobie z atrybutami innych typw). Poza faktami w tabeli tej musz by zdefiniowane klucze obce, suce do poczenia z faktami tabel reprezentujcych wymiary.
W wikszoci rodowisk tabela ta musi zawiera klucz podstawowy. Jeli nie jest to
klucz fizyczny (majcy swj odpowiednik w tabeli relacyjnej), to tworzony jest klucz
logiczny identyfikator wiersza w tabeli faktw. Za pomoc wasnych kluczy podstawowych, za porednictwem kluczy obcych, z tabel faktw poczone s tabele reprezentujce dane definiujce wymiar. Jeli wszystkie tabele wymiarw poczone s
bezporednio z tabel faktw, mwimy o kostce w modelu gwiazdy. Jeeli istnieje
chocia jeden wymiar czcy si z tabel faktw za porednictwem innej tabeli reprezentujcej wymiar, to mwimy o modelu patka niegu. Taki model wystpuje najczciej wtedy, gdy wymiar ma ustalone przynajmniej dwa poziomy, a dane do niego
s zgromadzone co najmniej w dwch tabelach. W modelu patka poredniczca tabela wymiaru musi mie zdefiniowany dodatkowy klucz obcy, za ktrego porednictwem czy si tabela poziomu nadrzdnego. Czasami spotyka si rwnie model
podwjnego (wielokrotnego) patka niegu. Ma to miejsce wtedy, kiedy dane stanowice fakty zgromadzone s w wicej ni jednej tabeli, a wymiary s czone do takiej
struktury za pomoc kadej z tych tabel. Naturalna jest, chociaby ze wzgldu na zoono formaln, tendencja do upraszczania modeli przynajmniej do modelu patka. Czsto
dymy do zredukowania go do gwiazdy. Najprostszym rozwizaniem jest stosowanie jako rde danych w miejsce tabel perspektyw czcych atrybuty pochodzce
z rnych miejsc. W takim przypadku nawet dla wymiarw o wielu poziomach wystarczajce jest odwoanie do pojedynczego widoku zbierajcego dane z wielu tabel.
Mona powiedzie, e relacje zamiast na poziomie tabel s realizowane jako zczenia wielu rde schematu relacyjnego. Podobny zabieg dotyczy tabeli faktw, ktra
jest w istocie dynamiczn kopi danych pochodzcych z wielu tabel. Czsto dane te
s wstpnie przetworzone w celu zebrania w jednym miejscu zarwno kluczy obcych
definiujcych punkty doczenia wymiarw, jak i oblicze wyznaczajcych wartoci

56

Hurtownie danych. Od przetwarzania analitycznego do raportowania

wyrae definiujcych bardziej zoone fakty (miary). Odpytywanie takiej perspektywy wie si jednak z wykonaniem zapytania wybierajcego, czsto do zoonego, ktre stanowi jej definicj. Wymaga to znacznego nakadu zasobw w postaci
pamici RAM i do dugiego czasu. Poprawa wydajnoci implikuje zatem materializacj rde danych. Poniewa w rodowisku SQL Server nie dysponujemy obiektem
perspektywy zmaterializowanej, to materializacji dokonujemy na skutek przepisania
zestawu rekordw definiowanych przez perspektyw do poredniej tabeli, ktra z kolei jest rdem danych dla hurtowni.

Rysunek 3.11. Struktury gwiazdy i patka niegu

W rezultacie przetwarzania, a nastpnie odpytywania kostki otrzymujemy posta wynikw analogiczn do dobrze znanej struktury tabeli przestawnej. Jednak taka posta,
w ktrej wyniki reprezentowane s przez tabele zawierajce du ilo danych numerycznych, jest z reguy mao czytelna. Jak dobrze wiemy, najwiksz ilo informacji
jestemy w stanie pozyska wzrokowo. Poniewa wyniki powinny by atwe do przeanalizowania dla osb zarzdzajcych firm, wanym elementem ich prezentacji jest
wizualizacja. Powtarzajc za Epiktetem, raz zobaczy jak rzecz znaczy wicej, ni
sto razy o niej usysze, warto kady wynik przetworzy na posta graficzn. Dlatego finalnym produktem naszych analiz bdzie bez wtpienia jaki wykres. W tym miejscu
trzeba odda naleny szacunek troch niedocenianemu programowi MS Excel, ktry
oferuje jedne z najbardziej plastycznych narzdzi wizualizacji danych.

Rozdzia 4.

Integracja danych
Wprowadzenie do Integration Services
Jedna z najpopularniejszych definicji bazy danych mwi, e jest to uporzdkowany
zbir danych. Jednak praktyka pokazuje zupenie co innego. Rzeczywiste systemy
gromadzenia danych i zarzdzania nimi nie s wcale tak pedantycznie zorganizowane.
Niestety, jest to stan wynikajcy nie tylko z braku wiedzy twrcw, ale rwnie ze
zmian oprogramowania, czenia zasobw danych, etc. Informatycy, a zwaszcza specjalici od przetwarzania analitycznego maj w zwizku z tym cay czas duo pracy, co
powinno ich cieszy, bo bd zawsze potrzebni w firmie. Prawdziwa jest zatem odpowied na bardzo podstawowe pytanie: Dlaczego Chaos zawsze wygrywa z Porzdkiem? Poniewa jest lepiej zorganizowany (Terry Pratchett). Jeli jeszcze dodamy do
tego znan z fizyki zasad powszechnego wzrostu entropii, czyli wzrostu nieuporzdkowania, otrzymamy obraz tego, z czym walczymy. Jednym z waniejszych narzdzi,
ktrymi moemy si posuy do zrealizowania tego zadania, jest Integration Services.
Jest ono jednym z elementw MS Business Intelligence (rysunek 4.1), drugiego z podstawowych narzdzi SQL Server.
Rysunek 4.1.
Uruchomienie
aplikacji Business
Intelligence

Pierwszym krokiem jest utworzenie nowego projektu, jak pokazano na rysunku 4.2.
atwo zauway, e wszystkie projekty Business Intelligence s tworzone za pomoc
platformy .NET. Zainstalowanie samej platformy nie pozwala jednak tworzy projektw integracji danych ani innych aplikacji analitycznych. Aby uzyska t funkcjonalno, konieczne jest zainstalowanie SQL Server.
Naley rwnie zdefiniowa rodzaj projektu, jaki bdzie tworzony (rysunek 4.3). Do wyboru mamy:
Analysis Services projekt hurtowni danych lub zgbiania danych (rozdzia 5.);
Integration Services projekt migracji i integracji danych, ktremu

powicony jest ten rozdzia;

58

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.2.
Tworzenie nowego
projektu

Rysunek 4.3.
Tworzenie nowego
projektu wybr
jego rodzaju oraz
definiowanie jego
nazwy i lokalizacji

Reporting Services projekt raportowania w postaci witryny WWW

(rozdzia 7.).
W kadym z rodzajw wystpuj podkategorie, rnice si gwnie wyzwalanymi na
pocztku pracy kreatorami. Zasadnicza funkcjonalno podklas jest taka sama. Na rysunku 4.3 widzimy, e moliwe jest rwnie tworzenie projektw aplikacji w jzykach zintegrowanych z platform. Taka moliwo istnieje pod warunkiem zainstalowania penej platformy .NET. Podczas tworzenia nowego projektu warto zwrci uwag
na lokalizacj, w ktrej bdzie on si znajdowa, oraz na zastosowany silnik platformy
Framework.
Jeli wybierzemy podkategori Connection Project, jako pierwszy uruchomiony zostanie kreator poczenia tworzcy pierwszy pakiet projektu. Jeli wybierzemy drugi
wariant, pakiet bdzie musia zosta utworzony rcznie. Na rysunku 4.4 widzimy wygld pustego pakietu. Pozostawiono domylnie nadan mu przez system nazw. Dostpne s cztery zakadki: Control Flow, suca do definiowania zada i kontenerw,
Data Flow, pozwalajca zdefiniowa szczegy zadania przepywu danych, Event
Handlers, umoliwiajca definiowanie zada wykonywanych na skutek wystpienia
zdarze zwizanych z pakietem, oraz Package Explorer, ktra pozwala na przegldanie
struktury pakietu w postaci drzewa elementw skadowych.

Rozdzia 4. Integracja danych

59

Rysunek 4.4.
Widok pustego
projektu

Z lewej strony (domylnie zwinita) dostpna jest zakadka z narzdziami Toolbox,


ktra zawiera elementy skadowe pozwalajce na definiowanie pakietu. Jej zawarto
przedstawia rysunek 4.5. Narzdzia zostay podzielone na trzy grupy: Control Flows
Items, zawierajc elementy zwizane z migracj danych, Maintenance Plan Tasks,
udostpniajc narzdzia do administrowania i zarzdzania baz danych, oraz pust
grup General. W obu grupach powtarza si kontrolka Pointer, oznaczona symbolem
kursora, ktra jest stosowana podczas reorganizowania graficznej strony projektu oraz
czenia kontrolek skadowych. Oprcz zada Tasks wyrniono kontenery Containers, ktre charakteryzuj si tym, e do sensownego funkcjonowania musz mie
okrelone elementy wewntrzne definiujce waciwe zadanie przetwarzania. Obiekty
tego typu mog by zagniedone, czyli we wntrzu jednego kontenera mona zdefiniowa kolejny itd. Maksymalny poziom zagniedenia nie zosta okrelony. Zadania
s natomiast samodzielnymi bytami, ktre mog by wykonywane niezalenie. Wyjtek stanowi Data Flow Task, ktry do definiowania elementw skadowych wykorzystuje drug z zakadek projektu pakietu. Bez takiego zdefiniowania zadanie tego
typu nie bdzie poprawnie przetwarzane i w tym sensie jest podobne do kontenerw.

Prosta migracja danych


Budow pierwszego pakietu rozpocznijmy od zdefiniowania obiektu Data Flow. Nie
jest on na pewno najprostszym z moliwych, ale jest chyba najczciej wykorzystywanym
skadnikiem. Gdy wybierzemy z paska narzdziowego waciw kontrolk i umiecimy j na zakadce Control Flow, projekt pakietu bdzie mia posta przedstawion na
rysunku 4.6. Warto zwrci uwag na panel Properties, ktry pozwala na definiowanie waciwoci wszystkich elementw skadowych, zarwno nadrzdnych, jak i podrzdnych, oraz Connection Manager, gdzie bd si pojawia wszystkie zdefiniowane
poczenia do baz oraz plikw i skd mona edytowa waciwoci po ich utworzeniu.

60

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.5.
Zadania i kontenery
dostpne w pasku
narzdziowym
Toolbox do
definiowania
przepyww
Control Flow

Rysunek 4.6.
Dodanie przepywu
do definicji pakietu

Dwukrotne kliknicie kontrolki przepywu powoduje przeczenie widoku na zakadk Data Flow. Podobnie jak w poprzedniej zakadce, dostpny jest i tutaj pasek narzdziowy, ktry posiada odrbny zestaw obiektw, przedstawiony na rysunku 4.7.
Tym razem zestaw obiektw zosta podzielony na cztery grupy: Data Flow Sources,
zawierajc definicj rde danych, Data Flow Destinations, okrelajc docelowe
obiekty przepywu danych, Data Flow Transformations, pozwalajc na zdefiniowanie
przeksztace danych do nich wchodzcych i przekazanie ich do kolejnych obiektw,
oraz pust grup General. Podobnie jak poprzednio, dostpny jest wskanik Pointer,
ktry peni takie same funkcje.

Rozdzia 4. Integracja danych

61

Rysunek 4.7.
Obiekty dostpne
w pasku
narzdziowym
Toolbox
do definiowania
zada Data Flow

Aby przepyw mg dziaa poprawnie, obowizkowe jest zdefiniowanie przynajmniej


jednego rda i jednego obiektu docelowego. Wybrano rdo danych typu ADO.NET,
ktre za pomoc mostu Access Data Objects pozwala na zdefiniowanie dowolnego
typu bazy danych, dla ktrej okrelone zostay odpowiednie sterowniki. Na rysunku 4.8
przedstawiono pocztkow faz ustalania rda danych dla przepywu. Czerwony
symbol umieszczony po prawej stronie kontrolki symbolizuje bd. W pierwotnej
fazie wynika on z braku definicji elementw skadowych obiektu, co bdzie uzupenione w kolejnych krokach.
Pierwszym z nich jest ustanowienie acucha poczeniowego definiujcego rodzaj
rda danych. Na rysunku 4.9 pokazano okno dialogowe uzyskane przez dwukrotne
kliknicie w obszarze przedstawiajcym kontrolk rda danych ADO. W panelu po
lewej jego stronie widoczna jest lista prezentujca trzy kroki definiujce jej waciwoci:
Connection Manager, Columns oraz Error Output. Poniewa nie zdefiniowane zostao
dotd adne poczenie, wybieramy przycisk New, uruchamiajcy kreator obiektu tego
typu. Gdyby istniay ju wczeniej zdefiniowane poczenia, byoby moliwe wybranie ich z listy.
Na skutek wybrania kreatora nowego poczenia zostajemy przeniesieni do okna dialogowego przedstawionego na rysunku 4.10. W przypadku uprzedniego zdefiniowania pocze s one dostpne w panelu Data Connections, widocznym po lewej stronie formatki. Jeli zostanie wybrany ktrekolwiek z nich, aktywny stanie si przycisk
Delete, pozwalajcy na jego usunicie.

62

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.8.
Definicja przepywu
wybr rda
danych

Rysunek 4.9.
Kreator definiowania
waciwoci obiektu
rda danych ADO
definiowanie
poczenia

Jeli jednak wybierzemy przycisk New, pojawi si formularz pozwalajcy na precyzyjne zdefiniowanie poczenia (rysunek 4.11). Podstawow czynnoci jest wybr
sterownika definiujcego rdo i determinujcego dalsze parametry. W stanie domylnym podany jest dostawca z grupy .NET Providers, wskazujcy na rdo w postaci
serwera MS SQL SqlClient Data Provider. Peny zestaw sterownikw dostarczonych

Rozdzia 4. Integracja danych

63

Rysunek 4.10.
Wybr acucha
poczeniowego

Rysunek 4.11.
Definicja acucha
poczeniowego

wraz z Integration Services zawiera tabela 4.1. W przypadku wyboru innego rda
pola formatki mog si znacznie rni. W razie pozostawienia stanu domylnego konieczne jest wskazanie nazwy instancji serwera; dla instalacji z jedn instancj pokrywa
si ona z nazw komputera, na ktrym zostaa zainstalowana. Moliwe jest stosowanie nazwy logicznej oraz adresu IP. W przypadku czenia si z serwerem lokalnym
moliwe jest uycie nazwy (local) albo, co pokazuje przykad, symbolu . (kropka).
Konieczne jest ustalenie trybu autoryzacji: dziedziczona po systemie operacyjnym
Windows Authentication albo wewntrzna SQL serwera. W drugim przypadku konieczne jest podanie hasa. W tym stanie moliwe jest ju dokonanie sprawdzenia poprawnoci poczenia za pomoc przycisku Test Connection. Pozostaje jedynie wskazanie bazy danych, z ktrej bd pobierane dane.

64

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 4.1. Wbudowane sterowniki do poczenia ze rdami danych dostpne z poziomu SQL Server
Integration Services
Typ

Opis

ADO

Poczenie ze rdem danych ActiveX Data Objects (ADO).

ADO.NET

Poczenie ze rdem danych z zastosowaniem mostu .NET.

CACHE

Odczytanie danych ze zdefiniowanego przepywu lub z pliku podrcznego


cache (.caw), zapis moliwy tylko dla pliku cache.

EXCEL

Poczenie z plikiem Excela.

FILE

Poczenie z plikiem lub folderem.

FLATFILE

Poczenie z danymi zawartymi w pliku tekstowym.

FTP

Poczenie z serwerem FTP.

HTTP

Poczenie z serwerem Web.

MSMQ

Poczenie z kolejk komunikatw (message).

MSOLAP100

Poczenie z instancj SQL Server Analysis Services lub projektem


hurtowni danych.

MULTIFILE

Poczenie z wieloma plikami i folderami.

MULTIFLATFILE

Poczenie z wieloma plikami danych i folderami.

OLEDB

Poczenie ze rdem danych z zastosowaniem mostu OLE DB.

ODBC

Poczenie ze rdem danych z zastosowaniem mostu ODBC.

SMOServer

Poczenie z serwerem SQL Server Management Objects (SMO).

SMTP

Poczenie z serwerem poczty SMTP.

SQLMOBILE

Poczenie z baz danych w wersji SQL Server Compact.

WMI

Poczenie z serwerem ze wskazaniem zakresu dla Windows Management


Instrumentation (WMI) na nim pracujcego.

ORACLE

Poczenie z serwerem Oracle dostarczone przez MS.

SAPBI

Poczenie z serwerem aplikacji biznesowych SAP NetWeaver BI.

TERADATA

Poczenie z serwerem Teradata dostarczone przez MS.

Po wykonaniu konfiguracji poczenia wracamy do definiowania rda danych ADO.


Poza definicj poczenia konieczne jest wybranie typu rda, ktrym w stanie domylnym jest tabela lub perspektywa. Moliwe jest rwnie wybranie i zbudowanie
zapytania ad hoc. Jeli zdecydujemy si jednak na obiekt zapisany po stronie schematu relacyjnego, naley go wskaza na ostatniej z list okna dialogowego, jak pokazuje rysunek 4.12. Moliwe jest sprawdzenie zawartoci wybranego obiektu dziki
wybraniu przycisku Preview.
Kolejnym etapem jest definiowanie mapowania lub, jak kto woli, aliasowania kolumn. W grnym panelu (rysunek 4.13) pokazane s dostpne w obiekcie rdowym
kolumny, ich nazwy w oryginalnej postaci pojawiaj si w tabeli dolnego panelu,
w kolumnie External Column. Druga kolumna, Output Column, pozwala na przypisanie zamiast domylnych nazw odziedziczonych po obiekcie rdowym bardziej adekwatnych aliasw, pod ktrymi bd one wystpoway na wyjciu kontrolki.

Rozdzia 4. Integracja danych

65

Rysunek 4.12.
Pena definicja rda
danych ADO

Rysunek 4.13.
Definiowanie aliasw
dla wyjciowych
kolumn kontrolki

Ostatnim elementem definicji rda danych jest okrelenie sposobu zachowania si


kontrolki w przypadku pojawienia si bdw podczas pobierania danych. W oknie dialogowym pokazanym na rysunku 4.14 widoczne s wszystkie kolumny wybranej tabeli.
Dla kadej z nich moliwe jest oddzielne okrelenie sposobu zachowania w przypadku
wystpienia bdu odczytu (kolumna Error) oraz obcicia danych (kolumna Truncate).
W obu sytuacjach moliwe jest wybranie jednego z trzech wariantw: Fail component
stan domylny, powodujcy zakoczenie przetwarzania zadania okrelonego kontrolk

66

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.14.
Definiowanie sposobu
zachowania si
kontrolki w przypadku
pojawienia si
wyjtku

i wygenerowanie bdu, Ignore failure zignorowanie bdu i kontynuowanie przetwarzania, oraz Redirect row przekierowanie wiersza zawierajcego dane powodujce
t sytuacj do wskazanego pliku. Ostatnia kolumna pozwala na zdefiniowanie komentarza opisujcego bd; komentarz ten bdzie dostpny z poziomu obsugi zdarze. Pomimo e kade z pl tabeli moe by obsuone w inny sposb, w praktyce trudno sobie wyobrazi sytuacj uzasadniajc takie postpowanie. Dodatkowo mona
powiedzie, e domylne zachowanie wydaje si najbardziej uzasadnione, zwaszcza
w przypadku odczytywania zmiennych. Analogiczna obsuga sytuacji wyjtkowych wystpuje dla innych kontrolek definiujcych zarwno rda, jak i obiekty docelowe.
W tym drugim przypadku sposoby obsugi bdw inne ni domylny wydaj si mie
wiksze uzasadnienie.
Przedstawiony proces koczy definicj rda. W przykadowym, podstawowym projekcie przepywu zdefiniujemy teraz obiekt docelowy. Tym razem z panelu narzdziowego
Toolbox wybrany zosta obiekt typu OLE DB. Obiekty rdowy i docelowy naley
poczy, uywajc narzdzia Pointer. Wykorzystujemy wyjcie rysowane na zielono,
ktre reprezentuje sytuacj poprawnego przetworzenia pobierania danych. Pobieranie
nie odbywa si jednym cigiem, lecz jest dzielone na fragmenty. Procesem tym zarzdza silnik Integration Services. Pomimo rozbienoci w formalnym wyborze mostu oraz
tego, e mamy do czynienia z celem, a nie rdem, rnica w sposobie definiowania
jest niewielka (rysunek 4.15). Podstawowe parametry, jak Connection manager i Access
mode, s kopiami parametrw wystpujcych w podobnym oknie dialogowym dla
rda (rysunek 4.9).
Najwaniejsza rnica pojawia si podczas definiowania tabeli docelowej. Oczywicie jest moliwe wybranie ju istniejcego obiektu, jednak zazwyczaj chcemy, aby
bya wygenerowana nowa struktura na podstawie obiektu rdowego. Po wybraniu
przycisku New tworzone jest zapytanie SQL generujce now tabel jak pokazuje

Rozdzia 4. Integracja danych

67

Rysunek 4.15.
Definiowanie
podstawowych
parametrw dla
obiektu docelowego

rysunek 4.16. Domylnie nadawana jest jej nazwa Destination, ktra zostaa zmieniona na bardziej adekwatn, zgodn z nazw rdow Nagrody. Moliwe jest dokonanie innych zmian, w przykadzie dopisano ograniczenie klucza gwnego, ktre nie
wystpuje w oryginalnym zapytaniu. Cao skryptu moe by napisana od podstaw,
jednak takie postpowanie jest niecelowe. Lepiej byoby utworzy now tabel po
stronie relacyjnej, a w definicji pakietu wybra j z listy tabel. Natomiast dopisanie
innych ogranicze Constraints jest jak najbardziej uzasadnione.
Rysunek 4.16.
Wygenerowane
zapytanie tworzce
now tabel
zmieniono nazw oraz
dodano ograniczenie
klucza podstawowego

Jeli zdecydowalimy si na pozostawienie nazw pl wygenerowanych na podstawie


rda lub utworzony wczeniej obiekt docelowy mia nazwy zgodne ze rdem, kolejny
proces mapowania (rysunek 4.17) jest tylko formalnoci. Jeli midzy nazwami kolumn
rda i celu wystpuj rnice, konieczne jest rczne przeprowadzenie mapowania

68

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.17.
Definicja mapowania
kolumn tabeli
rdowej i docelowej,
gdy nazwy kolumn s
zgodne

metod przecignij i upu w grnym panelu lub przez wybr nazw na licie
obiektu docelowego Destination Column. Gdy chcemy dokona mapowania niezgodnego z nazwami, np. zamieni miejscami kolumny, to taka operacja jest rwnie dostpna w tym kroku. Moliwa jest te sytuacja, e cz pobranych ze rda kolumn
nie bdzie mapowana, a w efekcie zapisywana. Nawet gdy nie dokonujemy adnych
zmian, przejcie przez ten krok jest konieczne do poprawnego zdefiniowania obiektu
docelowego.
Ostatni krok to zdefiniowanie zachowania si kontrolki w sytuacji wystpienia bdu
podczas zapisywania pobranych danych w tabeli docelowej. Tym razem bdy dotycz caego komponentu, a w efekcie wszystkich kolumn zapisywanego rda danych.
Tak samo jak w przypadku rda dostpne s trzy opcje pokazane na rysunku 4.18:
Fail component stan domylny powodujcy zakoczenie przetwarzania zadania
i wygenerowanie bdu, Ignore failure zignorowanie bdu i kontynuowanie przetwarzania, oraz Redirect row przekierowanie wiersza zawierajcego dane powodujce
t sytuacj do wskazanego obiektu docelowego.
W takim stanie zadanie przepywu moe by ju wykonywane. Powrmy jednak do
wystpienia bdu pobierania danych. Dla potrzeb obsugi tego przypadku skonstruujmy w zadaniu drugi obiekt docelowy. Tym razem, aby nie powtarza dokadnie poprzednich czynnoci, niech bdzie on typu ADO.NET Destination (rysunek 4.19). We
waciwociach kontrolki rda dla wszystkich kolumn wybierzmy opcj Redirect
row. Grupowej zmiany waciwoci zaznaczonych kolumn moemy dokona za pomoc dolnej listy opcji. Na kontrolce pojawia si ta ikona ostrzegawcza informujca o jej niepenej konfiguracji.

Rozdzia 4. Integracja danych

69

Rysunek 4.18.
Definicja zachowania
si kontrolki
reprezentujcej cel,
gdy pojawi si bd

Rysunek 4.19.
Definicja
przekierowania
bdnych danych
z kontrolki
reprezentujcej rdo

Podobnie jak w przypadku zwykego obiektu docelowego, naley zdefiniowa poczenie z serwerem oraz wskaza konkretn baz danych tej instancji. Nastpnie trzeba
utworzy tabel docelow. Jeli korzystamy z generatora New (rysunek 4.20), tworzona
jest tabela o kolumnach zgodnych co do nazwy i typu z kolumnami rda, do ktrych
dodane zostay dwie dodatkowe o nazwach: ErrorCode, przeznaczona na numery
bdw zwizanych z odczytem, oraz ErrorColumn, wskazujca na numer kolumny,
w ktrej ten bd wystpi. Obie kolumny s cakowitoliczbowe. W porwnaniu
z oryginalnym skryptem zmieniona zostaa jedynie nazwa tabeli na bardziej przyjazn
dla uytkownika.

70

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.20.
Zastosowanie
generatora do
utworzenia nowej
tabeli przechowujcej
wiersze, w ktrych
pojawi si bd
podczas odczytu
ze rda

Kolejne kroki s prost analogi definiowania docelowej tabeli na poprawnie przeniesione dane. Stanowi je mapowanie kolumn oraz definiowanie zachowania si kontrolki
w przypadku pojawienia si bdu. Naley podkreli, e okno dialogowe opisujce
mapowanie musi by wywietlone, nawet jeli nie dokonujemy zmian w porwnaniu
z zaproponowanym przez kreator rozwizaniem. W mapowaniu bior udzia wszystkie kolumny, zarwno te, ktre pochodz bezporednio ze rda, jak i te, ktre zostay przeznaczone na opis bdw. W przypadku reakcji na bd trudno sobie wyobrazi dalsze przekierowanie informacji do kolejnej tabeli, poniewa rozpoczyna to
lawin przekierowa: bdy rda przekierowane do pierwszej tabeli bdw, bdy
przekierowane z niej do drugiej tabeli bdw itd. Takie postpowanie nie wydaje si
mie adnego realnego uzasadnienia, bo jaka przesanka miaaby decydowa, ktry ze
stopni miaby by ostatnim.
W tym momencie jestemy gotowi do przeprowadzenia testu zbudowanego pakietu.
Skutek dwukrotnego uruchomienia go z poziomu Integration Services jest przedstawiony na rysunku 4.21. Poniewa podczas pierwszego uruchomienia docelowa tabela
jest pusta, przetwarzanie koczy si sukcesem wszystkie kontrolki s w kolorze
zielonym. Drugie wykonanie powoduje podjcie prby dopisania wierszy do ju wypenionej tabeli. Poniewa s to te same wartoci, a w tabeli docelowej polu identyfikatora przypisano ograniczenie klucza podstawowego, prba powielenia jego wartoci
powoduje pojawienie si serii bdw czerwony kolor kontrolki docelowej. Jak wida
po liczbie transferowanych wierszy (opis przy liniach czcych kontrolki), w adnym
przypadku nie pojawi si bd odczytu ze rda. Naley zaznaczy, e w czasie
trwania przetwarzania biece kontrolki przybieraj kolor ty, czego nie pokazano
na ilustracjach pozostawiono to obserwacji Czytelnika.

Rozdzia 4. Integracja danych

71

Rysunek 4.21.
Pierwsze i drugie
wykonanie
zaprojektowanego
pakietu (powielenie
wartoci klucza
powoduje pojawienie
si bdw)

Aby zapobiec przerwaniu przetwarzania podczas zapisu do tabeli docelowej, podobnie jak w przypadku rda postanowiono przekierowa wiersze zawierajce bdy do
kolejnej tabeli. W tym celu zdefiniowano kolejny obiekt docelowy ADO.NET. Zosta
on doczony do wyjcia obsugi wyjtkw obiektu, do ktrego kopiujemy dane
(czerwone wyjcie). Sposb doczenia kolejnej kontrolki i definicje podstawowych
cech przedstawia rysunek 4.22.

Rysunek 4.22. Dodanie nowej tabeli przechowujcej wiersze, w ktrych pojawi si bd podczas
zapisu do tabeli docelowej

Kolejne kroki definicji tej kontrolki to, jak pokazano poprzednio, okrelenie sposobu
mapowania i przekierowania bdnych wierszy. W tabeli zawierajcej bdy przez
analogi dopisane s rwnie dwie kolumny zawierajce informacje o rodzaju bdu
oraz kolumnie, ktrej on dotyczy. Po wyczyszczeniu tabeli docelowej ponownie moemy przeprowadzi test pakietu (rysunek 4.23). Tym razem kolejno wykonywane po
sobie uruchomienia nie powoduj przerwania przetwarzania. Rnica w obu wykonaniach

72

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.23. Pierwsze i drugie wykonanie zaprojektowanego pakietu zawierajcego kontrolk


na bdy zapisu do tabeli docelowej

zasadza si na tym, e w przypadku drugiego wykonania pojawia si liczba okrelajca


ilo wierszy przekierowanych do kontrolki bdw dla tabeli docelowej. Poniewa powielenie wartoci klucza podstawowego pojawia si we wszystkich wierszach, liczby
opisujce transfer midzy rdem a celem oraz celem a tabel bdw s rwne. Fragment przykadowego zestawu rekordw zapisanych w tabeli bdw zawiera tabela 4.2.
Tabela 4.2. Tabela z informacj o bdnie zapisanych wierszach
IdNagrody

IdOsoby

Opis

ErrorCode

ErrorColumn

I Nagroda

-1071607683

II Nagroda

-1071607683

III Nagroda

-1071607683

Wyrnienie

-1071607683

Nagroda

-1071607683

...

...

...

...

...

Moemy uzna, e pierwszy podstawowy pakiet definiujcy przepyw danych mamy


ju gotowy do uycia. Do moliwoci dalszej rozbudowy czy te tworzenia przepyww o bardziej zoonej strukturze wrcimy w dalszej czci tego rozdziau.

Kontener FOR LOOP


Przejdmy teraz do klasy obiektw nazywanych kontenerami Containers. Odrnia je
od zada Tasks to, e aby byy w peni funkcjonalne, naley zdefiniowa ich wntrze,
czyli przynajmniej jedno zadanie. W przypadku Data flow rwnie trudno mwi, e jest
to klasyczne zadanie, poniewa analogicznie do kontenerw musimy zdefiniowa jego
elementy skadowe, tak jak przedstawiono poprzednio. W odrnieniu od Data flow zawarto kontenerw jest definiowana na zakadce Control Flow. Pomimo podobiestw

Rozdzia 4. Integracja danych

73

formalnych wyrniono trzy kontenery: For Loop, Foreach Loop oraz Sequence. Przykad rozpocznijmy od zastosowania kontenera definiujcego iterowan ptl For Loop
(rysunek 4.24). W jego wntrzu zostao umieszczone zadanie Script Task. Obie kontrolki s dostpne na pasku narzdziowym.
Rysunek 4.24.
Podstawowa definicja
pakietu zawierajcego
kontener For Loop

Poniewa kontener ten odgrywa rol iterowanej ptli, niezbdne jest zadeklarowanie
zmiennej, przy ktrej zastosowaniu bdzie mona kontrolowa jej wykonanie. Tworzenie
zmiennej dla wybranego zakresu, np. kontenera, jest moliwe albo z poziomu gwnego
menu, albo z menu podrcznego, uruchamianego lewym przyciskiem myszy z panelu
definiujcego graficznie pakiet. Obie metody pokazane zostay na rysunku 2.25.

Rysunek 4.25. Metody wywietlenia panelu do przegldania i definiowania zmiennych

Po wybraniu z jednej ze wskazanych w menu pozycji Variables mamy do dyspozycji panel, w ktrym moemy dodawa oraz przeglda wczeniej zdefiniowane zmienne
(rysunek 4.26). Pierwsza ikona na grze tego panelu pozwala na dodanie nowej zmiennej.
Druga, na rysunku nieaktywna, pozwala na usunicie zaznaczonej zmiennej. Dwie
kolejne okrelaj zasig, w ktrym przegldamy zmienne: niebieska wybrany

74

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.26.
Panel zmiennych dla
pakietu zawierajcego
kontener For Loop

obiekt, szara zmienne systemowe. W definicji podajemy nazw i typ zmiennej,


natomiast jej zasig wynika z aktualnego kontekstu, np. zaznaczonej kontrolki. Ta
pozycja nie moe by edytowana. W przykadzie wprowadzono zmienn o nazwie
licznik, ktra jest liczb cakowit reprezentowan na czterech bajtach.
Zadeklarowany przed chwil parametr posuy do zdefiniowania sposobu przetwarzania ptli. W oknie dialogowym pozwalajcym na okrelenie waciwoci kontenera, przedstawionym na rysunku 4.27, okrelono warto pocztkow zmiennej:
@licznik=1, wyraenie okrelajce zakoczenie ptli: @licznik<=5, oraz sposb jego
inkrementacji: @licznik=@licznik+1. Oznacza to, e licznik bdzie zainicjowany
wartoci 1, a nastpnie bdzie zwikszany o jeden, a do momentu, w ktrym przekroczy warto 5. Innymi sowy, ptla wykona si pi razy. Naley zwrci uwag,
e podczas definiowania waciwoci kontenera nazwa zmiennej jest poprzedzona
znakiem et (@), podobnie jak w rozszerzeniu proceduralnym Transact-SQL.
Rysunek 4.27.
Definicja
inkrementacji ptli
w kontenerze
For Loop

Poniewa kontrolka zadania Script (klasa VB.NET) jest zawarta w kontenerze For
Loop, a wszystkie zmienne zadeklarowane dla zakresu kontenera s widoczne w jego
wntrzu, moe rwnie uywa parametru licznik. W oknie dialogowym waciwoci
skryptu moemy doda zmienne dwch typw: ReadOnly i ReadWrite. W pierwszym

Rozdzia 4. Integracja danych

75

przypadku warto jest przekazywana tylko do kontrolki, natomiast w drugim moliwa


jest wymiana dwustronna. Zgodnie z tym, co pokazuje rysunek 2.28, w przykadzie
dodano zmienn licznik jako parametr ReadWrite. Zastosowane zostao pomocnicze
okno dialogowe Select Variables, ktre pozwala dokona wyboru zmiennych spord
zmiennych systemowych oraz wszystkich zdefiniowanych przez uytkownika, widocznych w danym zakresie. Jak pokazano na rysunku 2.28, mamy do czynienia z kolejn
postaci zapisu zmiennej User::licznik. Taka sama notacja bdzie stosowana we
wntrzu programu napisanego w Visual Basic .NET.

Rysunek 4.28. Definicja parametru typu ReadWrite dla skryptu przy wykorzystaniu okna dialogowego
Select Variable

W definicji pakietw, kontenerw oraz zada mog by wykorzystywane zmienne


systemowe, ktrych opisy zawieraj tabele 4.3, 4.4 i 4.5. Wprowadzono podzia zakresu
ich stosowania, przy czym zmienne zawarte w tabeli 4.3 mog by uywane w dowolnym zakresie.
Poza przedstawionym ju zestawem zmiennych systemowych specjalne miejsce zajmuj zmienne zwizane z obsug zdarze, ktre zawarto w tabeli 4.6. Poniewa nie
wszystkie s uniwersalne, przy kadej z nich zamieszczono wykaz zdarze obsugiwanych z ich zastosowaniem. Wszystkie oznacza, e zmienna moe by wykorzystywana dla kadego ze zdarze.

76

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 4.3. Zmienne systemowe dostpne dla pakietw


Zmienna systemowa

Opis

CancelEvent

Uchwyt do zdarzenia Windows, przez ktre zadanie moe


sygnalizowa zatrzymanie wykonywania.

CreationDate

Data utworzenia pakietu.

CreatorComputerName

Komputer, na ktrym pakiet zosta utworzony.

CreatorName

Nazwa uytkownika, ktry utworzy pakiet.

ExecutionInstanceGUID

Unikalny identyfikator wykonywanej instancji pakietu.

InteractiveMode

Wskazuje, w jaki sposb pakiet zosta uruchomiony:


True jeli z poziomu Integration Services,
False jeli za pomoc polecenia DTExec.

LocaleId

Identyfikator do lokalizacji uywanej przez pakiet.

MachineName

Nazwa komputera, na ktrym jest on uruchomiony (wykonywany).

OfflineMode

Wskazuje, czy pakiet jest w stanie offline niepoczony


ze rdem danych.

PackageID

Unikalny identyfikator pakietu.

PackageName

Nazwa pakietu.

StartTime

Data i czas uruchomienia pakietu.

UserName

Kwalifikowana (z uwzgldnieniem domeny) nazwa konta


uytkownika, ktry uruchomi pakiet.

VersionBuild

Numer wersji pakietu.

VersionComment

Komentarz opisujcy wersj pakietu

VersionGUID

Unikalny identyfikator wersji pakietu.

VersionMajor

Gwny numer wersji pakietu

VersionMinor

Podrzdny numer wersji pakietu.

Tabela 4.4. Zmienne systemowe dostpne dla kontenerw


Zmienna systemowa

Opis

LocaleId

Identyfikator miejsca uywany przez kontener.

Tabela 4.5. Zmienne systemowe dostpne dla kontenerw


Zmienna systemowa

Opis

CreationName

Nazwa zadania.

LocaleId

Identyfikator miejsca uywany przez zadanie.

TaskID

Unikalny identyfikator instancji zadania.

TaskName

Nazwa instancji zadania.

TaskTransactionOption

Opcje translacji na jzyki narodowe uywane przez zadanie.

Rozdzia 4. Integracja danych

77

Tabela 4.6. Zmienne systemowe dostpne podczas obsugi zdarze


Zmienna systemowa

Opis

Zdarzenie

Cancel

Wskazuje, czy obsuga zdarze przerywa


wykonywanie zadania, kiedy pojawi si
bd, ostrzeenie lub przerwano
przetwarzanie zapytania.

OnError OnWarning
OnQueryCancel

ErrorCode

Identyfikator bdu.

OnError
OnInformation
OnWarning

ErrorDescription

Opis bdu komunikat o bdzie.

OnError
OnInformation
OnWarning

ExecutionStatus

Status biecego przetwarzania.

OnExecStatusChanged

ExecutionValue

Warto zwracana przez zadanie.

OnTaskFailed

LocaleId

Identyfikator miejsca uywany


przez zadanie.

Wszystkie

PercentComplete

Procent wykonania zadania.

OnProgress

ProgressCountHigh

Grna cz z 64-bitowej wartoci


wskazujcej cakowit liczb operacji
przetworzonych przez zdarzenie OnProgress.

OnProgress

ProgressCountLow

Dolna cz z 64-bitowej wartoci


wskazujcej cakowit liczb operacji
przetworzonych przez zdarzenie OnProgress.

OnProgress

ProgressDescription

Opis stanu postpu przetwarzania.

OnProgress

Propagate

Wskazuje, czy zdarzenie bdzie propagowane


w celu jego obsugi do zdarzenia nadrzdnego.

Wszystkie

Warto tej waciwoci jest ignorowana


podczas walidacji pakietu. Jeeli waciwo
Propagate zostanie ustalona na False,
w zadaniu potomnym nie zapobiega to
w peni przed propagacj do poziomu
nadrzdnego. Aby w peni chroni si
przed tak propagacj, naley dla
wykonywanego pakietu ustawi waciwo
DisableEventHandlers na True.
SourceDescription

Opis przetwarzanego elementu, ktry


spowodowa wywoanie obsugi zdarzenia.

Wszystkie

SourceID

Unikalny identyfikator przetwarzanego


elementu, ktry spowodowa wywoanie
obsugi zdarzenia.

Wszystkie

SourceName

Nazwa przetwarzanego elementu, ktry


spowodowa wywoanie obsugi zdarzenia.

Wszystkie

VariableDescription

Opis zmiennej.

OnVariableValueChanged

VariableID

Unikalny identyfikator zmiennej.

OnVariableValueChanged

78

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Na rysunku 4.28 oprcz wykazu zmiennych systemowych widoczny jest przycisk Edit
Script, ktrego wybranie powoduje wygenerowanie szablonu klasy Visual Basic .NET.
Bdzie ona stanowi element wykonywalny kontrolki. W prezentowanym listingu 4.1
pozostawiono w caoci kod generowany przez kreator. Dopisany fragment zosta wytuszczony oraz poprzedzony komentarzem. Taka prezentacja ma na celu precyzyjne
wskazanie miejsca, w ktrym naley umieszcza waciwy kod. W prezentowanym
przypadku do lokalnej zmiennej znakowej przypisano warto zmiennej User::licznik.
Przechwycenie jej jest wykonywane przez zastosowanie funkcji Dts.Variables( ) oraz
metody Value, zwracajcej warto parametru. Zosta on jawnie przekonwertowany
do acucha dziki zastosowaniu metody ToString( ). W celu wywietlenia komunikatu zastosowano funkcj MsgBox, ktrej pierwszym parametrem jest zawarto wywietlanego komunikatu, drugi okrela wygld okienka, a trzeci jest tytuem okna
dialogowego.
Listing 4.1. Obsuga kontrolki majca na celu wywietlenie komunikatu o aktualnym numerze
wykonywanej ptli
' Microsoft SQL Server Integration Services Script Task
' Write scripts using Microsoft Visual Basic 2008.
' The ScriptMain is the entry point class of the script.
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
<System.AddIn.AddIn("ScriptMain", Version:="1.0", _
Publisher:="", Description:="")> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
' The execution engine calls this method when the task executes.
' To access the object model, use the Dts property. Connections, variables, events,
' and logging features are available as members of the Dts property as shown in the following examples.
'
' To reference a variable, call Dts.Variables("MyCaseSensitiveVariableName").Value
' To post a log entry, call Dts.Log("This is my log text", 999, Nothing)
' To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, True)
'
' To use the connections collection use something like the following:
' ConnectionManager cm = Dts.Connections.Add("OLEDB")
' cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;
Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;"
'
' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
'
' To open Help, press F1.
Public Sub Main()
'Tutaj jest dopisany kod
Dim napis As String
napis = Dts.Variables("User::licznik").Value.ToString

Rozdzia 4. Integracja danych

79

MsgBox("komunikat o nr " + napis, , "UWAGA")


Dts.TaskResult = ScriptResults.Success
End Sub

W pakiecie moe by zdefiniowanych wiele zmiennych o rnym zakresie widocznoci. W prezentowanym przykadzie (rysunek 4.29) do istniejcej ju zmiennej licznik
(dla kontenera) dodano zmienn zm o zakresie obejmujcym cay pakiet. Uzyskano to
dziki wywoaniu menu kontekstowego w stanie, w ktrym nie bya zaznaczona adna kontrolka.
Rysunek 4.29.
Pakiet ze
zdefiniowanymi
dwiema zmiennymi
o rnym zakresie
Pakiet i Kontener

Moliwe jest przekazanie do kontrolki wikszej liczby zmiennych uytkownika. W takim


przypadku ich lista jest separowana rednikiem. Mona je wpisa rcznie lub wybra
z okienka dialogowego, ktre uruchamiamy za pomoc ikony pokazanej po prawej
stronie listy zmiennych (rysunek 4.30). Takie samo postpowanie, jak pokazano dla
zmiennych typu ReadWrite, moliwe jest rwnie w odniesieniu do zmiennych tylko
do odczytu.
Rysunek 4.30.
Definicja listy
parametrw typu
ReadWrite dla skryptu
przy wykorzystaniu
okna dialogowego
Select Variable

Po przejciu do kodu VB (za pomoc przycisku Edit Script) zmodyfikowano kod do postaci pokazanej na listingu 4.2. Najwaniejszym wnioskiem pyncym z analizy kodu
jest to, e zmienne typu ReadWrite mog by we wntrzu kodu modyfikowane. Wyraenia mog rwnie odwoywa si do innych zmiennych przekazanych do pakietu.

80

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Listing 4.2. Modyfikacja obsugi kontrolki majcej na celu wywietlenie komunikatu


Public Sub Main()
Dim napis As String
Dts.Variables("User::zm").Value = 2 * Dts.Variables("User::licznik").Value
napis = Dts.Variables("User::zm").Value.ToString
MsgBox("komunikat o nr " + napis, , "UWAGA")
Dts.TaskResult = ScriptResults.Success
End Sub

Wywietlanie komunikatw za porednictwem kontrolki definiujcej ptle jest przykadem bardzo akademickim. Sprbujmy zrealizowa nieco bardziej uyteczn funkcjonalno. W tym celu we wntrzu zdefiniowane zostay dwa zadania przetwarzania
procesu (rysunek 4.31). Zadania te nie s ze sob powizane, czyli skutek wykonania
jednego z nich nie ma wpywu na drugie. Natomiast mog by midzy nimi przekazywane zmienne o zakresie kontenera lub pakietu, poniewa z punktu widzenia obu
zada s one globalne. Pomimo e oba zadania s rwnolege i tak jedno z nich bdzie przetwarzane jako pierwsze to, ktre byo utworzone pierwsze. Zmienna sterujca ptl ma nazw zm i jest inkrementowana od 1 do 2, aby nie powiksza czasu
dziaania przykadu. Oprcz tej zmiennej zdefiniowano zmienn znakow o nazwie
tekst i okrelono jej warto pocztkow 'tekst'.
Rysunek 4.31.
Definicja kontenera
For Loop z dwoma
zadaniami
przetwarzania
procesu

We waciwociach pierwszego z zada ustanowiono jako element wykonywalny


przegldark internetow iexplorer.exe (rysunek 4.32). Konieczne jest wskazanie penej cieki do pliku programu. Do programu jako zmienn wejciow przekazano
zmienn uytkownika tekst.
Obie zdefiniowane w pakiecie zmienne zostay wykorzystane do zbudowania wyraenia okrelajcego waciwo Arguments. Okrela ona warto przekazywan do
przegldarki acuch definiujcy adres otwieranej strony. Wyraenie jest konkatenacj zmiennej tekst oraz przekonwertowanej do acucha zmiennej numerycznej zm.
Konwersja wykonana jest dziki zastosowaniu rzutowania (okrelanego niezbyt precyzyjnie jako funkcja konwertujca) za pomoc wskazania typu docelowego (DT_WSTR, 2).
Trzy ostatnie znaki nazwy STR wskazuj na typ docelowy (string acuch), natomiast

Rozdzia 4. Integracja danych

81

Rysunek 4.32.
Definicja waciwoci
dla zadania
przetwarzania
procesu

drugi parametr okrela jego dugo. Wedug analogicznych zasad moemy rzutowa
zmienne na inne typy. W prezentowanym przykadzie do zbudowania wyraenia skorzystano z konstruktora. Poza pokazan waciwoci Arguments wszystkie waciwoci tej kontrolki mog by definiowane w tym miejscu. Jeeli teraz przyjrzymy si
polu Arguments na rysunku 4.33, to zauwaymy, e warto tekst0 jest wynikiem
przyjcia przed uruchomieniem pakietu domylnych wartoci obu zmiennych.
Rysunek 4.33.
Definicja wyrae
okrelajcych
waciwoci zada
przetwarzania
procesu

Podobna definicja zostaa wykonana dla drugiej kontrolki procesu (rysunek 4.34).
Tym razem uruchamian aplikacj jest okienko polece systemu operacyjnego cmd.
Globalna wzgldem pakietu zmienna zm dodana do parametru /t definiuje kolorystyk. Pierwsza z pary wartoci heksadecymalnych okrela kolor czcionki, a druga kolor
ta zgodnie z informacj zawart w tabeli 4.7. W tym wypadku wyraenie opisujce
Arguments ma posta /t:+(DTW_STR, 1)(@[User::zm])+ F.
Rysunek 4.34.
Definicja waciwoci
zadania
przetwarzania
procesu

82

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 4.7. Kody kolorw okna polece systemowych


Kod

Kolor

Kod

Kolor

Czarny

Szary

Niebieski

Jasnoniebieski

Zielony

Jasnozielony

Morski

Jasnomorski

Czerwony

Jasnoczerwony

Purpurowy

Jasnopurpurowy

ty

Jasnoty

Biay

nienobiay

W dalszym cigu przykad jest akademicki, ale Czytelnik atwo moe wymyli zastosowanie automatycznego uruchamiania przegldarki. Jeli jednak pojawi si problemy, odsyam do rozdziaw powiconych tworzeniu akcji w strukturach wielowymiarowych oraz podczas raportowania. Jeli chodzi o wykorzystanie okienka polece
systemowych, to liczba zastosowa zwizanych z operacjami na plikach i folderach
jest bardzo dua. Polecenia te wykonywane s po parametrze /k, np. cmd /k dir. Dodatkowo naley zauway, e z linii polece moliwe jest uruchomienie wielu programw,
np. sqlcmd, ktry pozwala na obsug MS SQL Server wykonywanie zapyta lub
skryptw. Pen skadni tego polecenia pokazuje kolejny kod, ktrego parametry
opisane s metajzykiem.
Sqlcmd [-U uytkownik] [-P haso]
[-S serwer] [-H komputer lub IP] [-E uyj zaufanego poczenia]
[-d baza danych] [-l opnienie logowania] [-t opnienie zapytania]
[-h nagwek] [-s separator dla konkatenacji] [-w szeroko okna]
[-a wielko pakietu] [-e warto wejciowa ] [-I Enable Quoted Identifiers]
[-c zakocz cmd] [-L[c] lista serwerw[czyszczenie wyjcia]]
[-q "zapytanie lub skrypt SQL"] [-Q " zapytanie lub skrypt SQL " i wyjcie]
[-m poziom bdw] [-V poziom niebezpieczestwa bdu] [-W pomi kocowe spacje]
[-u wyjcie unicode] [-r[0|1] komunikaty dla stderr]
[-i zbir wejciowy] [-o zbir wyjciowy] [-z nowe haso]
[-f | i:[,o:]] [-Z nowe haso i wyjcie]
[-k[1|2] usu [zamie] znaki sterujce]
[-y zmienna ilo znakw na szeroko]
[-Y ustalona ilo znakw na szeroko]
[-p[1] wywietl statystyki [, format]]
[-R zastosuj regionalne ustawienia klienta]
[-b przy bdzie zakocz przetwarzanie]
[-v zmienna = "warto"...] [-A uyj dedykowanego poczenia administratora]
[-X[1] zablokowane polecenia, skrypt startowy, zmienne rodowiskowe [i wyjcie]]
[-x podstaw za zablokowane zmienne]
[-? wywietla pokazan informacj]

Przykadem rzeczywistego zastosowania moe by wykonanie procedury sp_who, ktra


zwraca informacj o aktywnych uytkownikach poczonych z serwerem. Do wskazania
serwera uyto nazwy logicznej . (kropka), wskazujcej domyln instancj na komputerze
lokalnym. Autoryzacja jest realizowana przez poczenie zaufane, co daje dostp do bazy
administratorom systemu operacyjnego bez koniecznoci podawania w skrypcie hasa.
cmd /k sqlcmd -S . -E -q sp_who

Rozdzia 4. Integracja danych

83

Kolejny przykad powoduje wykonanie w bazie test zapytania wybierajcego wszystkie rekordy z tabeli Dzialy.
cmd /k sqlcmd -S . -E -q "USE test SELECT * FROM Dzialy GO"

Modyfikacja polecenia przez dodanie opcji /t: powoduje wywietlenie tej samej informacji czarn czcionk w oknie o biaym kolorze ta.
cmd /t:F0 /k sqlcmd -S . -E -q "USE test SELECT * FROM dzialy GO"

Z praktycznego punktu widzenia przydatne moe by wykonanie skryptu zawartego


w zbiorze i przekazanie wynikw do zbioru tekstowego z automatycznym zamkniciem okna polece po zakoczeniu przetwarzania skryptu.
cmd /k sqlcmd -S . E -i zapytanie.sql -o wynik.dat -c

Powrmy do budowania kolejnych przykadowych pakietw. Jednak przed tym przygotujmy pliki Excela zawierajce dane. Moemy tego dokona, korzystajc z wbudowanego narzdzia Import i uywajc jako rda danych zapytania wybierajcego
o postaci:
SELECT NazwaTowaru, NazwaProducenta, CenaZakupu FROM Towar JOIN Producenci ON
Towar.IdProducenta=Producenci.IdProducenta WHERE Producenci.IdProducenta=1

Jeeli powtrzymy t czynno dla kilku skoroszytw i plikw, otrzymamy testowy


zestaw danych, ktre bd wykorzystywane w nastpnym przykadzie. Pliki te powinny by umieszczone w tym samym folderze.

Kontener FOREACH LOOP


Kolejnym kontenerem jest Foreach Loop, pozwalajcy przeszukiwa wszystkie elementy zdefiniowanej kolekcji obiektw. Jako elementy kontenera zdefiniowano dwa
poczone ze sob zadania Script i Data Flow (rysunek 4.35).
Rysunek 4.35.
Definicja kontenera
Foreach Loop i jego
elementw
skadowych

Dla tak zdefiniowanego kontenera okrelmy zmienn znakow nazwaP oraz nadajmy
jej warto pocztkow, ktra jest kwalifikowan nazw jednego z wczeniej utworzonych plikw Excela (rysunek 4.36). Brak wartoci domylnej spowoduje pojawienie si bdu przetwarzania.

84

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.36.
Definicja zmiennej
dla kontenera
Foreach Loop

Poniewa chcemy przeglda pliki okrelonego rodzaju, jako typ obiektu definiujcego
ptle wybieramy File Enumerator (rysunek 4.37). Konieczne jest rwnie zdefiniowanie
cieki, w ktrej znajduj si przetwarzane pliki, oraz wskazanie typu pliku przez podanie
rozszerzenia. W naszym przypadku *.xls wskazuje oczywicie na pliki Excela.
Rysunek 4.37.
Definicja typu
przegldanych
elementw
dla kontenera
Foreach Loop

Jak atwo zauway, istnieje wiele moliwoci wyboru typw elementw dla tego kontenera: pliki, rda danych ADO, pliki XML i inne. Peny ich wykaz wraz z opisem i zastosowaniem przedstawia tabela 4.8.
Ostatnim elementem definicji kontenera jest przypisanie do niego zdefiniowanej
zmiennej nazwaP (rysunek 4.38). Bdzie ona przechowywa waciwoci kolejnych
elementw kolekcji, w naszym przypadku nazwy zbiorw Excela. Bdzie rwnie
wykorzystywana przez zadania zdefiniowane w kontenerze.
Jako element kontrolny pakietu zdefiniowano zadanie przetwarzania skryptu, do ktrego przekazana zostaa zmienna numeratora kolekcji z kontenera (rysunek 4.39). Zastosowano przypisanie do parametrw typu ReadWrite, ale wystarczajce byoby
przypisanie do parametrw ReadOnly.

Rozdzia 4. Integracja danych

85

Tabela 4.8. Kody typw obiektw dla kontenera Foreach Loop


Enumerator

Opis

Foreach ADO

Wskazuje rdowe obiekty ADO, np. umoliwia przegldanie


wszystkich kolumn w tabeli.

Foreach ADO.NET
Schema Rowset

Wskazuje poczenia do bazy danych i schematu, np. pozwala


przeglda wszystkie tabele w schemacie.

Foreach File

Wskazuje folder i pliki okrelonego typu, moliwe jest wskazanie


zawartych w nim podfolderw.

Foreach From Variable

Wskazuje zmienn zawierajc dane do przegldania, np. umoliwia


obsug zmiennej tabelarycznej ADO.NET DataTable lub numeratora
Integration Services.

Foreach Item

Wskazuje elementy kolekcji, ktrymi mog by kolumny oraz typy


danych kolumn, np. mona przeglda nazwy programw dla zadania
Execute Process.

Foreach Nodelist

Wskazuje na rda w postaci plikw XML i konfiguruje operacje Xpath,


np. mona przeglda wskazany w pliku znacznik i jego zawarto.

Foreach SMO

Wskazuje poczenie do bazy danych i obiekty Server Management


Objects (SMO), np. mona przeglda perspektywy zdefiniowane
w bazie danych.

Rysunek 4.38.
Definicja typu
mapowania
zmiennych
dla kontenera
Foreach Loop

Rysunek 4.39.
Definicja przypisania
zmiennej kontenera
do parametru zadania
przetwarzania skryptu

86

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Kliknicie przycisku Edit Script powoduje przeniesienie do edytora Visual Basic z wygenerowanym szablonem klasy. W analizowanym przypadku pokazany zosta tylko fragment kodu, ograniczony do gwnej procedury Main( ) wygenerowanej klasy listing 4.3. Podobnie jak w poprzednio realizowanych zadaniach, zastosowano okno
komunikatw do wywietlania kolejno przegldanych we wskazanym folderze plikw.
Listing 4.3. Modyfikacja obsugi kontrolki majcej na celu wywietlenie komunikatu z nazw pliku
Public Sub Main()
MsgBox("Plik " + Dts.Variables("User::nazwaP").Value, , "UWAGA")
Dts.TaskResult = ScriptResults.Success
End Sub

Tak skonstruowany pakiet formalnie moe ju by wykonywany i testowany. Z punktu


widzenia praktycznej funkcjonalnoci konieczne jest zdefiniowanie drugiego elementu
kontenera, czyli zadania Data Flow. Bdzie si ono skadao z obiektu rdowego
w postaci pliku Excela oraz obiektu docelowego, ktrym bdzie tabela SQL Server
(rysunek 4.40).
Rysunek 4.40.
Definicja zadania
Data Flow dla
kontenera
Foreach Loop

W definicji rda danych typu plik Excela w OLEDB connection manager tworzymy
nowe poczenie (rysunek 4.41). Pomimo e nazwa obiektu bdzie zmieniana zgodnie
z zawartoci parametru kontenera, i tak gwnym, obowizkowym elementem definicji jest wskazanie pliku. Moe to by dowolny z plikw znajdujcych si w przetwarzanym folderze. Kolejny wybr to ustalenie sposobu dostpu, ktry moe mie
warto: Table or view tabela lub perspektywa, Table name or name view variable
zmienna okrelajca nazw tabeli lub perspektywy, SQL command polecenie SQL,
lub SQL command from variable zapytanie SQL zawarte w zmiennej znakowej.
W przypadku pierwszej pozycji na licie moemy dokona przegldu skoroszytw
pliku, wybierajc jeden z nich, jak pokazuje rysunek 4.42. W przykadzie wybrano
pozycj Query, ktra odpowiada pierwszemu skoroszytowi.
Jak w przypadku wikszoci rde, dostpna jest opcja PREVIEW pozwalajca na
przejrzenie zawartoci pliku. Na rysunku 4.43 przedstawiono przykadowy zestaw rekordw dla skoroszytu o nazwie Query.

Rozdzia 4. Integracja danych

87

Rysunek 4.41.
Definicja rda
danych typu
plik Excela

Rysunek 4.42.
Wykaz skoroszytw
dla rda danych
typu plik Excela

Rysunek 4.43.
Podgld danych
skoroszytu pliku
Excela

Kolejne kroki, tak jak w przypadku innych rde, pozwalaj na okrelenie nazw kolumn
i ich ewentualnych aliasw oraz na ustalenie sposobu reakcji na pojawienie si bdw
podczas odczytu (rysunki 4.13, 4.14). Zachowujc stan domylny, decydujemy si na
pozostawienie niezmienionych nazw oraz przerwanie przetwarzania w przypadku wystpienia dowolnego bdu. Jelibymy chcieli zmodyfikowa poczenie ju po zdefiniowaniu rda danych, jest to moliwe z wykorzystaniem ikony umieszczonej w panelu
Connection Manager, ktry znajduje si poniej definicji zadania (rysunek 4.44).
Uywajc panelu Properties dla tego samego obiektu, jestemy w stanie modyfikowa jego waciwoci. Moliwe jest przypisanie nie tylko statycznych wartoci, ale
rwnie zmiennych uytkownika. W przykadzie do parametrw ExcelFilePath oraz
ServerName przypisano t sam zmienn @[User::nazwaP] (rysunek 4.45).

88

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.44.
Edycja poczenia
z plikiem Excela

Rysunek 4.45.
Edycja waciwoci
poczenia z plikiem
Excela przypisanie
zmiennych

Nastpnie dokonano wyboru obiektu docelowego, tym razem decydujc si na typ


SQL Server Destination. Jest to trzeci rodzaj poczenia z serwerem Microsoft. W zasadniczej czci definicji poczenia (rysunek 4.46) oraz mapowania kolumn dziaanie nie rni si od do tej pory przedstawianych.
Rysunek 4.46.
Definicja obiektu
docelowego dla
danych typu SQL
Server Destination

Jedynym odmiennym elementem definicji s dane zawarte na zakadce Advanced (rysunek 4.47). Opcje te dotycz pozostawienia kolumn automatycznie inkrementowanych Identity oraz wartoci Null, a take uruchomienia procedur wyzwalanych podczas
kopiowania. Wszystkie te opcje s wyczone. Wczono natomiast blokad tabeli

Rozdzia 4. Integracja danych

89

Rysunek 4.47.
Definicja
zaawansowanych
waciwoci obiektu
typu SQL Server
Destination

i sprawdzanie ogranicze CHECK. Ponadto moliwe jest podanie identyfikatorw definiujcych zakres wierszy, ktre maj by zapisane, maksymaln liczb bdw, po
ktrej przekroczeniu proces zostanie bezwarunkowo przerwany, oraz czas opnienia
rozpoczcia zapisu. Moliwe jest rwnie, wzorem klauzuli ORDER, wypisanie listy
pl, wzgldem ktrych rekordy bd porzdkowane.
Zbudowany pakiet jest w peni funkcjonalny, jednak pozwala na odczytanie tylko jednego, pierwszego (domylnego) skoroszytu z pliku Excela. Bardzo czsto jest tak, e
wicej skoroszytw zawiera interesujce nas dane. Sprbujmy rozszerzy w ten sposb
dziaanie pakietu, aby odczytywane byy wszystkie skoroszyty kadego z plikw Excela,
zawarte we wskazanym folderze. W tym celu do wntrza poprzednio opracowanego
kontenera wprowadmy w miejsce zadania definiujcego przepyw (Flow Task) kolejny kontener typu Foreach Loop (rysunek 4.48). Definicja nadrzdnego skryptu pozostanie bez zmian. Przykad ten ma rwnie pokazywa, e istnieje moliwo zagniedania kontenerw. Jest to moliwe take wtedy, kiedy kontenery s rnych
typw, ale takie postpowanie wydaje si najbardziej naturalne dla Foreach Loop.
W definicji pakietu dodano kolejn zmienn znakow o nazwie nazwaZ, ktrej zostaa przypisana warto domylna xxx (rysunek 4.49). Odpowiada to nazwie jednego
ze skoroszytw pliku wskazanego wartoci domyln zmiennej nazwaP. Oglniejsze
byoby uycie wartoci Query logicznej nazwy skoroszytu domylnego.
Dla drugiego zagniedonego kontenera wybrano takie samo poczenie jak dla
pierwszego, zewntrznego (rysunek 4.50). Jako numerator wybrano ADO.NET Schema Rowset Enumerator (tabela 4.8). Natomiast w opcji Schema pozostawiono wybr
domylny Tables, co oznacza przegldanie: dla bazy danych tabel, a w przypadku
pliku Excela skoroszytw.

90

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.48.
Zmodyfikowany pakiet
z zagniedonymi
kontenerami Foreach
Loop

Rysunek 4.49.
Definicja zmiennych
dla pakietu
z zagniedonymi
kontenerami
Foreach Loop

Rysunek 4.50.
Definicja typu
przegldanej kolekcji
dla zagniedonego
kontenera Forach
Loop

W przypadku tego typu kolekcji dostpna jest bardzo szeroka lista potencjalnych rodzajw
elementw (rysunek 4.51). Analizujc nazwy, moemy powiedzie, e w przypadku bazy
danych moliwe jest zdefiniowanie jako zestawu do przegldania praktycznie wszystkich
dostpnych typw obiektw, ktre mogy zosta utworzone po stronie relacyjnej.
Dodatkowym elementem, ktry moe zosta okrelony, s ograniczenia dla schematu.
Zestaw ogranicze jest charakterystyczny dla wybranego typu (schematu). Dla wyboru wskazanego na rysunku 4.50 lista ogranicze prezentowana jest na rysunku 4.52
i zawiera nazwy: katalogu, schematu, tabeli oraz jej typu. Ograniczenia mog by zaznaczone statycznie, przekazane zmienn, a take by zawarte w tekcie.

Rozdzia 4. Integracja danych

91

Rysunek 4.51.
Definicja typu kolekcji
dla numeratora typu
ADO.NET Schema
Rowset

Rysunek 4.52.
Definicja ogranicze
dla zagniedonego
kontenera
Foreach Loop

Naley jeszcze dokona mapowania do zmiennej, ktr bdzie tym razem nazwaZ
por. rysunek 4.38. Przy takiej definicji przegldane bd wszystkie skoroszyty pliku,
a do zmiennej podstawiana bdzie cyklicznie nazwa kadego z nich. Zastosujmy t
zmienn jako definicj parametru ReadWrite dla zadania typu Script. Sposb realizacji przypisania pokazuje rysunek 4.53
Pozostaje teraz tylko zastosowanie zmiennej w skrypcie. Na wzr poprzednio definiowanego zadania zastosowano strategi wywietlania nazw w oknie dialogowym MessageBox. Listing 4.4 zawiera fragment kodu w procedurze Main. Jest to jedyne miejsce,
w ktrym uzupeniono kod wygenerowany przez kreator.
Jeli nie wykonano tego dotychczas, moemy po drugim zadaniu Script doda proces
przepywu, taki jak zaproponowano poprzednio (rysunek 4.40). Jeli zdecydujemy si
na utworzenie nowego poczenia, postpowanie bdzie wygldao jak na rysunku 4.45.
Jeli zechcemy uy istniejcego poczenia, moemy skorzysta z panelu Connection
Managers (rysunek 4.54), ustalajc waciwe wartoci waciwoci (dwukrotne kliknicie ikony poczenia). Zmianie podlegaj elementy grupy Expressions.

92

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.53.
Definicja przypisania
zmiennej do
parametru zadania
przetwarzania skryptu

Listing 4.4. Modyfikacja obsugi kontrolki majcej na celu wywietlenie komunikatu z nazw skoroszytu
Public Sub Main()
Dim napis As String
napis = Dts.Variables("User::nazwaZ").Value
MsgBox("Zakadka " + napis, , "WorkSheet")
Dts.TaskResult = ScriptResults.Success
End Sub

Rysunek 4.54. Edycja waciwoci istniejcego poczenia z plikiem Excela

Zgodnie z rysunkiem 4.55 naley wybra kolejno wszystkie waciwoci, ktre bd


przekazywane przez zmienne, oraz ustawi ich waciwoci na odpowiednie wartoci.
Nazwy zmiennych mog by wpisane rcznie, ale moliwe jest wykorzystanie edytora
wyrae, jak pokazano na rysunku 4.56. Edytor ten ma szczeglnie istotne znaczenie, kiedy zamiast podpisania zmiennych stosujemy naprawd zoone wyraenia. Widoczne
z tego poziomu podpowiedzi dotyczce dostpnych funkcji, ich skadni oraz moliwych
do wyboru zmiennych s bardzo uyteczne. Dodatkowo kliknicie przycisku Evaluate
Expression pozwala na sprawdzenie formalnej poprawnoci budowanych zalenoci.

Rozdzia 4. Integracja danych

93

Rysunek 4.55.
Dodawanie
i ustawianie wartoci
waciwoci
dla istniejcego
poczenia z plikiem
Excela

Rysunek 4.56.
Zastosowanie edytora
wyrae do ustawiania
wartoci waciwoci

Realizowany przykad ilustruje przypisanie zawartoci wszystkich skoroszytw wystpujcych w kadym pliku Excela w wybranym folderze; sposb przypisania zmiennych pokazano na rysunku 4.57.
Rysunek 4.57.
Sposb przypisania
zmiennych do
waciwoci dla
zadania kopiowania
caej zawartoci
plikw Excela

94

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tak utworzony pakiet realizuje praktyczn funkcjonalno i moe by ju testowany.


Pomimo to warto rozway kilka do istotnych uzupenie. Pierwszym jest uzupenienie przepywu o przekierowanie bdnych wierszy do odpowiednich tabel lub plikw, tak jak zostao to przeprowadzone dla pierwszego z tworzonych pakietw. Drugim elementem jest czyszczenie tabel docelowych przed rozpoczciem procesu
zasilania danymi.

Sprawdzanie zgodnoci danych


ze sownikiem
Rozwamy do powszechnie spotykan sytuacj, kiedy dane w tabelach relacyjnych
zawieraj bdne wpisy. Moe to by spowodowane np. niezastosowaniem tabel sownikowych i zdaniem si na operatora, ktry rcznie wpisuje informacj. Zilustrujmy to
na przykadzie danych okrelajcych miejsce zamieszkania klientw, a konkretnie nazwy miasta i wojewdztwa. W nazwach tych czsto mog si pojawia bdne wpisy,
ktre dla potrzeb prowadzenia analiz powinny zosta poprawione. Oczywicie rczna
edycja w przypadku bardzo rozlegych wolumenw danych nie wchodzi w rachub.
Aby zrealizowa zakadan funkcjonalno, utwrzmy pakiet skadajcy si z trzech
szeregowo uoonych zada: wykonania skryptu Execute SQL oraz dwch zada przepywu danych Data Flow (rysunek 4.58).
Rysunek 4.58.
Definicja pakietu
do automatycznego
poprawiania
bdnych wpisw

Pierwszym krokiem jest zdefiniowanie zadania wykonujcego skrypt SQL (rysunek 4.59).
Tak jak w przypadku wielu innych kontrolek, potrzebne jest ustalenie poczenia z baz
danych, w ktrej bdzie on wykonywany. Kolejny krok to okrelenie typu rda danych, ktry moe przyj wartoci: Direct input skrypt definiowany bezporednio
(stan domylny), File connection skrypt zawarty jest w zewntrznym pliku, Variable
kod jest zawarty w zmiennej. Jeli zdecydowano si na pierwsze ze rde, naley
wpisa jako warto waciwoci SQLstatement odpowiedni kod.

Rozdzia 4. Integracja danych

95

Rysunek 4.59.
Definicja
podstawowych
waciwoci zadania
Execute SQL

Wpisywanie kodu bezporednio w polu definiujcym waciwo moe by ze wzgldu


na jego wielko kopotliwe. Dlatego warto skorzysta z okna dialogowego oferujcego czytelniejszy zapis (rysunek 4.60). W rozwaanym przykadzie zastosowano
skrypt skadajcy si z dwch polece TRUNCATE TABLE czyszczcych zawarto
dwch tabel pomocniczej KlienciPoprawione oraz docelowej KlienciOstateczne.
Wybr polecenia TRUNCATE TABLE zamiast DELETE FROM jest podyktowany
wzgldami zwizanymi z wydajnoci. Drugie z polece rzeczywicie czyci tabel,
usuwajc z niej kolejne wiersze, natomiast pierwsze dziaa w ten sposb, e usuwa
wskanik do pierwszego rekordu tej tabeli. Jak atwo sobie wyobrazi, takie dziaanie
bdzie duo szybsze, co jest szczeglnie istotne, zwaszcza w stosunku do bardzo duych
tabel. Polecenie TRUNCATE nie zwalnia przestrzeni przyznanej tabeli, co w przypadku wykonywania tej operacji na wielu obiektach moe uzasadnia konieczno kompaktacji bazy danych Shrink po zakoczeniu zadania lub ich grupy.
Drugim komponentem pakietu jest przepyw Data Flow, ktry skada si z trzech
elementw (rysunek 4.61). Pierwszym z nich jest rdo danych ADO .NET odwoujce si do tabeli schematu relacyjnego MS SQL Server. Centralnym elementem jest
kontrolka rozmytego przeszukiwania Fuzzy Lookup, ktrej zadaniem jest zaproponowanie ujednoliconych nazw wojewdztw. Obiektem docelowym jest tabela schematu
relacyjnego.
Poniewa definiowanie rda danych byo ju dokadnie przedstawiane, ograniczono
si do pokazania kolumn rdowej tabeli (rysunek 4.62). Powstaa ona na skutek
przepisania, zmaterializowania perspektywy, czcej tabele Klienci, Miasta i Wojewdztwa do postaci fizycznej. Aby pokaza dziaanie kontrolki Fuzzy Lookup, nazwy
czci miast i wojewdztw zostay znieksztacone, np. przez zastpienie polskich
znakw diakrytycznych wyjciowymi znakami aciskimi.

96

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.60.
Definicja skryptu dla
zadania Execute SQL

Rysunek 4.61.
Definiowanie
elementw
skadowych przepywu
z zastosowaniem
kontrolki Fuzzy
Lookup

Kolejny element to definicja centralnej kontrolki Fuzzy Lookup. Wymaga ona podania
acucha poczeniowego do serwera, na ktrym znajduje si wzorcowy sownik
nazw. Skorzystano z istniejcego poczenia z t sam baz na serwerze MS SQL. Jako sownik posuya wyjciowa tabela schematu Wojewodztwa (rysunek 4.63). Moliwe jest jeszcze zdefiniowanie sposobu tworzenia i przechowywania indeksw.
Kolejna zakadka w oknie dialogowym ustalania waciwoci kontrolki zawiera definicj okrelajc, ktre kolumny tabeli rdowej i sownika maj by porwnywane
algorytmem rozmytym (rysunek 4.64). W przykadzie zdecydowano si, e porwnywane bd kolumny zawierajce nazwy wojewdztw. Natomiast przetwarzane bd
wszystkie kolumny tabeli rdowej, co oznacza, e bd one przekazane na wyjcie.

Rozdzia 4. Integracja danych


Rysunek 4.62.
Definiowanie kolumn
tabeli rdowej
dla przepywu
z zastosowaniem
kontrolki Fuzzy
Lookup

Rysunek 4.63.
Definicja tabeli
sownikowej dla
kontrolki Fuzzy
Lookup

Rysunek 4.64.
Definicja kolumn
porwnywanych
w tabeli rdowej
ze sownikiem dla
kontrolki Fuzzy
Lookup

97

98

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Jako skutek porwnania zostanie wyprowadzona kolumna o nazwie Wojewdztwo_pop,


ktra bdzie zawieraa zaproponowane w trakcie dziaania algorytmu odpowiednie nazwy
ze sownika. Moliwe jest sprawdzanie zgodnoci wicej ni jednej kolumny jednoczenie, ale w naszym przykadzie wymagaoby to zbudowania sownika na podstawie
zapytania czcego nazwy miast i wojewdztw z jedn tabel. Moe to stanowi ciekawe wiczenie uzupeniajce.
Ostatnim elementem definicji kontrolki (zakadka Advanced) jest okrelenie cech porwnania rozmytego (rysunek 4.65). Przede wszystkim naley ustali minimalny poziom podobiestwa Similarity threshold z polami sownika od tego poziomu pole
tej tabeli jest traktowane jako podobne do pola rda. W takim przypadku zaproponowane bdzie podstawienie wartoci pobranej ze sownika zamiast wartoci aktualnej. W stanie domylnym wyszukiwane jest jedno najbardziej podobne podstawienie.
Moliwe jest ustawienie waciwoci Maximum number of matches to output per lookup
na wiksz warto; wtedy moe zosta zaproponowanych kilka podobnych wartoci
ze sownika. Jednak liczba propozycji nie moe przekracza wartoci ustawionej
w tym polu. Ostatni element to ustalenie znakw, ktre maj by traktowane jako separatory, a nie znaki znaczce. Poza standardowym zestawem (spacja, tabulator, zmiana
linii i powrt karetki) moliwe jest dodanie dowolnego cigu znakw, z ktrych kady jest traktowany jako oddzielny separator. Domylne separatory mog zosta wyczone, co jest mao prawdopodobne w praktyce.
Rysunek 4.65.
Definicja
zawansowanych
opcji dla kontrolki
Fuzzy Lookup

Pozostaje zdefiniowanie docelowego obiektu, ktrym jest tabela na serwerze MS SQL.


Zaproponowana zostaa dla niej nazwa KlienciPoprawione. Poniewa kroki definiowania
tabeli przedstawiono ju we wczeniejszych przykadach, tym razem ogranicz si do
pokazania mapowania kolumn (rysunek 4.66). Mona zauway, e w porwnaniu
z oryginaln struktur tabeli dodano pola: Wojewdztwo_pop omawiana wczeniej
kolumna zawierajca nazwy zaproponowane przez algorytm, W_Confidence wskazujca warto poziomu istotnoci podstawienia, _Similarity_Wojewdztwo pokazujca warto wspczynnika podobiestwa nazwy w tabeli z wartoci sownikow,
oraz W_Similarity zawierajca wartoci oglnego wskanika podobiestwa, ktry
jest rny od poprzedniego, gdy porwnujemy jednoczenie kilka kolumn.

Rozdzia 4. Integracja danych

99

Rysunek 4.66.
Definicja mapowania
kolumn tabeli
docelowej dla
kontrolki Fuzzy
Lookup
sprawdzenie nazw
wojewdztw

Drugi przepyw w prezentowanym przykadzie jest prostym odpowiednikiem poprzedniego. Tym razem jednak dokonano sprawdzenia zgodnoci nazw miast. Wyjciow tabel jest tabela ze skorygowanymi nazwami wojewdztw, a docelow tabela
zawierajca dodatkowe informacje, analogiczne do prezentowanych poprzednio. Dlatego
docelowa struktura bdzie wygldaa jak na rysunku 4.67.
Rysunek 4.67.
Definicja mapowania
kolumn tabeli
docelowej dla
kontrolki Fuzzy
Lookup
sprawdzenie
nazw miast

100

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Po wykonaniu pakietu sprawdzona zostaa zawarto wynikowej tabeli na skutek wykonania zapytania wybierajcego najwaniejsze, zdaniem autora, jej kolumny. Ograniczono si rwnie do wierszy, w ktrych istniejce wpisy w tabeli rdowej s rne od zaproponowanych przez porwnanie rozmyte. Wynikowy zestaw kilku pierwszych
rekordw przedstawia tabela 4.9.
SELECT Miasto,Miasto_pop, Wojewdztwo, Wojewdztwo_pop,
W_Similarity, W_Confidence, _Similarity_Wojewdztwo,
M_Similarity, M_Confidence, _Similarity_Miasto
FROM KlienciOstateczne
WHERE (Wojewdztwo <> Wojewdztwo_pop) OR
(Miasto <> Miasto_pop)

_Similarity
_Miasto

M_Confidence

M_Similarity

_Similarity_
Wojewdztwo

W_Confidence

W_Similarity

Wojewdztwo_
pop

Wojewdztwo

Miasto_pop

Miasto

Tabela 4.9. Skutek wykonania pakietu zawierajcego dwa porwnania rozmyte Fuzzy Lookup (wyniki
przycito do czterech cyfr znaczcych)

Bdzin

Bedzin

slaskie

lubuskie

0,3125

0,2857 0,3125

0,8314 0,4782

0,8314

Bedzn

Bedzin

lskie

lskie

0,8314 0,4983

0,8314

Bdzin

Bedzin

lsk

lskie

0,7133

0,4990 0,7133

0,8314 0,4782

0,8314

Bedzin

Bedzin

laskie

lubuskie

0,3125

0,2785 0,3125

Bedzin

Bedzin

slaskie

lubuskie

0,3125

0,2857 0,3125

Brzeszcze Brzeszcze malopolskie maopolskie 0,9090

0,7512 0,9090

Brzeszcze Brzeszcze maopol.

maopolskie 0,6349

0,4982 0,6349

Hem

Chem

lubelskie

lubelskie

0,7957 0,4960

0,7957

Chorzow Chorzw slaskie

lubuskie

0,3125

0,2857 0,3125

0,8562 0,5827

0,8562

Horzw

Chorzw lsk

lskie

0,7133

0,4990 0,7133

0,8562 0,6196

0,8562

Horzow

Chorzw lskie

lskie

0,6917 0,3835

0,6917

Deblin

Dblin

lubelskie

0,8314 0,8058

0,8314

lubelskie

Kutno

Kutno

lodzkie

dzkie

0,6917

0,4770 0,6917

Kutno

Kutno

odzkie

dzkie

0,8562

0,4992 0,8562

Kutno

Kutno

ldzkie

dzkie

0,8562

0,4992 0,8562

Niestety, analiza wynikw porwnania rozmytego z tabeli 4.9 pozwala na stwierdzenie, e niezbyt dobrze radzi sobie ono z nazwami zawierajcymi polskie znaki diakrytyczne. Ilustruje to przypadek, w ktrym dla nazwy slaskie odpowiednikiem staa
si nazwa lubuskie. Wida, e ten komponent w wersjach narodowych wymaga jeszcze korekty. Jednak w wielu przypadkach podpowiedzi s celne. Trzeba te zauway, e naley bardzo uwanie sprawdza sowniki. Pojawienie si w nich bdnego
wpisu powoduje przypisanie bdnych danych do poprawnych wartoci wyjciowych.
Rwnie ten przypadek przydarzyo si to rwnie autorowi w przypadku zapisu
nazwy miasta Bedzin zamiast Bdzin.

Rozdzia 4. Integracja danych

101

Poniewa jest bardzo prawdopodobne, e w rzeczywistej realizacji take na kocu pakietu


pojawi si skrypt czyszczcy tabele, warto pomyle o realizacji zadania kompaktujcego baz, co ju uzasadniano. Mona je zrealizowa w definicji Control Flow, uywajc jednej kontrolki Shrink Database (rysunek 4.68). Wystarczy zdefiniowa podstawowe waciwoci, takie jak: acuch poczeniowy, baz do kompaktowania oraz
wielko bazy, po ktrej przekroczeniu proces ten jest konieczny, a take narzut wolnej przestrzeni pozostawionej po wykonaniu tego procesu. Dwie opcje wyboru pozwalaj przekaza zwolniony obszar albo do systemu operacyjnego, albo pozostawi go
jako przestrze wykorzystywan w dalszym cigu przez kompaktowan baz.
Rysunek 4.68.
Definicja pakietu
realizujcego
kompaktowanie
bazy danych

Warto zapozna si z kodem generowanym na skutek tak sparametryzowanego zadania,


ktry moemy obejrze po klikniciu przycisku View T-SQL (rysunek 4.68). Daje to
moliwo realizacji analogicznego zadania z zastosowaniem bardziej elementarnej
kontrolki Execute SQL. Dla zadania kompaktacji bazy danych odpowiedni kod TransactSQL prezentuje rysunek 4.69.
Rysunek 4.69.
Definicja kodu
Transact-SQL
odpowiedzialnego
za kompaktowanie
bazy danych

102

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Analizowana ju bya kontrolka Fuzzy Lookup analogiczn do niej funkcjonalno


prezentuje kontrolka Fuzzy Grouping, ktra wchodzi w skad pakietu konwersji danych
przedstawionego na rysunku 4.70. Tak jak w wikszoci prezentowanych dotychczas
pakietw, elementy skrajne stanowi definicje obiektu rdowego i docelowego.
W definicji centralnego elementu konieczne jest wskazanie kolumny (kolumn), wzgldem
ktrej nastpuje grupowanie rozmyte. Zdecydowano si na grupowanie wzgldem nazwy producenta okrelonego asortymentu towarw.
Rysunek 4.70.
Definicja kontrolki
Fuzzy Grouping
w zadaniu
transformacji danych

Zaawansowane parametry grupowania s prost analogi zakadki prezentowanej ju


poprzednio na rysunku 4.65. Naley podkreli, e grupowanie rozmyte ma sens tylko
dla pl znakowych i nie moe by stosowane dla pl numerycznych. Skutek odpytania zawartoci tabeli docelowej prezentowanej w tym przykadzie dla pocztkowego
zestawu rekordw jest zawarty w tabeli 4.10.

_Similarity_
NazwaProducenta

NazwaProducenta_
clean

IdMiasta

NazwaProdu
centa

IdProducenta

_score

_key_in

_key_out

Tabela 4.10. Skutek wykonania pakietu zawierajcego grupowanie rozmyte Fuzzy Grouping
(wyniki przycito do czterech cyfr znaczcych)

Spka Energetyczna

89

Spka Energetyczna

JDVC SA

89

JDVC SA

0.8283

JDVC

70

JDVC SA

0.8283

Optyka ZOO

256

Optyka ZOO

Optyka

256

Optyka

...

...

...

...

...

...

...

...

Rozdzia 4. Integracja danych

103

Podobn operacj moemy wykona dla nieco zmodyfikowanej tabeli wyjciowej,


w ktrej zamiast identyfikatora miasta pojawi si jego nazwa. W takim przypadku moliwe jest dokonanie porwnania rozmytego na podstawie dwch kolumn (rysunek 4.71).
Przy okazji dokonano podwyszenia wartoci progowej podobiestwa, od ktrej wartoci
kolumn s zastpowane innymi wartociami. Gdyby uwzgldniana bya kolumna cakowitoliczbowa, to byoby moliwe wykonanie dla niej tylko porwnania dokadnego.
Rysunek 4.71.
Definicja kontrolki
Fuzzy Grouping
w zadaniu
transformacji danych
z porwnaniem
rozmytym dla
dwch kolumn

Podobnie jak w zadaniu z grupowaniem rozmytym porwnujcym zawarto jednej


kolumny, rwnie i w tym przykadzie odpytana zostaa zawarto tabeli wynikowej.
Reprezentatywny zestaw rekordw zawiera tabela 4.11.
Podobnie jak przy przeszukiwaniu rozmytym Fuzzy Lookup, w przypadku grupowania
rozmytego Fuzzy Grouping rwnie mona mie wiele uwag do jakoci rozpoznawania
podobiestwa, zwaszcza w odniesieniu do nazw zawierajcych znaki diakrytyczne. Jednak trudno odmwi uytecznoci praktycznego stosowania obu omawianych rozwiza.
Oczywicie ten subiektywny wybr zada i kontenerw mona by rozcign na kolejne
przykady. Uwaam jednak, e jest on na tyle reprezentatywny, e zastosowanie kolejnej kontrolki nie powinno by dla Czytelnika bardzo duym wyzwaniem. Z drugiej
strony prba opisania wszystkich moliwoci oferowanych przez Integration Services
spowodowaaby konieczno powielania informacji wsplnych dla duej czci kontrolek, co doprowadzioby do znacznego powikszenia objtoci tej ksiki. Poniewa
najwaniejszym tematem maj by jednak wielowymiarowe struktury analityczne
przedstawione w dwch kolejnych rozdziaach, pozwoliem sobie na zamknicie listy
omawianych kontrolek w tym miejscu. Moe warto jeszcze zauway, e istnieje
moliwo budowy wasnych kontrolek w rodowisku .NET i ich rejestrowania
w Integration Services. Funkcjonalne przykady takich rozwiza podaje Ralph Kimball
w odniesieniu do Slowly Changing Dimension http://www.ralphkimball.com
(http://kimballscd.codeplex.com).

104

Hurtownie danych. Od przetwarzania analitycznego do raportowania

_Similarity_
Miasto

Optyka

Zgierz

Optyka

Zgierz

0.8327

Optyk

Zgiez

Optyka

Zgierz

0.8332

0.8323

10

10

10

Spka
Energety

Kutno

Spka
Energety

Kutno

10

0.8460

Spka
Energetyczna

Kutno

Spka
Energety

Kutno

0.8111

12

12

12

PRIFAST AB

Ostrzeszow

PRIFAST AB

Ostrzeszow 1

12

0.9583

PRIFAST AB

Ostrzeszw

PRIFAST AB

Ostrzeszow 1

0.8998

18

17

0.8195

18

Przeb. SA

Przeboje SA

0.7413

...

...

...

...

...

...

...

...

...

...

Nazwa_
clean

Miasto

Nazwa

Miasto_
clean

IdFirmy

_key_out

_score

_key_in

_Similarity_
Nazwa

Tabela 4.11. Skutek wykonania pakietu zawierajcego grupowanie rozmyte Fuzzy Grouping
dla przypadku porwnania dwch kolumn (wyniki przycito do czterech cyfr znaczcych)

Uruchamianie pakietw integracyjnych


Jeli ju zbudowalimy narzdzia do integracji danych, wypadaoby, aby byy one
uruchamiane nie tylko zaraz po ich utworzeniu, ale cyklicznie, wraz z przyrostem danych rdowych. Najczciej jednak czstotliwo ich wykonywania jest okrelana
statycznie w pewnych momentach. Najprostszym rozwizaniem jest w tym przypadku
signicie do funkcjonalnoci, jakie niesie ze sob MS SQL Agent. Narzdzie to jest
niezalenie uruchamian usug, stanowic element skadowy MS SQL Server. Jednym z elementw, ktry moe by za pomoc niego zdefiniowany, jest zadanie Job.
Pierwszy krok definiowania nowego zadania przedstawia rysunek 4.72. Ogranicza si
on do podania nazwy i zdefiniowania waciciela. W przykadzie jest nim superadministrator sa. Opcjonalnie moliwe jest przypisanie do kategorii oraz podanie przyjaznego
dla uytkownika opisu. Moliwe jest take czasowe blokowanie i odblokowywanie
zada opcja Enable. Dostpne s informacje o czasie utworzenia i ostatniej modyfikacji, a od pierwszego wykonania widoczny jest rwnie czas ostatniego wykonania.
Kolejny element definicji stanowi okrelenie podstawowych krokw, ktre poczwszy od
pierwszego na licie, maj by kolejno wykonane. Szczegy realizacji zostan ustalone
podczas tworzenia kroku zadania, po klikniciu przycisku New (rysunek 4.73). Moliwe jest rwnie wstawianie elementw pomidzy istniejce, edycja, usuwanie i zmienianie kolejnoci ich wykonywania.

Rozdzia 4. Integracja danych

105

Rysunek 4.72.
Podstawowe elementy
definicji zadania Job

Rysunek 4.73.
Podstawowe elementy
definicji krokw
zadania Job

Definicja pojedynczego kroku jest dwuetapowa. W pierwszym panelu (rysunek 4.74)


okrelamy nazw kroku i jego typ, ktry wskazuje, e mog by uruchamiane:
programy i polecenia systemu operacyjnego;
skrypty Transact-SQL;
skrypty PowerShell;

106

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 4.74.
Podstawowe elementy
definicji pojedynczego
kroku

skrypty ActiveX pisane w Visual Basicu lub Javie;


zadania replikacji danych (dystrybutora, replikacji migawkowej i scalajcej,

kolejkowania oraz odczytu pliku dziennika);


zadania Analysis Services i zapytania MDX;
pakiety Integration Services.

W przypadku pakietu Integration Services znajdujcy si w czci centralnej wielozakadkowy panel pozwala na ustalenie szczegw wykonania kroku. Najwaniejsze s
okrelenie miejsca, z ktrego ma by pobierany wykonywany pakiet (z SQL Server,
pliku systemu operacyjnego czy z wewntrznego skadu pakietw), oraz wybr nazwy i trybu autoryzacji o ile jest to pakiet przechowywany na serwerze.
W przypadku zaawansowanych parametrw definicji kroku naley okreli, co ma si
sta po jego pomylnym lub niepoprawnym wykonaniu (rysunek 4.75). W przypadku
powodzenia domylny stan to przejcie do kolejnego kroku, w przeciwnym razie
zakoczenie przetwarzania i wygenerowanie raportu o bdzie. Te dwie moliwoci
s dostpne w obu sytuacjach, ponadto mona jeszcze zakoczy przetwarzanie i wygenerowa raport o sukcesie oraz przej do dowolnego kroku pakietu. Moliwe jest
ustalenie liczby powtrze dla przypadku bdnego wykonania i odstpu czasu midzy tymi prbami. Wskazujemy rwnie miejsce przekazywania raportw.
Po zakoczeniu definiowania wszystkich krokw zadania przechodzimy do definiowania terminarzy wykona (moliwe jest pominicie tego kroku, ale wtedy zadanie
musiaoby by uruchomione rcznie lub programistycznie). W przykadzie zosta
okrelony jeden terminarz zdefiniowany po wybraniu przycisku New (rysunek 4.76).
Tak jak w przypadku krokw, moliwa jest edycja i usunicie terminarza oraz pobranie ju zdefiniowanego z Schedulera systemowego.

Rozdzia 4. Integracja danych


Rysunek 4.75.
Zaawansowane
elementy definicji
pojedynczego kroku

Rysunek 4.76.
Okrelenie terminarzy
wykona zadania

107

108

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Podstaw definicji jest jak zwykle okrelenie nazwy oraz aktywnoci terminarza (rysunek 4.77). Konieczne jest rwnie okrelenie jego rodzaju jako:
start automatically when SQL Server Agent starts wykonanie zadania odbywa

si automatycznie po kadym uruchomieniu serwisu SQL Server Agent;


start whenever the CPUs become idle wykonanie zadania nastpuje, kiedy

procesor CPU jest w stanie bezczynnym Idle;


recurring wykonanie zadania bdzie si odbywao cyklicznie zgodnie

z ustawieniami szczegowymi;
one time zadanie zostanie wykonane raz w czasie okrelonym w sekcji

one-time occurrence.
Rysunek 4.77.
Szczegy definicji
terminarza

W przykadzie przedstawiono sposb parametryzowania zadania dla wykonania cyklicznego, gdzie okrela si czstotliwo Frequency (codziennie, okrelonego dnia, co tydzie itd.), czstotliwo powtrze w cigu dnia (o wskazanej godzinie, co okrelony odstp czasu, w zakresie od do), a take pocztkow dat oraz dat zakoczenia
przetwarzania moe by bezterminowo.
Utworzenie dla pojedynczego zadania wikszej liczby terminarzy pozwala na precyzyjniejsze okrelenie momentw wykonania zadania, jeeli algorytm okrelania czasu
jest bardziej zoony. W definicji zadania mona okreli ponadto komunikaty Alerts,
ktre bd generowane na skutek pojawienia si bdw, oraz powiadomienia operatorw
Notifications. Moliwe jest rwnie okrelenie miejsca, gdzie zadanie bdzie wykonywane jako Target. Stanem domylnym jest lokalny serwer, ale jest moliwe wskazanie
innego z domeny lub grupy roboczej, do ktrego mamy wystarczajce uprawnienia.

Rozdzia 4. Integracja danych

109

Wykorzystywanie zapyta SQL


do migracji danych
Na zakoczenie tego rozdziau troch przekornie mona powiedzie, e w zasadzie
omawiane w nim narzdzie nie jest w ogle potrzebne. Kady twardy programista
powie, e prawdziw warto ma tylko takie rozwizanie, w ktrym widoczny jest
kod. Doda jeszcze, e oprogramowa mona wszystko. Zwolennicy baz danych i ich
rozszerze proceduralnych stwierdz, e niepotrzebne s jzyki wyszego rzdu i e
wystarczy samo rodowisko serwera. Niestety, maj duo racji. Sam wol programowa
ni klika ikony czy przeciga je i tworzy adne obrazki. Co mona zaproponowa w zamian? Aby zrealizowa przykad konkurencyjnego rozwizania, utwrzmy
dwie tabele: Product, opisujc towary i ich przynaleno do kategorii, przeznaczon na dane docelowe, oraz tabel Blady, opisujc proces kopiowania. Druga z tabel
zawiera zdublowane kolumny tabeli docelowej, raz poprzedzone prefiksem Existing,
a drugi raz New. Midzy tymi grupami wprowadzono znakow kolumn o nazwie
ActionTaken.
CREATE TABLE Product (
PK_Product int PRIMARY KEY,
Product_Name varchar(50),
Category int,
Category_Name varchar(50)
);
GO
CREATE TABLE Blady (
ExistingProduct_PK int,
ExistingProduct_Name nvarchar(50),
ExistingCategory int,
ExistingCategory_Name nvarchar(50),
ActionTaken nvarchar(10),
NewProduct_PK int,
NewProduct_Name nvarchar(50),
NewCategory int,
NewCategory_Name nvarchar(50)
);

Waciw akcj bdzie przepisanie danych pochodzcych z dwch tabel do tabeli


Product. Zastosowane zostanie polecenie MERGE, a tabela docelowa bdzie opatrzona aliasem Target. Po sowie kluczowym USING zdefiniowano zapytanie wybierajce
kopiowane dane z tabel Towary i Kategorie. Dopuszczalne jest stosowanie wszystkich elementw skadniowych wystpujcych w tego typu zapytaniach.
MERGE Product AS Target
USING (
SELECT IdTowaru, NazwaTowaru, Kategorie.IdKategorii, NazwaKategorii
FROM Towar JOIN Kategorie
ON Towar.IdKategorii=Kategorie.IdKategorii
WHERE IdTowaru<=10
)

110

Hurtownie danych. Od przetwarzania analitycznego do raportowania


AS Source (IdTowaru, NazwaTowaru, IdKategorii, NazwaKategorii)
ON (Idtowaru=Target.PK_Product)
WHEN NOT MATCHED BY Target
THEN
INSERT (PK_Product, Product_Name, Category, Category_Name)
VALUES(IdTowaru, NazwaTowaru, IdKategorii, NazwaKategorii)
WHEN MATCHED AND Target.Category IS NULL
THEN DELETE
WHEN MATCHED AND Target.Category IS NOT NULL
THEN UPDATE SET target.Category = SOURCE.IdKategorii
OUTPUT DELETED.*, $action, INSERTED.* INTO Blady;

W przykadzie zdecydowano si na wybranie rekordw, w ktrych identyfikator towaru


nie przekracza 10, a zapytanie okrelajce rdo zostao opatrzone aliasem Source.
Sowo kluczowe ON wyznacza sekcj, w ktrej okrelamy warunki, wedug ktrych
dane ze rda bd porwnywane z danymi zawartymi w obiekcie docelowym. Warunek WHEN NO MATCHED definiuje dziaanie w przypadku wykrycia rekordw,
dla ktrych wyraenie sprawdzajce jest faszywe, co oznacza, e wiersza nie ma jeszcze
w obiekcie docelowym. Naturalne jest wtedy wstawienie nowego wiersza. Stosowana
jest skadnia podobna do zwykego zapytania INSERT, ale pomijana jest nazwa
obiektu docelowego, poniewa definiuje j nagwek polecenia MERGE. Po sowie
kluczowym Values wystpuje separowana przecinkami lista pl z zapytania rdowego, o kolejnoci zgodnej z list pl wymienion po sowie INSERT. Jeli zasilamy
wszystkie pola, lista pl docelowych nie jest obowizkowa, a kolejno wartoci musi
by zgodna z kolejnoci pl w tabeli docelowej patrz polecenie CREATE TABLE.
W przykadowym zapytaniu okrelono dwojakie dziaanie, kiedy wykryto zgodno
midzy rdem a celem WHEN MATCHED. W obu sytuacjach sprawdzono dodatkowo, jak warto ma pole Category. Jeli w pierwszym przypadku byo NULL,
nastpowao wykasowanie rekordu z obiektu docelowego, w przeciwnym razie dokonano zmiany tego pola na zgodne z tym, ktre wystpio w rdle. Oczywicie naleaoby zmodyfikowa wszystkie pola z wyjtkiem pola klucza gwnego, ale spowodowaoby to dalsz rozbudow przykadu. Ostatnim elementem jest zdefiniowanie
pl, ktre maj si znale w tabeli Blady, definiujcej wykonane procesem operacje.
Wykorzystano dwie tabele systemowe tworzone podczas wykonywania tego polecenia, ktre stanowi analogi dla tabel tworzonych w trakcie pracy procedur wyzwalanych triggerw. Tabela DELETED zawiera stare, natomiast INSERTED nowe
wartoci pl rekordw. Dodatkowo wykorzystano polecenie wewntrzne $action,
zwracajce nazw akcji, ktra zostaa wykonana dla danego rekordu. rednik koczcy
polecenie MERGE jest obowizkowy, co nie ma odniesienia do innych polece SQL.
Tabela 4.12 zawiera rekordy, jakie pojawiy si w tabeli docelowej, natomiast tabela 4.13
przedstawia rekordy zapisane do tabeli Blady.
Pierwsze wykonanie zapytania, dla pustego obiektu docelowego byo rwnowane
wykonaniu zapytania wstawiajcego wiersze typu INSERT SELECT. Powtrzmy
ten proces, zmieniajc w poleceniu MERGE zakres kopiowanych wierszy w klauzuli
WHERE. Tym razem bd to rekordy, dla ktrych identyfikator wiersza jest z przedziau obustronnie domknitego <5, 15>, jak pokazuje przykad. Pozostae elementy
skadniowe nie ulegy zmianie. Przed wykonaniem tego polecenia zawarto tabeli
docelowej nie bya czyszczona.

Rozdzia 4. Integracja danych

111

Tabela 4.12. Skutek wykonania polecenia MERGE tabela wynikowa


PK_Product

Product_Name

Category

Category_Name

Mazurki FCh

Muzyka

Zestaw Lux

Akcesoria

Gio 15

GPS

Leksykon

19

Podrczniki

Fizyka

19

Podrczniki

Statyw AX

Akcesoria

Dodatki +3

12

Oprogramowanie

Dodatki +7

12

Oprogramowanie

Mikrofala

RTV

10

Podstawka

Akcesoria

NewCategory_
Name

NewCategory

NewProduct_
Name

NewProduct_
PK

ActionTaken

ExistingCategory_Name

ExistingCategory

ExistingProduct_Name

ExistingProduct_PK

Tabela 4.13. Skutek wykonania polecenia MERGE tabela opisujca wykonywan akcje

NULL

NULL

NULL

NULL

INSERT

Mazurki FCh

Muzyka

NULL

NULL

NULL

NULL

INSERT

Zestaw Lux

Akcesoria

NULL

NULL

NULL

NULL

INSERT

Gio 15

GPS

NULL

NULL

NULL

NULL

INSERT

Leksykon

19

Podrczniki

NULL

NULL

NULL

NULL

INSERT

Fizyka

19

Podrczniki

NULL

NULL

NULL

NULL

INSERT

Statyw AX

Akcesoria

NULL

NULL

NULL

NULL

INSERT

Dodatki +3

12

Oprogramowanie

NULL

NULL

NULL

NULL

INSERT

Dodatki +7

12

Oprogramowanie

NULL

NULL

NULL

NULL

INSERT

Mikrofala

RTV

NULL

NULL

NULL

NULL

INSERT

10

Podstawka

Akcesoria

MERGE Product AS TARGET


USING(
SELECT IdTowaru, NazwaTowaru, Kategorie.IdKategorii, NazwaKategorii
FROM Towar JOIN Kategorie
ON Towar.IdKategorii=Kategorie.IdKategorii
WHERE IdTowaru>=5 AND IdTowaru <=15
)
AS SOURCE (IdTowaru, NazwaTowaru, IdKategorii, NazwaKategorii)
ON (Idtowaru=TARGET.PK_Product)
WHEN NOT MATCHED BY TARGET
THEN
INSERT (PK_Product, Product_Name, Category, Category_Name)
VALUES(IdTowaru, NazwaTowaru, IdKategorii, NazwaKategorii)
WHEN MATCHED AND target.Category IS NULL
THEN DELETE

112

Hurtownie danych. Od przetwarzania analitycznego do raportowania


WHEN MATCHED AND target.Category IS NOT NULL
THEN UPDATE SET target.Category = SOURCE.IdKategorii
OUTPUT DELETED.*, $action, INSERTED.* INTO blady;

Po wykonaniu przedstawionego polecenia zawarto tabeli docelowej ulega zmianie.


Pozostawiono do tej pory wpisane rekordy oraz zostay dopisane rekordy wynikajce
z powikszenia zakresu danych rdowych. Zawarto tabeli docelowej po wykonaniu tej operacji przedstawia tabela 4.14.
Tabela 4.14. Skutek ponownego wykonania polecenia MERGE tabela wynikowa
PK_Product

Product_Name

Category

Category_Name

Mazurki FCh

Muzyka

...

...

...

...

Fizyka

19

Podrczniki

Statyw AX

Akcesoria

...

...

...

...

15

Luneta stand

Optyka

Waniejsza jest analiza tabeli Blady, zawierajcej informacje o przeprowadzonych


w trakcie wykonywania przedstawianego zapytania (tabela 4.15). Tak samo jak w przypadku tabeli Product rwnie i ta tabela nie bya czyszczona, dlatego pierwszych
dziesi rekordw ExistingProduct_PK=NULL i NewProduct_PK<=10 jest wiadectwem wykonania poprzedniej operacji. Kolejne wiersze, dla ktrych ExistingProduct_PK= NewProduct_PK pokazuj, e dla wierszy, ktre ju istniay w tabeli docelowej i ponownie prbowano je zapisa, wykonano zapytanie modyfikujce UPDATE.
Ostatnia grupa rekordw, ExistingProduct_PK=NULL, to ta, dla ktrych nie istniay
jeszcze rekordy i tak samo jak przy pierwszej prbie wykonania polecenia MERGE
zostay dopisane do tabeli.

NewCategory_
Name

NewCategory

NewProduct_
Name

NewProduct_
PK

ActionTaken

ExistingCategory_
Name

ExistingCategory

ExistingProduct_Name

ExistingProduct_PK

Tabela 4.15. Skutek ponownego wykonania polecenia MERGE tabela opisujca wykonywan akcj

NULL

NULL

NULL

NULL

INSERT

Mazurki FCh 9

Muzyka

NULL

NULL

NULL

NULL

INSERT

10

Podstawka

Akcesoria

Fizyka

19

Podrczniki

UPDATE

Fizyka

19

Podrczniki

10

Podstawka 7

Akcesoria

UPDATE

10

Podstawka

Akcesoria

NULL

NULL

NULL

NULL

INSERT

11

Statyw

Akcesoria

NULL

NULL

NULL

NULL

INSERT

15

Luneta stand 6

Optyka

Rozdzia 4. Integracja danych

113

Przykad realizacji polecenia MERGE jest z przyczyn formalnych bardzo uproszczony, poniewa w przypadku zgodnoci kluczy podstawowych naleaoby dodatkowo
sprawdzi zgodno wartoci wszystkich pl zapytania okrelajcego rdo oraz tabeli docelowej. Gdy zgodno jest pena, nie powinno si podejmowa adnej akcji,
tak aby nie wydua czasu przetwarzania. Formalnie lepiej jest sprawdzi warunek
odwrotny i w razie niezgodnoci jednego z pl wykona odpowiedni modyfikacj.
Oczywicie w duej mierze sposb realizacji zapytania zaley od postawionych przed
procesem zasilania wymaga formalnych.
W prezentowanym przykadzie przyjto, e rdem s tabele zapisane po stronie
schematu relacyjnego na serwerze MS SQL. W praktyce moliwe jest stosowanie jako rda danych pliku tekstowego. Proces takiej migracji realizowany jest dziki
wykorzystaniu polecenia BULK INSERT. Naley w nim zdefiniowa nazw tabeli docelowej oraz po sowie kluczowym FROM kwalifikowan nazw pliku rdowego
wraz z rozszerzeniem. W sekcji WITH podawana jest ujta w nawiasy, rozdzielana
przecinkami lista parametrw importu z okreleniem ich wartoci.
BULK INSERT Product
FROM 'C:\Ksika_hurtownie_helion\produkty.csv'
WITH
(
FIELDTERMINATOR =',',
ROWTERMINATOR ='\n',
FIRSTROW = 2 ,
MAXERRORS = 100,
ERRORFILE = 'C:\Ksika_hurtownie_helion\blady.txt'
)

W przykadzie podane zostay parametry okrelajce:


FIELDTERMINATOR separator rozdzielajcy kolejne pola rekordu,

najczciej przecinek lub rednik;


ROWTERMINATOR separator rozdzielajcy kolejne rekordy, najczciej

zmiana wiersza;
FIRSTROW od ktrego wiersza naley czyta dane z pliku rdowego;

warto wiksza od 1 jest najczciej spowodowana istnieniem nagwka


albo tym, e plik zawiera nazwy kolumn;
MAXERRORS po jakiej liczbie bdw proces ma bezwarunkowo zakoczy

dziaanie;
ERRORFILE nazw pliku tekstowego, do ktrego bd wpisywane

wiersze zawierajce bdne dane (oprcz tego tworzony jest plik o dodatkowym
rozszerzeniu Error.Txt, zawierajcy komunikaty odnoszce si do tych wierszy).
Ponadto moliwe jest jeszcze zdefiniowanie innych parametrw, ktre okrelaj:
BATCHSIZE liczba wierszy w jednej porcji, kada z nich jest kopiowana

w ramach pojedynczej transakcji; w przypadku bdu krytycznego kada


z porcji jest oddzielnie zatwierdzana Commit lub wycofywana ROLLBACK,
domylnie cay plik stanowi pojedyncz transakcj;

114

Hurtownie danych. Od przetwarzania analitycznego do raportowania


CHECK_CONSTRAINTS wszystkie ograniczenia zdefiniowane w tabeli

docelowej s sprawdzane podczas importu; jeli nie zostanie ustawiona ta


opcja, ograniczenia walidujce CHECK oraz kluczy obcych FOREIGN KEY
nie s sprawdzane w trakcie importowania, a po zakoczeniu s oznaczone
flag NOT-TRUSTED; ograniczenia UNIQUE, PRIMARY KEY oraz NOT
NULL s zawsze sprawdzane;
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } okrela sposb

kodowania pl znakowych (ACP konwersja na format ANSI lub Microsoft


Windows ISO 1252, OEM (domylna) nastpuje konwersja od strony kodowej
systemu operacyjnego do strony kodowej zdefiniowanej w SQL Server,
RAW nie nastpuje konwersja, code_page wskazuje jawnie numer strony
kodowej), format UTF8 nie jest obsugiwany;
DATAFILETYPE { 'char' | 'native'| 'widechar' | 'widenative' } okrela

reprezentacje zmiennych znakowych (char (domylnie) zwyke typy znakowe,


native typy znakowe w narodowej stronie kodowej, widechar zmienne
w formacie unicode, widenative typy znakowe w narodowej stronie kodowej
z wyjtkiem tych, dla ktrych zastosowano unicode);
FIRE_TRIGGERS powoduje uruchomienie procedur wyzwalanych,

utworzonych dla zdarzenia INSERT; procedury te s uruchamiane dla kadej


zakoczonej transakcji i porcji danych;
FORMATFILE wskazuje kwalifikowan nazw pliku formatujcego,

utworzonego za pomoc polecenia bcp; odwoanie do niego nastpuje, gdy


plik danych zawiera zbyt duo lub zbyt mao kolumn, kolumny s zapisywane
w innej kolejnoci ni wystpujca w pliku rdowym, zmienia si ogranicznik
kolumn lub zmieniaj si inne elementy formatu; plik ten moe by edytowany
tak jak kady plik tekstowy;
KEEPIDENTITY wskazuje, e do pl automatycznie inkrementowanych

IDENTITY wstawiane bd wartoci pobrane z pliku; jeli nie


wyspecyfikowano, uruchamiana jest generacja wartoci po stronie serwera;
KEEPNULLS do pustych pl bd wstawiane wartoci NULL;
KILOBYTES_PER_BATCH okrela szacunkowy przydzia pamici

na jedn porcj danych; domylnie jest wartoci nieokrelon, wynikajc


z ustawienia parametru BATCHSIZE;
LASTROW numer ostatniego wiersza, ktry bdzie importowany z pliku;
ORDER ({column [ \ASC | DESC ]}[,...n]) okrela, w jaki sposb bd

sortowane dane w tabeli docelowej; nie ma zastosowania, jeli zosta na niej


utworzony indeks grupujcy CLUSTERED;
ROWS_PER_BATCH szacunkowa liczba wierszy w zbiorze rdowym;
TABLOCK blokuje dostp do kopiowanych wierszy przez transakcje

odwoujce si do zasilanej tabeli; wynika to z poziomu izolacji transakcji.

Rozdzia 4. Integracja danych

115

Przy okazji mona wskaza na dwa wane przypadki, ktre powoduj krytyczny bd
przetwarzania. Pierwszy z nich ma miejsce wtedy, gdy plik przeznaczony na bdne
wiersze ju istnieje. Pojawia si wtedy komunikat o postaci:
Msg 4861, Level 16, State 1, Line 1
Cannot bulk load because the file "C:\Ksika_hurtownie_helion\blady.txt" could not be
opened. Operating system error code 80 (Plik istnieje).

Kolejny dotyczy zasilania tabeli, dla ktrej zdefiniowano klucz podstawowy, a w rdle
istniej wiersze powodujce powielenie ich wartoci. Komunikat ma wtedy posta:
Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK__Product__E5E6F73B06CD04F7'. Cannot insert
duplicate key in object 'dbo.Product'.
The statement has been terminated.

Aby pokaza dziaanie kopiowania masowego, przygotowany zosta plik tekstowy


o postaci:
T_PK,Tow,K_PK,Kat
21,Mazurki FCh,9,11
22,Zestaw,xxx,Akcesoria
23,Gio 15,7
24,Leksykon;
25,19,Podrczniki
26,Statyw AX,7,Akcesoria

Pierwszy wiersz zawiera nazwy kolumn. W kolejnych wierszach zawarte s dane.


Tylko wiersz o identyfikatorze 21 zawiera dane we waciwej postaci. W nastpnych
wierszach s zawarte dane o niezgodnym typie albo jest ich zbyt mao, albo zastosowano zy separator. Na skutek wykonania polecenia BULK INSERT wszystkie niepoprawne wiersze zostay umieszczone w pliku blady.txt.
22,Zestaw,xxx,Akcesoria
23,Gio 15,7
24,Leksykon;
25,19,Podrczniki
26,Statyw AX,7,Akcesoria

Natomiast komunikaty zwizane z tymi bdami zawarte s w pliku blady.txt.Error.Txt


i maj posta:
Row 3 File Offset 40 ErrorFile Offset 0 - HRESULT 0x80020005
Row 4 File Offset 65 ErrorFile Offset 25 - HRESULT 0x80020005
Row 5 File Offset 92 ErrorFile Offset 52 - HRESULT 0x80020005

Oczywicie wnikliwy Czytelnik powie, e rda w postaci danych zapisanych w MS


SQL Server oraz w plikach tekstowych nie wyczerpuj wszelkich moliwoci integracji danych pochodzcych ze rde heterogenicznych. C, mona zaoy, e
kady komercyjny serwer baz danych moe generowa plik tekstowy, a ten moe by
odczytany przy uyciu BULK INSERT, ale powoduje to konieczno utworzenia
warstwy poredniej, co spowalnia proces migracji. Istnieje jednak moliwo bezporedniego odpytania serwerw innych typw. Pierwszym rozwizaniem jest zastosowanie
polecenia OPENROWSET, w ktrym naley zdefiniowa trzy parametry. Pierwszym jest
nazwa dostawcy sterownika do serwera wybranego typu, drugi, charakterystyczny dla

116

Hurtownie danych. Od przetwarzania analitycznego do raportowania

kadego sterownika, z reguy zawiera informacje o instancji bazy danych oraz trybie
uwierzytelnienia, trzecim jest zapytanie, ktre ma zosta wykonane w okrelonej lokalizacji. Prezentowany przykad odnosi si do serwera MS SQL i ma za zadanie wywietla nazwy towarw z tabeli Towar przy uwierzytelnieniu dziedziczonym po
systemie operacyjnym.
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=AP;Trusted_Connection=yes;',
'SELECT NazwaTowaru
FROM BazaRelacyjna.dbo.Towar') AS a;

Drugi wariant pokazuje wykonanie tego samego zapytania na tej samej maszynie przy
zmianie uwierzytelnienia na okrelone po stronie serwera bazy danych.
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Data Source=AP;UID=sa;PWD=haslo;',
'SELECT NazwaTowaru
FROM BazaRelacyjna.dbo.Towar') AS a;

W trzecim przypadku zmieniona zostaa definicja rda danych w ten sposb, e zamiast zastosowania zapytania wybierajcego odwoano si wprost do tabeli. Jest to
rwnowane wybraniu z niej wszystkich pl i wierszy.
SELECT *
FROM OPENROWSET('SQLNCLI', 'Data Source=AP;UID=sa;PWD=haslo;',
BazaRelacyjna.dbo.Towar)

Zamiast podawa acuch poczeniowy w sposb jawny, uywajc nazw parametrw


poczenia, moemy uzyska ten sam efekt, podajc tylko ich wartoci separowane
rednikami.
SELECT *
FROM OPENROWSET('SQLNCLI', 'AP';'sa';'haslo',
BazaRelacyjna.dbo.Towar)

Mona oczywicie powiedzie, e to jednak nie rozwizuje problemu, poniewa


w dalszym cigu poruszamy si w sferze serwerw MS. Pokazywanie wszystkich
przykadw dla kadego moliwego do zdefiniowania sterownika do serwera baz danych nie jest celowe. Dlatego ograniczmy si tylko do odpytania rda w przypadku
najsilniejszej konkurencji, jak jest niewtpliwie Oracle. W prezentowanym przykadzie zastosowany zosta sterownik Microsoftu dla Oracle o nazwie MSDAORA; sid
okrela nazw serwisu (instancji serwera), z ktrym si czymy.
SELECT *
FROM OPENROWSET('MSDAORA', 'sid';'uzytkownik';'haslo',
SELECT * FROM Osoby)

Innym podejciem jest zdefiniowanie serwera poczonego LINKED SERVER. W takim przypadku definicj acucha poczeniowego wykonujemy w narzdziach wizualnych MS SQL, a w zapytaniu pozostaje nam jedynie odwoa si do jego nazwy
Polaczony oraz zdefiniowa zapytanie lub wskaza na tabel albo perspektyw.
SELECT * FROM OPENQUERY(Polaczony,
'SELECT * FROM BazaRelacyjna.dbo.towar') AS test

Rozdzia 4. Integracja danych

117

W zwizku z tym pozostaje odpowiedzie na podstawowe pytanie. Czy warto korzysta z narzdzi wizualnych Integration Services? Mimo wszystko wydaje si, e tak.
Przede wszystkim proponowane przez twrcw kontrolki maj wbudowane algorytmy optymalizujce, co moe mie wpyw na czas przetwarzania zada. W przypadku
bardzo duych wolumenw danych jest to nie do przecenienia. Jedynym problemem
z wydajnoci przetwarzania moe by stosowanie wielu tabel poredniczcych, co
znaczco spowalnia prac (zapis i odczyt z urzdze fizycznych s znacznie wolniejsze ni wszystkie inne operacje). Dlatego w miar moliwoci naley takich operacji
unika. Jeli jednak wolimy korzysta bezporednio z zapyta, to warto rozway
wykorzystanie ich jako elementu zadania Execute SQL. Kolejn wan cech jest
moliwo ustanowienia cisej kolejnoci przetwarzania zada oraz wbudowana obsuga bdw zarwno na poziomie definiowania pojedynczego zadania, jak i pniej,
na poziomie definiowania terminarza w postaci szeregowo przetwarzanych krokw.
W pierwszym przypadku istnieje moliwo warunkowego rozwidlenia procesw, co
moe mie rwnie wpyw na wydajno.

118

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rozdzia 5.

Wizualne
tworzenie elementw
hurtowni danych
Wstp do Analysis Services
Mamy zatem dane potrzebne do tworzenia analitycznych struktur wielowymiarowych,
zawartych w schemacie relacyjnym serwera, na ktrym chcemy zbudowa hurtowni
danych. Dane s oczyszczone i wstpnie przygotowane. Zaczniemy jednak od pracy
na podstawowym schemacie relacyjnym, prezentowanym podczas omawiania zapyta
analitycznych. Niestety, schemat ten nie posiada wszystkich niezbdnych elementw,
dlatego rozpoczniemy od przygotowania pomocniczej perspektywy, ktra bdzie
w dalszej czci wykorzystywana jako tabela faktw. Moemy tego dokona na poziomie MS SQL Server Management Studio, uywajc wizualnego narzdzia do tworzenia widokw (rysunek 5.1).
Rwnowanym postpowaniem jest zastosowanie zapytania SQL o postaci
CREATE VIEW Wszystkie_transakcje
AS
SELECT Transakcje.IdTransakcji, Transakcje.IdFaktury, Transakcje.IdTowaru,
Faktury.IdKlienta, Faktury.IdOsoby,
CONVERT(varchar(10), Data, 112) AS DataVar,
szt AS Ilosc, Cena *szt AS Wartosc,
CenaZakupu * szt AS WartoscZakupu,
CONVERT(int, Data, 0) AS DataNum, Data
FROM Faktury INNER JOIN
Transakcje ON Faktury.IdFaktury = Transakcje.IdFaktury
INNER JOIN Towar
ON Transakcje.IdTowaru = Towar.IdTowaru

120

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.1. Struktura pomocniczej perspektywy dla potrzeb wyznaczania miar

Zdefiniowana perspektywa zawiera pole IdTransakcji, ktre bdzie kluczem gwnym tabeli faktw. Pozostae pola z prefiksem Id bd definioway klucze obce pozwalajce
na doczenie wymiarw. Podobn rol bd odgryway dwa pola konwertujce pole
daty na liczb wedug wewntrznej jej notacji oraz na posta napisu zawierajcego
cztery cyfry roku, dwie reprezentujce miesic i dwie reprezentujce dzie. W drugim
przypadku jednocyfrowe numery miesica czy dnia zostan uzupenione z prawej strony
zerem. Rwnie drugi zapis moe by traktowany jako liczba cakowita. Konwersja
typu data do postaci rnej od tej, w ktrej jest prezentowana podczas wywietlania, jest
spowodowana nieustalonym jednoznacznie sposobem formatowania tego typu danych,
zalenym od ustawie systemowych, ktre dodatkowo mog by nadpisane na poziomie bazy danych i aplikacji. Z przyczyn dydaktycznych dodane zostao nadmiarowo
pole IdFaktury, ktre nie definiuje bezporednio wymiaru. Poza tym zdefiniowano
dwa pola reprezentujce miary Ilosc oraz wyraenie wyznaczajce warto kadej z transakcji, mierzone cen i cen zakupu. Poniewa pniej bdzie tworzony rwnie wymiar czasu, dodano kolejn perspektyw.
CREATE VIEW czas
AS
SELECT CONVERT(int, Data, 0) AS DataNum,
YEAR(Data) AS Rok,
DATEPART(qq, Data) AS Kwartal,
MONTH(Data) AS Miesiac
FROM Faktury

Definiuje ona elementy skadowe daty w kalendarzu, ktrego podstaw s wpisy


w tabeli Faktury. Rok i miesic wyznaczono z wbudowanych funkcji, natomiast do uzyskania liczby reprezentujcej numer kwartau zastosowana zostaa funkcja DATEPART,
z odpowiednio zdefiniowanym pierwszym jej atrybutem. Wygenerowano rwnie klucz
logiczny, konwertujc dat na posta numeryczn, tak samo jak zrobiono to w poprzedniej perspektywie.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

121

Przejdmy do drugiego zasadniczego elementu skadowego SQL Server Business Intelligence Developer Studio, ktry pozwala na tworzenie analitycznych struktur OLAP.
Pierwszym krokiem jest utworzenie nowego projektu. Tym razem jest to projekt typu
Analysis Services (rysunek 5.2). Bdzie on tworzony z zastosowaniem platformy
.NET, uywajcej silnika 3.5. Naley poda logiczn nazw projektu. Wskazane jest,
aby skrci ciek do folderu, w ktrym projekt bdzie tworzony, poniewa domylna jest duga i wskazuje podfolder w folderze Moje dokumenty, co w przypadku udostpniania aplikacji innym uytkownikom moe by kopotliwe.
Rysunek 5.2.
Tworzenie nowego
projektu nadanie
nazwy i wskazanie
lokalizacji

Po wskazaniu podstawowych danych tworzony jest pusty projekt, jak pokazuje rysunek 5.3. Dostpne s menu rozwijane i pasek przyciskw narzdziowych. W prawej
czci okna wida Solution Explorer, w ktrym zawarta jest, w postaci drzewa, informacja o wszystkich obiektach tworzonych w hurtowni. Szczegowe omwienie kadego
z nich bdzie przedstawione podczas prezentowania sposobu ich tworzenia w dalszej
czci rozdziau. Poniej dostpna jest zakadka z zestawem waciwoci wskazanego
w projekcie elementu. Dolna cz okna jest przeznaczona na wywietlanie informacji o bdach, ostrzee oraz komunikatw pojawiajcych si podczas tworzenia lub
przetwarzania elementw projektu. Centralna cz okna jest przeznaczona na szczegowe informacje o wybranym obiekcie. Zawsze jest to okno wielozakadkowe, zawierajce na kadej zakadce zestaw informacji, najczciej w formie graficznej, rzadziej opisowej (skrypt MDX lub plik XML).
Pierwszym krokiem definiowania elementw jest utworzenie nowego rda danych
(Data Source). Nowe obiekty tworzone s dziki wybraniu odpowiedniego poziomu
w drzewie Solution Explorer i klikniciu prawego przycisku myszy. Daje to rezultat
przedstawiony na rysunku 5.4. Pomimo e nowe rdo danych moe by definiowane podczas tworzenia kolejnych, innych elementw projektu, zaleca si rozpoczcie
pracy od wykonania tego kroku.

122

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.3. Pusty projekt hurtowni danych


Rysunek 5.4.
Tworzenie rda
danych

Praca kadego kreatora rozpoczyna si od okna powitalnego, opisujcego funkcjonalnoci


tworzonego obiektu oraz wskazujcego, czego on nie zawiera. Poniewa informacja
ta jest stosunkowo mao istotna, a jej posta formalna bardzo podobna we wszystkich
omawianych przypadkach, okna te nie bd prezentowane. Kolejny formularz pojawiajcy si podczas tworzenia nowego rda danych pozwala na pobranie zdefiniowanego wczeniej acucha poczeniowego (connection string) lub utworzenie nowego (rysunek 5.5). Poniewa definiujemy pierwszy obiekt w projekcie, musimy
pj drug z drg, wybierajc przycisk New.
Powoduje to chwilowe przeniesienie akcji do kreatora pocze Connection Manager
(rysunek 5.6). W tym kroku musimy zdefiniowa rodzaj rda danych (sterownik),
nazw serwera danych, tryb autoryzacji oraz potrzebne do niej dane (uytkownik, haso).

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

123

Rysunek 5.5.
Tworzenie rda
danych
definiowanie
poczenia

Rysunek 5.6.
Tworzenie rda
danych meneder
pocze

Prawdziw si MS SQL Servera jest moliwo czenia si z bardzo szerok klas


rde danych; wiadczy o tym ich lista pokazana na rysunku 5.7. Jest ona podzielona
na dwie grupy. Pierwsza jako dostarczyciela usugi proponuje sterowniki klasy .NET,
druga natywne poczenia klasy OLE DB. Wybr midzy tymi dwoma sposobami
poczenia jest w zasadzie uwarunkowany tylko upodobaniami projektanta hurtowni.
Wrd domylnych mostw s dostpne midzy innymi obsugujce bazy danych:
SQL Server, MS Access oraz Oracle (w dwch klonach autorstwa programistw obu
konkurujcych firm). Poza tym moemy si poczy z kadym innym serwerem danych pod warunkiem zainstalowania w systemie odpowiedniego sterownika. Naley
zwrci uwag na moliwo zrealizowania poczenia z innymi wczeniej utworzonymi strukturami OLAP. Wystpujcy po jednym ze sterownikw tego typu numer 80
wskazuje na stare rozwizania hurtowni Microsoftu, opracowane dla serwerw 2000.
Wybr sterownika determinuje w duej mierze dane potrzebne do zdefiniowania poczenia, a poniewa ich liczba jest dua, ograniczymy si do najbardziej naturalnego

124

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.7.
Tworzenie rda
danych dostpne
rodzaje sterownikw

rozwizania, czyli poczenia si z baz MS SQL Server. W tym przypadku najczciej jest stosowany sterownik Native klient (wersja 10. wskazuje na bazy 2005 lub
nowsze), ktry jest wartoci domyln podczas definiowania poczenia.
Po wybraniu sterownika dla bazy MS SQL Serwer na licie rozwijanej pojawi si nazwy
logiczne wszystkich serwerw zainstalowanych w domenie (lub grupie roboczej) (rysunek 5.8). Przy instalacji domylnej instancji bazy dziedzicz nazwy od komputera,
na ktrym zostan zainstalowane. Proces wykrywania i tworzenia tej listy moe by
do dugi.
Rysunek 5.8.
Tworzenie rda
danych wykryte
w domenie instancje
SQL Servera

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

125

Poza dokadnymi nazwami baz dostpne s rwnie nazwy symboliczne (local) oraz .
(kropka), wskazujce na serwer zainstalowany na tym samym komputerze. Wybr takiej
nazwy zamiast nazwy lokalnego komputera pozwala na zmniejszenie ruchu w sieci
podczas rozgaszania informacji dotyczcej da obsugi. W definicji poczenia naley
jeszcze poda sposb uwierzytelnienia, ktry moe by dziedziczonym po systemie operacyjnym albo wewntrznym systemem serwera bazy danych. W przypadku pierwszego typu nie s potrzebne adne dodatkowe informacje, poniewa s one pobierane
z biecego poczenia do systemu operacyjnego, w drugim naley poda nazw
uytkownika oraz jego haso. W pokazywanym przykadzie zastosowano uwierzytelnienie do bazy za pomoc domylnego superadministratora o nazwie sa (rysunek 5.9).
Ze wzgldu na pniejsz wygod podczas przetwarzania elementw zaproponowano
zapamitanie hasa w definicji poczenia, co w praktyce komercyjnej nie jest wskazane.
Pozostaje jeszcze zdefiniowanie rdowej bazy danych albo wskazanie pliku w przypadku, kiedy nie jest on zarejestrowany na serwerze. Tak zdefiniowane poczenie powinno zosta przetestowane.
Rysunek 5.9.
Tworzenie rda
danych wybr
trybu autoryzacji
oraz bazy danych

To poczenie jest wykorzystywane tylko jako inicjacja rzeczywistego poczenia.


Kolejnym krokiem jest wskazanie uytkownika, ktry rzeczywicie bdzie si czy
z baz Impersonation Information (rysunek 5.10). Moliwe jest:
wskazanie uytkownika zdefiniowanego po stronie systemu operacyjnego

wraz z hasem;
wskazanie uytkownika okrelonego w definicji acucha poczeniowego;

tego, ktry zosta wskazany w poprzednim kroku, bez wzgldu na wybrany


sposb autoryzacji;
zastosowanie danych biecego uytkownika systemu operacyjnego, co ma sens

tylko w przypadku autoryzacji dziedziczonej po Windows;


odziedziczenie danych po wybranych uytkownikach (grupach) systemu

operacyjnego.

126

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.10.
Tworzenie rda
danych wybr
uytkownika
uwierzytelnianego
w Analysis Services

W przykadzie zastosowano definicj uytkownika, ktry by definiowany na poziomie


testowania poczenia z serwerem. Naley pamita, e bdy definiowania sposobu
i danych autoryzacji spowoduj wystpienie bdw podczas prby przetwarzania dowolnego obiektu; takie przypadki bardzo czsto obserwowaem podczas prowadzenia zaj.
Ostatnim elementem pracy kreatora jest zaproponowanie nazwy logicznej tworzonego
poczenia (rysunek 5.11). Domylnie jest ona dziedziczona po nazwie bazy danych.
Dodatkowo okno dialogowe wywietla posta zdefiniowanego acucha poczeniowego, dobrze znan kademu programicie, ktry tworzy w jzykach wyszego rzdu oprogramowanie operujce na danych zawartych w bazie danych i wykorzystywa
jawnie lub niejawnie sterowniki OLE DB.
Rysunek 5.11.
Tworzenie rda
danych nazwa
logiczna poczenia
wraz z definicj
acucha
poczeniowego

Po utworzeniu rda danych moliwa jest jego modyfikacja dziki wybraniu opcji
View Designer z menu podrcznego uruchamianego prawym przyciskiem myszy przy
zaznaczonym uprzednio elemencie w strukturze drzewiastej Solution Explorer (rysunek 5.12). Przy okazji w prawej dolnej czci tego samego rysunku widoczny jest zestaw waciwoci rda danych.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

127

Rysunek 5.12.
Edycja rda danych

Po wybraniu wskazanej pozycji menu pojawia si dwuzakadkowe okno dialogowe,


pozwalajce w pierwszej zakadce, General, zmodyfikowa dane opisujce poczenie
z serwerem danych po wybraniu przycisku Edit (rysunek 5.13). Powoduje to przeniesienie akcji do okna takiego samego, jak pokazano wczeniej na rysunku 5.6. Takie
postpowanie ma czsto miejsce, kiedy przenosimy rozwizanie hurtowni na inny
komputer (studenci wicz to samo w laboratoriach i w domu). W praktyce stosowane jest
wtedy, kiedy przenosimy testowane na bazie treningowej rozwizania na serwer produkcyjny. Wykonane modyfikacje powoduj zmian zawartoci pola Connection string.
Rwnie w tym miejscu moemy ustali niepokazywane dotd atrybuty, takie jak:
poziom izolacji transakcji (domylna warto ReadCommited powoduje, e

do przetwarzania pobierane bd tylko rekordy z zatwierdzonych transakcji);


opnienie rozpoczcia przetwarzania zapytania (domylnie 0s brak

opnienia);
maksymalna liczba rwnolegych pocze ze rdem (domylnie 10);
opis rda danych pozwalajcy na precyzyjn, przyjazn dla uytkownika

definicj pochodzenia danych.


Druga zakadka, Impersonation Information, jest dokadn kopi okienka zaprezentowanego przy opisie tworzenia obiektu, przedstawionego na rysunku 5.9, dlatego
w tym miejscu zakadka ta nie bdzie ponownie przedstawiana ani omawiana.
Utworzon wczeniej wizualnie struktur rda moemy obejrze po wybraniu z menu
pozycji View Code. Tym razem jest ona prezentowana w postaci pliku XML (rysunek
5.14). Podstawowym jego elementem, tak samo jak w czci wizualnej, jest definicja
acucha poczeniowego oraz sposobu autoryzacji. Plik ten moe by edytowany zarwno z poziomu Analysis Services, jak i bezporednio z systemu operacyjnego.
Kolejnym krokiem jest utworzenie perspektywy rda danych. Jest to obiekt wskazujcy wszystkie elementy (tabele, perspektywy) niezbdne do tworzenia pozostaych
elementw hurtowni wymiarw, kostek, miar. Podobnie jak poprzednio, uruchomienie kreatora nastpuje po wybraniu odpowiedniego polecenia z menu podrcznego, ktre jest wywietlane po klikniciu prawego przycisku myszy (rysunek 5.15).

128

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.13.
Edycja rda danych
zakadka General

Rysunek 5.14. Widok kodu rda danych w postaci pliku XML


Rysunek 5.15.
Tworzenie
perspektywy rda
danych po stronie
hurtowni

Jak zaznaczono poprzednio, na rysunkach i w opisie pominito powitalne okienko kreatora. Pierwszym istotnym elementem jest okno (rysunek 5.16) pozwalajce na wybranie
jednego spord poprzednio zdefiniowanych rde danych. W naszym przypadku
dostpne jest tylko jedno, ktrego tworzenie niedawno zostao opisane. Moliwe jest
tu rwnoczesne zdefiniowanie nowego rda danych, kiedy ani jednego jeszcze nie
utworzylimy lub kiedy adne z dotychczasowych rde nie wskazuje odpowiedniego

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

129

Rysunek 5.16.
Tworzenie
perspektywy dla
rda danych
wybr rda

serwera lub bazy. Jak wida, definiowanie hurtowni mona zacz, od razu uruchamiajc
ten kreator, a poprzednio opisywane kroki bd wykonywane jako cz skadowa definiowania tego obiektu.
Po klikniciu przycisku Advanced mamy dostp do okna pozwalajcego na definiowanie zaawansowanych waciwoci poczenia (rysunek 5.17). Moliwe jest zdefiniowanie
schematu lub schematw (lista separowana rednikami), z ktrymi bdziemy si czyli.
Ma to sens, kiedy autoryzujemy si jako superadministrator, lecz nie wskazalimy w definicji rda nazwy bazy danych (tylko instancj serwera), albo kiedy chcemy pobiera dane z wielu schematw. Moliwy jest rwnie wybr midzy stanem, gdy relacje (klucze
obce) zdefiniowane po stronie transakcyjnej bd odzyskiwane po stronie hurtowni (stan
domylny), a stanem, w ktrym nie bd odzyskiwane wtedy relacje te bdziemy tworzy rcznie po stronie perspektywy rda danych na poziomie hurtowni.
Rysunek 5.17.
Tworzenie
perspektywy rda
danych wybr
rda opcje
zaawansowane

Kolejny etap to wybr rdowych tabel i perspektyw niezbdnych podczas tworzenia


pozostaych elementw (rysunek 5.18). Naley pamita, e tabele te powinny zapewnia moliwo zdefiniowania co najmniej jednego wymiaru oraz tabeli faktw.

130

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.18.
Tworzenie
perspektywy rda
danych wybr tabel

Ze wzgldw dydaktycznych w pierwszym etapie zdecydowano si na podejcie minimalistyczne. Dlatego wybrano trzy tabele: Towar i Kategorie, pozwalajce definiowa wymiar, oraz Transakcje, ktre definiuj tabele faktw. W tej ostatniej tabeli istnieje pole klucza, umoliwiajce poczenie wymiaru, i pole szt, na ktrym bdzie
oparte tworzenie podstawowej miary. Dodanie obiektu do definicji perspektywy jest
rwnowane przeniesieniu rdowego obiektu z lewego panelu dostpnych elementw do panelu prawego, wskazujcego na elementy definiujce perspektyw. Naley
zwrci uwag na moliwo dodania do definicji tabel poczonych z wybranym
elementem (Add Related Tables), jednak szafowanie tym mechanizmem prowadzi do
dodania wszystkich poczonych tabel, co moe przynie taki skutek, e w skrajnym
przypadku w definicji widoku znajd si wszystkie tabele schematu relacyjnego.
Kolejne okno przedstawia nazw logiczn perspektywy nazwa ta jest dziedziczona
po rdle danych i moe zosta zmieniona oraz elementy schematu relacyjnego
wchodzce w skad tej definicji (rysunek 5.19).
Po zakoczeniu pracy kreatora mamy dostpn graficzn prezentacj tworzonej struktury
(rysunek 5.20). Poniewa w stanie domylnym s odzyskiwane z definicji kluczy obcych referencje midzy tabelami, rwnie i tutaj maj swj odpowiednik graficzny
w postaci linii zakoczonej strzak. Zwrot strzaki moe by przy pierwszym spojrzeniu do mylcy. Zawsze wskazuje on na tabele bdc w relacji jeden do wielu
(1:N) po stronie jeden. Gdyby relacje nie byy odzyskiwane albo po stronie relacyjnej
nie zdefiniowano by kluczy obcych, w tym miejscu moemy je utworzy, przecigajc wskanikiem myszy midzy odpowiednimi polami. Pamitajmy, e ze wzgldu na
to, e kierunek strzaki okrela sposb realizacji poczenia, czenie powinno przebiega od tabeli faktw do tabel reprezentujcych dane niezbdne do utworzenia wymiarw. Gdy definiujemy wymiar, opierajc si na wikszej liczbie tabel, czenie
odbywa si od tabel najbardziej szczegowych w kierunku zawierajcych informacj
bardziej ogln (od najniszego poziomu hierarchii w gr). Jeli kierunek poczenia
zosta le zdefiniowany, rwnie w tym miejscu moemy go zmieni. To samo dotyczy
przypadku, kiedy poczone bd niewaciwe pola. Jest to jedyne miejsce po stronie
hurtowni danych, gdzie mamy moliwo wpywania na relacje midzy obiektami.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

131

Rysunek 5.19.
Tworzenie
perspektywy rda
danych nazwa
logiczna perspektywy

Rysunek 5.20.
Perspektywa rda
danych widok
struktury

Podobnie jak w przypadku rda danych, dostpna jest definicja perspektywy w postaci pliku XML (View Code) (rysunek 5.21). Plik ten moe by edytowany z poziomu systemu operacyjnego.

Rysunek 5.21. Perspektywa rda danych widok kodu w postaci XML

132

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tworzenie podstawowej struktury


hurtowni danych
Przejdmy do tworzenia waciwych elementw hurtowni, rozpoczynajc od wymiaru
(rysunek 5.22). Mamy dostpne opcje pozwalajce na zdefiniowanie zwykego wymiaru lub wymiaru poczonego (pozyskanego z poprzednio utworzonych). Zacznijmy od przypadku podstawowego, wybierajc opcje New Dimension.
Rysunek 5.22.
Tworzenie wymiaru

Pierwszym krokiem jest wybr sposobu tworzenia wymiaru (rysunek 5.23). Moemy
skorzysta z jednej z czterech opcji:
zastosowanie do definicji wymiaru istniejcej tabeli lub tabel schematu

relacyjnego (w ten sposb rwnie mog by tworzone wymiary czasu);


wygenerowanie wymiaru czasu z tabel wynikow tworzon po stronie

rdowej bazy danych;


wygenerowanie wymiaru czasu z tabel wynikow tworzon po stronie

hurtowni danych;
wygenerowanie wymiaru na podstawie dostpnego szablonu, co odpowiada

utworzeniu odpowiedniej, pustej tabeli po stronie serwera.


Najprociej jest zastosowa pierwsz opcj.
Rysunek 5.23.
Tworzenie wymiaru
wybr sposobu
tworzenia

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

133

Jeli jednak zdecydujemy si na wybr szablonu, to zauwaymy, e liczba szablonw


jest bardzo dua (rysunek 5.24). Wszystkie one zostay opracowane wedug potrzeb
analizy prezentowanych w bazie przykadowej AdwentureWorksDW.
Rysunek 5.24.
Tworzenie wymiaru
dostpne szablony
dla wymiarw
rnych
od wymiaru daty

Jeli zdecydowalimy si na wykorzystanie istniejcych elementw struktury relacyjnej, musimy wybra w pierwszym kroku perspektyw rda danych, a spord elementw w niej zawartych tabel lub perspektyw, ktra bdzie stanowia jej podstaw
(rysunek 5.25). Musi to by tabela definiujca najniszy poziom w hierarchii, a jednoczenie bezporednio poczona z tabel faktw, gdy musimy spord jej kolumn
wybra t, ktra bdzie okrelaa klucz gwny wymiaru. Wybierzmy wic tabel
Towar oraz pole klucza relacyjnego IdTowaru, ktre bdzie take kluczem tego wymiaru. Domylnie wybrana kolumna klucza staje si te kolumn zawierajc nazw
atrybutu. Jednak bdzie o wiele wygodniej (przejrzyciej) otrzyma na wywietlaczu
nazwy symboliczne zamiast posugiwa si numerami wierszy tabeli. Dlatego warto
zmieni kolumn nazwy na inn, w naszym przypadku na NazwaTowaru.
Rysunek 5.25.
Tworzenie wymiaru
wybr tabeli,
kolumny klucza
oraz kolumny nazwy

Jeeli w wybranej perspektywie rda danych istnieje tabela, do ktrej gwna tabela
definiujca wymiar jest poczona kluczem obcym, zostanie ona zasugerowana jako element, ktry moe wchodzi w definicje wymiaru (rysunek 5.26). W przykadzie z tabel

134

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.26.
Tworzenie wymiaru
tabele poczone
relacjami z tabel
rdow; rezygnujemy
z wykrytej
automatycznie tabeli,
aby pniej doda j
rcznie

Towar poczona jest w ten sposb tabela Kategorie. Poniewa chciabym jednak pokaza moliwo rcznego zdefiniowania kolejnych atrybutw wymiarw, anulowaem jej zaznaczenie. W przypadku zachowania stanu domylnego zostanie wygenerowany wymiar o wikszej liczbie atrybutw.
Poniewa pole IdTowaru wybrano jako klucz podstawowy wymiaru, zostao ono automatycznie zaznaczone jako wybrany atrybut (rysunek 5.27). Do wyboru mamy pozostae pola wystpujce w tabeli rdowej. Wyjtek stanowi pole NazwaTowaru,
ktre definiuje nazwy dla pl kluczy i dlatego nie jest uwzgldnione na licie. Bdzie
i tak wywietlane jako etykieta klucza. W realizowanym przykadzie nie zdecydowano si
na dodanie kolejnych atrybutw, poniewa nie nios one adnej wartociowej z punktu
widzenia definicji wymiaru i pniejszych analiz informacji. Naprawd chodzi o to,
aby w pierwszym etapie omawiania narzdzia pokaza moliwie najprostsz struktur.
W dalszej czci ksiki pokazane bd moliwoci wykorzystania innych pl.
Rysunek 5.27.
Tworzenie wymiaru
wybr atrybutw
(zrezygnowano
z atrybutu
IdKategorii)

Ostatnim etapem tworzenia struktury logicznej wymiaru jest wybr nazwy (rysunek
5.28), w stanie domylnym dziedziczonej po gwnej tabeli definiujcej wymiar. Dodatkowo w postaci drzewa pokazana jest jego struktura, w omawianym przypadku
zredukowana do pojedynczego atrybutu.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

135

Rysunek 5.28.
Tworzenie wymiaru
ustalenie nazwy
logicznej

W oknie edycyjnym, na zakadce Dimension Structure, reprezentujcej struktur wymiaru, widzimy obiekt rdowy pobrany z perspektywy danych (rysunek 5.29). Ponadto
pokazana jest w postaci drzewa struktura z zaznaczonym atrybutem klucza. Dostpne
jest rwnie okno definiowania hierarchii w tej chwili jeszcze puste. Poza t zakadk
dostpne s take: Attribute Relationships opisujca zalenoci midzy atrybutami
wymiaru, Translations pozwalajca na przypisanie nazw atrybutom dla rnych
jzykw, oraz Browser dajca moliwo obejrzenia przetworzonej struktury.
Rysunek 5.29.
Wymiar okno
edycji

Aby moliwe byo obejrzenie rzeczywistych danych, wymiar musi by najpierw


przetworzony naley klikn ikon Process, podobn do znaku recyklingu, ktra
jest dostpna na wikszoci zakadek. Na rysunku 5.30 zostao wskazane jej pooenie
na zakadce definiowania struktury logicznej.
Przetworzenie obiektu jest konieczne zarwno bezporednio po jego zdefiniowaniu, jak
i po kadej modyfikacji struktury logicznej. W pierwszym przypadku zawsze, a w drugim
zwykle struktura logiczna po stronie hurtowni nie jest zasilona danymi z poziomu relacyjnego (rysunek 5.31). Wymagane jest zatem zbudowanie struktury i dostarczenie
do nich danych deployment.

136

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.30.
Wymiar
przetworzenie

Rysunek 5.31.
Wymiar
konieczno pobrania
danych (deployment)

W czasie przetwarzania wywietlana jest animowana ikona, jak pokazano na rysunku


5.32. Jeli nie zakoczy si ono powodzeniem, wykonanie jakiegokolwiek kolejnego kroku nie jest moliwe. Najczstsz przyczyn takiego stanu rzeczy jest niewaciwa autoryzacja do danych relacyjnych, zwizana ze sposobem autoryzacji Impersonation
Information. Rzadziej s to inne bdy dotyczce konfiguracji projektu Analysis Services.
Rysunek 5.32.
Stan przetwarzania

Po pozytywnie zakoczonym poprzednim kroku (zielona ikona na rysunku 5.33) nastpuje waciwe przetwarzanie struktury wymiaru, rozpoczynajce si od pokazanego
okna dialogowego. Poza zainicjowaniem tego procesu przyciskiem Run moemy zmieni
ustawienia zwizanego z tym zadaniem przetwarzania wsadowego, usun obiekt ze
struktury hurtowni, jak rwnie przeprowadzi analiz Impact Analysis zalenoci
midzy przetwarzanym obiektem a innymi elementami projektu.
Uruchomienie procesu powoduje przejcie do wywietlenia postpu przetwarzania
w postaci rozwijajcego si drzewa czynnoci skadowych (rysunek 5.34). Mona zatrzyma proces w dowolnej chwili wystpuje zawsze drobne opnienie czasw
a ponadto uruchomi go ponownie, obejrze jego szczegy oraz skopiowa plan wykonania (mona to traktowa jako form dokumentacji lub skrypt, ktry mona uruchomi rcznie np. jako zadanie wsadowe uruchamiane zgodnie z harmonogramem
Scheduler). Zwrmy uwag, e najniszym w hierarchii elementem procesu jest pobieranie danych z poziomu tabeli zapytaniem wybierajcym SELECT. W przypadku
wymiaru pomijane s ewentualne duplikaty rekordw dziki zastosowaniu dyrektywy
DISTINCT.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

137

Rysunek 5.33.
Przetwarzanie
wymiaru

Rysunek 5.34.
Wymiar
opis procesu
przetwarzania (w tym
miejscu wywietlone
bd ewentualne
bdy)

Po przetworzeniu elementu konieczne jest rczne wymuszenie odwieania przez ponowne poczenie si ze struktur po stronie hurtowni Reconnect (rysunek 5.35). Obraz widziany przed tym krokiem w zakadce Browser jest pozostaoci po poprzednim przetworzeniu albo, jeli przetwarzamy pierwszy raz, przykadow struktur
wymiaru niezwizan z wymiarem rzeczywicie tworzonym, dostarczon przez twrcw oprogramowania.

138

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.35.
Wymiar po
przetworzeniu
konieczne jest
ponowne poczenie
(Reconnect)

Ponowne poczenie i odwieenie powoduje wywietlenie rzeczywistej struktury


ogldanego wymiaru (rysunek 5.36). Poniewa tworzony wymiar zawiera tylko jeden
element, wywietlana jest paska lista nazw towarw. Mona mwi o hierarchicznoci
w takim sensie, e dla kadego, nawet najprostszego wymiaru, takiego jak w przykadzie, tworzony jest element korzenia All, reprezentujcy wszystkie wartoci poziomu
poniej wszystkie towary. Pniej w przypadku przetwarzania kostki powoduje to
wyznaczenie wszystkich miar rwnie i dla tego zbiorczego poziomu podsumowanie cakowite.
Rysunek 5.36.
Wartoci w wzach
(atrybuty) wymiaru
Towar

Jeli po utworzeniu wymiaru chcemy do niego doda kolejne atrybuty czy poziomy
hierarchii, najczciej musimy przedtem doda do jego definicji kolejne tabele. W zakadce definicji struktury Dimension Structure, w obszarze definicji rda, gdy zaznaczona jest tabela definiujca ten wymiar, trzeba klikn prawym przyciskiem myszy,
aby wywietli menu podrczne (rysunek 5.37), w ktrym wystpuje pozycja Show
Related Tables (poka poczone tabele). Wybranie jej powoduje wywietlenie tabel
poczonych kluczem obcym z wybran tabel oraz tymi, z ktrymi wybrana tabela
jest poczona.
Rysunek 5.37.
Dodawanie tabeli
do definicji wymiaru
tabele powizane

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

139

Z reguy prowadzi to do pojawienia si nadmiarowych tabel, ktre nie s zwizane


z tworzonym wymiarem (rysunek 5.38). Aby nie wprowadza nadmiarowych danych,
wskazane jest usunicie ich z definicji, co moe by zrealizowane rwnie z menu
podrcznego przy zaznaczeniu ukrywanej tabeli (rysunek 3.37) pozycja Hide.
W przykadzie dotyczy to tabeli Transakcje, ktra bdzie wykorzystywana pniej jako tabela faktw.
Rysunek 5.38.
Dodane tabele
powizane
tabel Transakcje
naley ukry

Lepszym sposobem dodawania tabel jest wybranie pozycji Show Tables, ktra dostpna jest w menu podrcznym, gdy nie jest zaznaczona adna z tabel definiujcych
wymiar (rysunek 5.39).
Rysunek 5.39.
Dodawanie tabeli
do definicji wymiaru
wykaz tabel

Po tej akcji dostpne mamy wszystkie tabele zawarte w rdle danych po stronie hurtowni i jestemy w stanie wiadomie wybra tylko te, ktre s niezbdne (rysunek 5.40).
Wybr nadmiarowej liczby tabel nie prowadzi co prawda do bdw, ale powoduje,
e struktura wymiaru staje si mao czytelna. Poniewa chcemy doda poziom nadrzdny do ju istniejcego i opisujcego nazw towaru, dodajmy tabel Kategorie.
Po dodaniu waciwej tabeli pole definiujce kolejny atrybut naley przecign z definicji widoku do panelu przedstawiajcego Attributes (rysunek 5.41). W przykadzie
kolejnym atrybutem bdzie pole NazwaKategorii.
Po przetworzeniu i odwieeniu widoku na zakadce Browser s dostpne struktury dla
obu atrybutw. Jednak w dalszym cigu s to struktury paskie. Aby zbudowa struktur
wielopoziomow, niezbdne jest utworzenie hierarchii w panelu Hierarchies. Tworzona jest ona rwnie metod przecignij i upu (rysunek 5.42). Kolejno atrybutw w definicji nie jest przypadkowa. Powinny by one uoone od gry, od atrybutu opisujcego najoglniejszy zakres, przez wszystkie stany porednie, do atrybutu

140

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.40.
Dodawanie tabeli
do definicji wymiaru
z poziomu Show
Tables mona dokona
wiadomego wyboru

Rysunek 5.41.
Dodany drugi atrybut
wymiaru

Rysunek 5.42.
Tworzenie hierarchii
dla wymiaru
rwnie metod
przecignij i upu
(zmieniona zostaa
domylna nazwa
hierarchii)

opisujcego najbardziej szczegowy poziom wymiaru. W definicji hierarchii nie musi pojawi si atrybut reprezentujcy klucz. Dla jednego wymiaru moliwe jest utworzenie wicej ni jednej hierarchii. Wskazane jest dokonanie zmiany domylnej nazwy Hierarchy1 na tak, ktra lepiej odzwierciedli to, co jest ni opisywane, np.
Kategoria_towar. Na zrzucie ekranu w nazwie nie jest widoczny znak podkrelnika.
Gubienie tego znaku pojawia si czsto w czci wizualnej Analysis Services. Jeli
jednak spojrzymy na waciwoci hierarchii Properties, to zauwaymy, e nazwa zawiera
zgubiony znak. To samo dostrzeemy na zakadce Browser rysunek 5.43.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

141

Rysunek 5.43.
Wartoci atrybutw
dla hierarchii cz
wartoci kategorii ma
poziom podrzdny

Tym razem po przetworzeniu poza paskimi strukturami reprezentujcymi poziomy


atrybutw (Id Towaru, Nazwa Kategorii) mamy widoczn struktur o dwch poziomach Kategoria_towar, ktra w postaci czciowo rozwinitej zostaa przedstawiona
na rysunku 5.43. Paskie struktury s prezentowane przez ikony , a struktury hierarchiczne przez .
Ten krok koczy definiowanie pierwszego wymiaru. Poniewa pierwszy przykad ma
pokazywa metod tworzenia elementarnych obiektw, przejdmy do definicji kolejnego elementu, ktrym jest kostka Cube. Podobnie jak poprzednio, kreator uruchamiany jest z menu kontekstowego dla stanu wybranego w panelu Solution Explorer
nowo tworzonej klasy obiektu Cubes (rysunek 5.44).
Rysunek 5.44.
Tworzenie kostki

Kreator oferuje trzy metody generowania tej struktury (rysunek 5.45):


na podstawie istniejcych tabel perspektywy rda danych;
tworzenie pustej kostki;
tworzenie obiektu z wykorzystaniem szablonw wybranie szablonu (None)

jest rwnowane drugiej pozycji, generowaniu pustej struktury.


Dostpne w kreatorze szablony wskazuj rwnie na pochodzenie ich z przykadowej
bazy MS Adventure Works Enterprise i Standard Edition. Kolejnym krokiem w przypadku wyboru pierwszej metody tworzenia kostki jest wskazanie tabeli (tabel) faktw
(rysunek 5.46). Dostpne s obiekty ze wszystkich zdefiniowanych dotd perspektyw

142

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.45.
Tworzenie kostki
metody

Rysunek 5.46.
Wybr tabeli faktw

rda danych. Naley pamita o tym, e powinnimy wybiera to rdo, w ktrym


zdefiniowane s relacje midzy tabelami reprezentujcymi wymiar a tabel faktw.
Wynika std, e obiekt stanowicy tabel faktw musi mie zdefiniowane pola klucza
obcego, pozwalajce na poczenie najniszego poziomu w hierarchii kadego stosowanego wymiaru. Poza tym musi istnie pole klucza podstawowego oraz przynajmniej jeden atrybut numeryczny, ktry bdziemy sumowa. Wszystkie postulaty spenia tabela Transakcje. Jeli mamy wtpliwoci, system moe zasugerowa nam wybr
przycisk Suggest.
Kolejnym etapem jest wybr miar dla kostki. Kreator podpowiada, e sumy maj by
wyznaczone dla wszystkich atrybutw numerycznych poza tymi, ktre wyznaczaj
klucz podstawowy tabeli faktw lub s kluczami obcymi do pozostaych tabel rda
danych. Ponadto dla klucza podstawowego jest wyznaczana funkcja COUNT zliczajca
liczb rekordw w tabeli faktw. Poniewa wyznaczanie sumy wartoci pola IdFaktury
ktre jest kluczem obcym do tabeli Faktury, niewystpujcej w rdle danych, ale
jest elementem bazowego schematu relacyjnego nie ma adnego praktycznego
uzasadnienia, miara ta zostaa usunita z wykazu miar, ktre byy podpowiedzi zaproponowan przez kreator (rysunek 5.47).

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

143

Rysunek 5.47.
Wybr miar

Po wybraniu atrybutw definiujcych miary powinnimy podj decyzj, ktre zdefiniowane wymiary bd wchodziy do definicji kostki. Poniewa do tej pory utworzony zosta jeden wymiar, tylko on jest zawarty w oknie podpowiedzi (rysunek 5.48).
Gdyby w definicji perspektywy rda danych istniay dodatkowe tabele poczone
kluczem obcym z tabel faktw, lecz niestanowice podstawy dla istniejcych wymiarw, kreator zaproponowaby ich automatyczne utworzenie. Oczywicie zaznaczenie tej
sugestii rwnie mona anulowa i ograniczy si tylko do ju utworzonych obiektw
tego typu.
Rysunek 5.48.
Wybr wymiaru

Ostatnim elementem tworzenia kostki jest wybranie jej nazwy, ktra domylnie jest
dziedziczona po nazwie perspektywy rda danych i oczywicie moe, a nawet powinna
zosta zmieniona (rysunek 5.49). Dodatkowo prezentowana jest struktura kostki w postaci
drzewa atrybutw, ktre zawiera miary i wymiary wchodzce w jej skad.
Tak samo jak w przypadku poprzednich elementw dostpny jest graficzny wielozakadkowy edytor kostki. Pierwsza zakadka, Cube Structure, zostaa pokazana na rysunku 5.50. W prawym panelu pokazana jest struktura kostki na poziomie rde danych.

144

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.49.
Definicja kostki
ostatni krok
pracy kreatora

Rysunek 5.50. Kostka widok edytora z domyln nazw Baza Relacyjna odziedziczon po nazwie
perspektywy rda danych

Tabela (tabele) faktw jest zaznaczona kolorem tym, a tabele definiujce wymiary
kolorem niebieskim; zostay rwnie pokazane relacje midzy elementami skadowymi. Naley zauway, e w tym miejscu nie mog by one edytowane. W dwch
panelach lecych po lewej stronie pokazano miary zdefiniowane na kostce i wymiary
wraz z ich atrybutami. Zarwno w jednym, jak i drugim moemy dokonywa modyfikacji przez dodanie elementu do definicji kostki lub jego usunicie.
Poniewa domylne nazwy kostek s dziedziczone po nazwach perspektyw rda
danych, pierwsza z utworzonych otrzyma nazw Baza Relacyjna, a kolejne Baza Relacyjna n, gdzie n jest kolejnym numerem rozpoczynajcym si od 1. Aby uzyska
lepsze skojarzenie obiektu z jego zawartoci, nazwa tej kostki zostaa zmieniona na
Zysk. Mona tego dokona, zaznaczajc nazw w oknie Solution Explorer i wpisujc
now albo korzystajc z podrcznego menu (prawy przycisk myszy) i wybierajc jedn z dwch opcji Rename lub Properties. Na podobnych zasadach dokonujemy
zmian nazw innych obiektw w hurtowni.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

145

Po utworzeniu, ale rwnie po kadej modyfikacji struktury kostka musi zosta przetworzona, tak jak to miao miejsce w przypadku wymiaru. Szczegy tego procesu pokazuje rysunek 5.51. Podobnie jak poprzednio, najbardziej elementarnym procesem jest
tutaj pobranie danych z obiektu rdowego. W przypadku bdw przetwarzania komunikaty i informacje o przyczynach ich powstania pojawiaj si rwnie w tym oknie
dialogowym. Gdyby przy okazji przetwarzania kostki stwierdzono, e nie zosta przetworzony jakikolwiek z wymiarw wchodzcych w skad jej definicji, proces przetwarzania
kostki zawieraby przetwarzanie kadego z tych elementw. Mona zatem wnioskowa,
e przetwarzanie wymiarw jak samodzielnych struktur moe by zastpione przez
przetwarzanie ich przy okazji przetwarzania obiektw nadrzdnych, jakimi s kostki.
Rysunek 5.51.
Elementy skadowe
w procesie
przetwarzania kostki

Po wykonaniu przetwarzania moliwe jest obejrzenie wartoci miar zgodnie ze zdefiniowanymi atrybutami wymiarw na zakadce Browser (rysunek 5.52). Zazwyczaj po
wykonaniu przetworzenia konieczne bdzie jeszcze wykonanie operacji odwieenia
wynikw przez wybranie opcji Reconnect, ktra powoduje ponowne poczenie z wynikow, przetworzon struktur po stronie hurtowni. Operacja ta nie ma nic wsplnego
z poczeniem ze rdow struktur relacyjn. Lewy panel zawiera logiczn definicj
kostki miary i wymiary. Prawy jest form tabeli przestawnej, do ktrej elementy j
definiujce mog by dodawane za pomoc techniki przecignij i upu. Kolumny
i wiersze oraz pola filtru mog by definiowane przez atrybuty lub hierarchie wymiarw. Centraln cz definiujc wartoci komrek tabeli przestawnej stanowi przynajmniej jedna miara; moliwe jest dodanie wielu miar. Filtr globalny jest okrelany
na podstawie zbioru atrybutw, ktrego definiowanie zostanie pokazane w dalszej
czci ksiki. Usuwanie elementw z tabeli przestawnej polega na przecigniciu ich
poza obszar prawego panelu.
W przykadzie dla przetworzonej kostki pokazano sum sprzedanych towarw, wymiar
zdefiniowano przez wybranie hierarchii, w przypadku ktrej nie zosta rozwinity dla
adnego z atrybutw poziom kategorii, ukazujcy elementy podrzdne reprezentujce
konkretny towar. Cao uzupeniono o wyznaczan w stanie domylnym sum kocow, reprezentujc cao sprzeday liczon w sztukach kadego z towarw.

146

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.52.
Zawarto kostki
po przetworzeniu

Modyfikacja struktury hurtowni danych


Pomimo penej funkcjonalnoci utworzonych poprzednio struktur naley krytycznie
stwierdzi, e trzeba je okreli jako mao funkcjonalne, naiwne z punktu widzenia
praktycznego zastosowania. Dlatego w kolejnych krokach sprbujemy utworzy bardziej zoone, w peni funkcjonalne rozwizania. Pierwszym krokiem jest zmiana danych definiujcych perspektyw rda danych.
W edytorze graficznym moemy doda kolejne obiekty rdowe, korzystajc z menu
kontekstowego uruchamianego prawym przyciskiem myszy (rysunek 5.53). Pierwsz
pozycj jest w nim New Named Query; wywoanie jej spowodowaoby przeniesienie
do narzdzia analogicznego do tego, ktre pozwala na definiowanie perspektyw po
stronie relacyjnego serwera bazy danych. Tym razem obiekt utworzyby si po stronie
hurtowni. Menu to umoliwia rwnie utworzenie nowej relacji. Skorzystajmy jednak
z pozycji drugiej, pozwalajcej na dodanie obiektw ze strony relacyjnej.
Rysunek 5.53.
Dodanie do
perspektywy rda
danych dodatkowych
rde danych
(perspektywy
lub tabele)

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

147

Podobnie jak w przypadku tworzenia od podstaw perspektywy rda danych, pojawia


si okno dialogowe przedstawione na rysunku 5.54. W jego lewym panelu widoczne s
wszystkie tabele i perspektywy wystpujce po stronie relacyjnej, lecz nieprzeniesione na
stron hurtowni, natomiast w prawym te, ktre ju tam trafiy. Przeniemy wszystkie
obiekty z wyjtkiem tabel Faktury i Zarobki oraz tabeli systemowej sysdiagrams.
Rysunek 5.54.
Dodane obiekty
do perspektywy
rda danych

Dodanie wskazanych tabel i perspektyw jest widoczne w edytorze rda w postaci


przedstawionej na rysunku 5.55. Poniewa dla perspektyw nie s definiowane klucze obce
do tabel schematu relacyjnego, oba zaimportowane obiekty tego typu nie s poczone z adnym z pozostaych. Dodajmy teraz relacje midzy tabel faktw, ktr ma
stanowi perspektywa Wszystkie_transakcje, a pozostaymi elementami, wykorzystujc pola identyfikatorw (IdTowaru, IdOsoby, IdKlienta). Naley pamita, e wizualne tworzenie relacji rozpoczynamy zawsze od tabeli faktw do pl kluczy gwnych
tabel reprezentujcych najnisze poziomy hierarchii przewidywanych wymiarw.

Rysunek 5.55. Diagram perspektywy rda danych (przed zdefiniowaniem zcze z perspektywami)

148

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Kolej na poczenie tabeli faktw z perspektyw czas, ktra bdzie wykorzystywana


do tworzenia odpowiedniego wymiaru. Polem czcym po obu stronach relacji jest
pole DataNum, ktre zawiera dat przeksztacon na liczb. Zauwamy, e w perspektywie Wszystkie_transakcje pole IdTransakcji zostao oznaczone jako klucz podstawowy, poniewa jest kluczem podstawowym najbardziej elementarnej tabeli definiujcej widok, natomiast w perspektywie czas klucz podstawowy nie zosta zaznaczony,
co wynika z faktu, e adne z pl nie odwouje si do klucza podstawowego tabeli. Podczas tworzenia zczenia midzy perspektywami Wszystkie_transakcje i czas pojawi
si komunikat przedstawiony na rysunku 5.56, sugerujcy ustawienie logicznego klucza
podstawowego dla perspektywy czas. Potwierdzenie komunikatu spowoduje, e klucz
ten zostanie zdefiniowany na jedynym polu, ktre zawiera wartoci unikalne DataNum.
Rysunek 5.56.
Komunikat podczas
czenia perspektyw
Wszystkie_transakcje
i czas

Peny, uporzdkowany diagram rda danych dla wszystkich tabel i perspektyw przedstawia rysunek 5.57. Przejdmy do tworzenia kolejnych elementw hurtowni danych.
Pierwszym z nich bdzie wymiar opierajcy si na tabeli Osoby. Po standardowym
procesie tworzenia wynikajcym z pracy kreatora otrzymujemy wymiar zawierajcy
dwa atrybuty: IdOsoby (klucz podstawowy) i IdSzefa. Ten drugi ustala hierarchi
podporzdkowania pracownikw swoim przeoonym, ktrzy rwnie s pracownikami firmy (samozczenie). Dlatego przypisany do tego atrybutu sposb uycia, ktrego warto domylna to Regular, zamiemy na Parent (rysunek 5.58).
Rysunek 5.57.
Peny uporzdkowany
diagram perspektywy
rda danych

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

149

Rysunek 5.58.
Definiowanie rodzica
dla wymiaru
Osoby_hierarchia

Na skutek takiej zmiany waciwoci atrybutu IdSzefa zmienia si rwnie jego posta graficzna patrz ikona na rysunku 5.59.
Rysunek 5.59.
Struktura wymiaru po
wybraniu waciwoci
Parent dla atrybutu
IdSzefa

Konsekwencja jest gboka i nie ogranicza si do wizualizacji struktury logicznej.


Przede wszystkim poza pask struktur atrybutu klucza generowana jest niejawnie
hierarchia wynikajca z realizacji samozczenia. Ten stan zosta zilustrowany na rysunku 5.60, przedstawiajcym zakadk Browser w edytorze tego wymiaru. Na podkrelenie zasuguje to, e w wymiarach typu Rodzic Potomek tworzenie jawnie jakichkolwiek dodatkowych hierarchii jest niedozwolone. Wywietlanie nazwisk pracownikw
zamiast wartoci klucza wynika z faktu, e wzorem wymiaru Towar polu klucza IdOsoby przypisano kolumn nazw Nazwisko. Podobnie jak w innych strukturach, take
i w tej istnieje obiekt nadrzdny (root) o domylnej nazwie All oraz atrybut Unknown,
reprezentujcy te atrybuty, ktre mog wystpowa w kostce, a nie s zdefiniowane
po stronie wymiaru i wartoci NULL.
Rysunek 5.60.
Wygld danych
wymiaru po
przetworzeniu
(struktura czciowo
rozwinita)

150

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Kolejnym wymiarem, ktry zostanie utworzony, jest wymiar czasu oparty na zdefiniowanej na pocztku rozdziau perspektywie czas. Postpowanie jest podobne jak przy tworzeniu dowolnego innego wymiaru bazujcego na obiekcie relacyjnym (rysunek 5.61). Jedyny wyjtek stanowi to, e nie zdecydowano si na przypisanie kolumnie klucza
DataNum pola definiujcego nazwy, wychodzc z zaoenia, i by moe bdzie on
wykorzystywany do budowy hierarchii. Atrybutami wymiaru s wszystkie pola widoku reprezentujce rok, kwarta, miesic i dat.

Rysunek 5.61. Definiowanie wymiaru czasu jako wymiaru bazujcego na tabeli lub perspektywie
schematu relacyjnego

Dla takiej definicji wymiaru bdzie utworzona automatycznie hierarchia zawierajca


wszystkie wybrane atrybuty, uoone w kierunku od najoglniejszego, Rok, a do
najbardziej szczegowego, DataNum pole klucza. Poniewa w wikszoci analiz
wystarczajce jest uzyskanie wynikw na poziomie opisujcym miesic, najbardziej
szczegowe pole z tej struktury zostao usunite (rysunek 5.62). Daje to jednak moliwo przywrcenia go w przyszoci. Moliwe jest rwnie utworzenie drugiej hierarchii, ktra bdzie zawieraa tylko dwa poziomy: Rok i Miesic.
Rysunek 5.62.
Definicja wymiaru
czasu opartego
na perspektywie
w widoku Dimension
Structure

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

151

Przetworzenie tak zdefiniowanego wymiaru prowadzi do powstania struktury, ktra bdzie wywietlana na zakadce Browser (rysunek 5.63). Naley zwrci uwag, e dane w utworzonym wymiarze nie rozpoczynaj si od pierwszego miesica pierwszego
roku. Wynika to z tego, e nasza firma rozpocza dziaalno od trzeciego miesica
2000 roku i wczeniejszych wpisw w tabeli rdowej nie ma. Gdyby w trakcie
funkcjonowania firmy doszo do czasowego zawieszenia jej dziaalnoci, daty z tego
przedziau tak samo nie pojawiyby si w wymiarze.
Rysunek 5.63.
Wymiar czasu
po przetworzeniu
(hierarchia czciowo
rozwinita)

Konkurencyjnym podejciem do tworzenia wymiaru czasu jest oparcie si na jednym


z dwch szablonw, ktre oferuje kreator (rysunek 5.22). Moemy utworzy rzeczywisty wymiar czasu na poziomie wyjciowego schematu relacyjnego albo na serwerze,
w hurtowni danych. Przetestujmy drug z tych propozycji. W pierwszym kroku musimy dokona wyboru kilku statycznych wartoci parametrw (rysunek 5.64). O ile
wybr pierwszego dnia tygodnia czy poziomw generowanej hierarchii nie budzi
wikszych emocji, o tyle zakres dat reprezentujcych pocztek i koniec generowanego kalendarza nie jest ju tak oczywisty. Przede wszystkim podjcie decyzji wymaga
znajomoci danych, a to wymusza przeprowadzenie ich wstpnej analizy. Ponadto
wyznaczenie statycznie koca wymaga regularnego modyfikowania i regenerowania
wymiaru. Mona oczywicie zaoy duy zapas dat, ale to pociga za sob wygenerowanie duej struktury danych, a i tak nie wyklucza koniecznoci czasowego jej regenerowania. Wybr jzyka opisu miesicy jest rwnie ograniczony i, jak si atwo
domyli, nie zawiera polskich nazw.
Nastpnie musimy ustali rodzaj kalendarza (rysunek 5.65). Tylko kalendarz regularny rozpoczyna si pierwszym dniem roku kalendarzowego 1 stycznia. W praktyce
przemysowej pocztek okresu rozliczeniowego nie musi si pokrywa z pocztkiem
roku kalendarzowego, std w trzech typach (Fiscal, Reporting, Manufacturing) data
ta moe by dowolnie ustalona. W ostatnim typie ISO 8601 pierwszy dzie roku wynika z ustale normalizacyjnych. Szczegowy opis kalendarzy zawiera tabela 5.1.

152

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.64.
Definiowanie
elementw
wymiaru czasu

Tabela 5.1. Rodzaje kalendarzy


Rodzaj kalendarza

Opis

Standard

Klasyczny dwunastomiesiczny kalendarz gregoriaski rozpoczynajcy si


od 1 stycznia i koczcy si 31 grudnia.

Fiscal

Kalendarz dwunastomiesiczny pozwalajcy na ustalenie dnia i miesica


rozpoczynajcego okres rozliczeniowy jako dowolnej daty klasycznego
kalendarza.

Reporting

Kalendarz dwunastomiesiczny pozwalajcy na ustalenie dnia i miesica


rozpoczynajcego okres rozliczeniowy jako dowolnej daty klasycznego
kalendarza. Dodatkowo definiowany jest wzorzec dla miesicy w kwartale
445, 454 lub 544, w ktrym liczby reprezentuj ilo tygodni
w kolejnych miesicach (wzorzec jest powtarzany dla kadego kwartau).

Manufacturing

Kalendarz skadajcy si z trzynastu 28-dniowych miesicy, dzielony


na cztery kwartay (trzy trjmiesiczne i jeden czteromiesiczny). Mona
wyznaczy tydzie i miesic rozpoczynajcy rok. Naley rwnie wskaza,
ktry z kwartaw ma cztery miesice.

ISO 8601

Kalendarz zgodny z zasadami The International Organization for


Standardization (ISO) w standardzie (8601), oparty na kalendarzu
gregoriaskim. Pierwszy tydzie jest okrelony przez pierwszy tydzie
kalendarza gregoriaskiego, zawierajcy czwartek.

Po wyborze wskazanych poprzednio parametrw wyjciowych generowana jest struktura


logiczna atrybutw oraz podstawowa hierarchia, przedstawiona na rysunku 5.66. Proces przetwarzania powoduje utworzenie po stronie hurtowni struktury tabelarycznej,
zapisywanej kolejnymi datami: dniami, miesicami, kwartaami, latami zgodnie
z definicj logiczn atrybutw. Jest to rzeczywista struktura fizyczna, ktra zajmuje
przestrze na dysku. Z przyczyn praktycznych jedyn modyfikacj tej struktury bdzie usunicie poziomu Date z hierarchii, poniewa jest to poziom w praktyce biznesowej za bardzo szczegowy.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

153

Rysunek 5.65.
Definiowanie typu
kalendarza

Rysunek 5.66.
Pena definicja
rzeczywistego
wymiaru czasu
wedug kalendarza
standardowego

Operacja przetworzenia struktury logicznej wymiaru z rysunku 5.66 prowadzi do powstania struktury fizycznej, ktrej widok na zakadce Browser w postaci czciowo
rozwinitego drzewa przedstawia rysunek 5.67. Naley zauway, e dostpne s
rwnie struktury paskie dla wszystkich atrybutw definicji. Sposb ich opisywania
jest bardziej zoony ni w przypadku wymiaru czasu otrzymanego bezporednio
z tabeli lub perspektywy. Nie jest jednak trudno sobie wyobrazi tak utworzon perspektyw po stronie relacyjnej, dokadnie odpowiadajc etykietom atrybutw prezentowanych przy okazji tego rodzaju wymiaru. Mona powiedzie, e dowd tego
jest prosty, ale nie mieci si na marginesie tych rozwaa, i wcale nie jest to problem
na miar twierdzenia Fermata, ktry napisa tak (Znalazem zaiste zadziwiajcy dowd tego twierdzenia. Niestety, margines jest zbyt may, by go pomieci), majc na
uwadze swoje tzw. due twierdzenie (dla liczby naturalnej n > 2 nie istniej takie
liczby naturalne x, y, z, ktre speniayby rwnanie xn + yn = zn).

154

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.67.
Dane wymiaru
po przetworzeniu
(hierarchia czciowo
rozwinita)

Po utworzeniu tego zestawu wymiarw sprbujmy skonstruowa kostk, ktra bdzie


w pierwszym etapie zawiera trzy pierwsze z nich, tzn. Towar_kategoria (hierarchia
dwupoziomowa), Osoby (Rodzic Potomek) oraz Czas (wymiar czasu oparty na tabeli).
Struktura tak opracowanego obiektu widniejca w edytorze jest przedstawiona na rysunku 5.68. Naley zwrci uwag na to, e o ile tabela faktw ma nazw Wszystkie_transakcje, o tyle zaproponowana przez kreator nazwa grupy miar to Wszystkie
Transakcje. Niestety, wydaje si, e zasady tworzenia nazw przyjaznych dla uytkownika
s w Analysis Services niedoskonae. Jeeli w nazwie obiektu rdowego pojawia si
separator w postaci podkrelnika, zamieniany jest on na spacj w propozycji domylnej nazwy obiektu docelowego. Rwnie jeli nazwa zoona z kilku wyrazw, pisanych cznie, zawiera due litery, to przed kad z nich proponowana jest spacja. Takie postpowanie kci si z oglnie przyjt zasad, wedug ktrej nazwy obiektw
nie powinny zawiera spacji ani narodowych znakw diakrytycznych. Oczywicie
mgbym dokona zmiany nazwy na zgodn z tymi wytycznymi. Nie zrobiem tego
jednak, aby pokaza skutki stosowania nazw proponowanych przez system. Bdzie to
miao szczeglne znaczenie przy omawianiu zapyta MDX. Niestety, prowadzi to
czasami do niejednoznacznoci w opisie. Natomiast podczas budowania wasnych
rozwiza, zwaszcza dla celw komercyjnych, warto cile przestrzega regu nazewniczych, co moe sprowadza si do usuwania spacji albo zastpowania ich podkrelnikami czyli by powrotem do wyjciowych nazw obiektw rdowych.
Przetworzenie tak zorganizowanej kostki daje moliwo odczytania wartoci miar dla
dowolnych spord zdefiniowanych atrybutw wymiaru w zakadce Browser. W przykadzie na rysunku 5.69 zdecydowano si na przedstawienie wynikw dla wymiarw Czas
i Towar. Hierarchi Rok_kwartal_miesiac zastosowano do opisu wierszy, a hierarchi
Kategoria_towar do opisu kolumn. W komrkach pokazano wyniki dla miar Wartosc
i Ilosc. Wywietlone zostay kocowe kolumny tabeli przestawnej, aby pokaza, e
w stanie domylnym sumy kocowe wyznaczane s zarwno dla kolumn, jak i wierszy.
W definicji kostki mamy podane dwa alternatywne wymiary reprezentujce daty. Pierwszy, dotd wykorzystywany, jest oparty na danych zawartych w tabeli Faktury, o nazwie
czas, formalnie zasilony za porednictwem perspektywy o tej samej nazwie. Drugi, o nazwie Time, jest utworzony po stronie hurtowni danych za pomoc wbudowanego generatora i nie jest zwizany z adnym obiektem po stronie relacyjnej. Sprbujmy dokona ich zamiany w ten sposb, e najpierw usuniemy dotd stosowany wymiar
czas, a nastpnie dodamy now definicj Time. Obie operacje dostpne s z poziomu
menu kontekstowego. Na rysunku 5.70 pokazano stan podczas dodawania wymiaru.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

155

Rysunek 5.68.
Definicja kostki
z trzema wymiarami

Rysunek 5.69. Widok kostki po przetworzeniu (koniec tabeli przestawnej wzgldem kategorii produktu)
Rysunek 5.70.
Po usuniciu wymiaru
czasu uytkownika
dodajemy rzeczywisty
wymiar czasu

Po tym kroku moglibymy waciwie uzna, e wszystkie niezbdne czynnoci zostay wykonane. Po zamianie prba przetworzenia kostki, ktr jestemy zobowizani
wykona po kadej modyfikacji, powinna zakoczy si sukcesem. Jednak jeli sprbujemy obejrze dane w zakadce Browser, okae si, e wszystkie komrki zawieraj tak sam warto, rwn sumie cakowitej. Oznacza to, e stany porednie wymiaru
zostay le przetworzone. Najczstsz przyczyn takiego stanu rzeczy jest brak definicji poczenia wymiaru z tabel faktw. Niestety, tabela reprezentujca czas zostaa

156

Hurtownie danych. Od przetwarzania analitycznego do raportowania

utworzona po stronie hurtowni i nie moe by dodana do perspektywy rda danych,


a tylko w tym miejscu dokonywalimy dotd modyfikacji relacji. Z pomoc przychodzi nam tym razem zakadka Dimension Usage w edytorze kostki (rysunek 5.71).
Rysunek 5.71.
Niezdefiniowana
relacja dla dodanego
wymiaru

Jak wida, jedyna komrka reprezentujca poczenie wymiaru Time z tabel faktw
Wszystkie_transakcje jest pusta. Naley zwrci uwag na to, e poczenie graficznie
jest przedstawione nie przez fakty, ale za pomoc grupy miar. Powoduje to rnice
w nazwie, sprowadzajce si do zastpienia podkrelnika spacj i zmiany na du liter pierwszego znaku drugiej czci nazwy Wszystkie Transakcje. Przyczyn tego
omwiono przy przedstawianiu budowy podstawowej struktury tej kostki. Wybranie
jej mysz przenosi nas do kolejnego okna dialogowego, w ktrym moemy dokona
definicji relacji (rysunek 5.72). Wybrany zosta typ relacji Regular, ktry odpowiada
bezporedniemu poczeniu wymiaru z kostk. Atrybutem wyznaczajcym minimaln
granulacj wymiaru czasu jest pole Data, ktre czy si z polem DataNum. Nie mona jawnie wybra nazwy pola po stronie kolumn wymiaru, poniewa tabela ta istnieje
tylko w hurtowni, std informacja Server Provided.
Rysunek 5.72.
Dodanie relacji
dla wymiaru Time

Tym razem przetworzenie kostki prowadzi do uzyskania poprawnych wynikw, ktre


przedstawiono w widoku Browser na rysunku 5.73. Formalna posta otrzymanych
wynikw oraz wartoci w komrkach s zgodne z tymi, ktre otrzymano dla wymiaru
czasu opartego na tabeli schematu relacyjnego.
Podczas definiowania powizania midzy wymiarem a tabel faktw istnieje moliwo zdefiniowania innych typw relacji. Zostay one przedstawione w tabeli 5.2.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

157

Rysunek 5.73. Widok kostki po przetworzeniu i odwieeniu (Reconnect)


Tabela 5.2. Wybr rodzaju relacji
Typ relacji

Opis

No Relationship

Relacja midzy wymiarem a tabel faktw nie jest zdefiniowana.

Regular

Bezporednie poczenie wymiaru za pomoc pola klucza podstawowego


do pola klucza obcego tabeli faktw.

Fact

Obsuguje przypadek, kiedy wymiar jest definiowany za pomoc czci


atrybutw tabeli faktw.

Referenced

Porednie poczenie wymiaru za pomoc pola klucza podstawowego do pola


klucza obcego wymiaru poredniego. Nastpnie przez klucz gwny wymiaru
poredniego do klucza obcego tabeli faktw.

Many-to-Many

Porednie poczenie wymiaru za pomoc pola klucza podstawowego do pola


klucza obcego poredniczcej tabeli faktw. Nastpnie przez klucz gwny
obiektu poredniego do klucza obcego gwnej tabeli faktw.

Data Mining

Definiuje poczenie do tabeli odgrywajcej rol objaniajc w algorytmie


zgbiania danych.

W zasadzie ten zakres typw wymiarw wyczerpuje wszystkie moliwoci, ktre oferuje
MS Analysis Services. Jednak aby moliwe byo przewiczenie zdobytych umiejtnoci na innych wymiarach, przedstawi kilka rnych moliwoci. Komentarz ograniczony
bdzie do minimum, prezentowane bd tyko struktury logiczne i wyniki otrzymane
po przetworzeniu kadego wymiaru. Pierwszym przykadem jest wymiar Klienci, ktry
pozwala okreli lokalizacj kadego klienta na dwch poziomach hierarchii (Wojewodztwo, Miasto) oraz dane personalne ograniczone do nazwiska (rysunek 5.74).
Kolejny wymiar (rysunek 5.75) definiuje dwupoziomow hierarchi opisujc przyporzdkowanie pracownikw firmy (tabela Osoby) do struktury organizacyjnej (tabela
Dzialy).
Nastpny wymiar nie jest de facto nowym obiektem, lecz tylko rozwiniciem istniejcego wymiaru Towar. Do istniejcej struktury definiujcej obiekty rdowe zostay
dodane trzy tabele definiujce producenta towaru oraz lokalizacj geograficzn firmy:

158

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.74. Wymiar Klienci z hierarchi Woj_miast_klient, wojewdztwa, miasta, klienci


struktura logiczna i dane po przetworzeniu

Rysunek 5.75. Wymiar Osoby_dzialy struktura logiczna i dane po przetworzeniu

Miasta, Wojewdztwa. Do istniejcej hierarchii Kategoria_towar dodano drug, bardziej rozbudowan, woj_miasto_prod_towar, wykorzystujc atrybuty z dodanych tabel.
Definicj tego wymiaru przedstawia rysunek 5.76, a skutek przetworzenia rysunek 5.77.
W celu odrnienia tego wymiaru od obiektu podstawowego zmieniono jego nazw
na Towar_calosc.
Rysunek 5.76.
Wymiar towaru
z dwoma hierarchiami

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

159

Rysunek 5.77.
Wymiar towaru
z czciowo
rozwinit hierarchi
o czterech poziomach

Zdefiniowano kostk Zyski; w definicji zostay wykorzystane wymiary Osoby_hierarchia,


Time, Klienci i Towar_calosc. Wyznaczono miary okrelajce sumy sprzedanego towaru,
warto sprzeday i warto zakupu. Dodatkowo zliczane s wszystkie transakcje.
Struktura tego obiektu jest pokazana na rysunku 5.78. Moliwe jest dodanie do niego
zarwno wymiaru Czas, jak i wymiaru Dzialy_osoby.

Rysunek 5.78. Pena struktura kostki Zyski

Wyniki przetworzenia kostki Zyski s przedstawione na rysunku 5.79. Struktura ta zostaa opisana do szczegowo, pomimo e uwany Czytelnik byby w stanie bez
trudnoci utworzy j samodzielnie. Jednak uwaaem za stosowne nieco nadmiarowo
potraktowa ten element ze wzgldu na to, e bd odwoywa si do niego podczas
dalszych rozwaa, w szczeglnoci podczas prezentacji wielowymiarowego rozszerzenia jzyka zapyta MDX SQL.

160

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.79. Kostka Zyski po przetworzeniu z wywietlonymi atrybutami jednej z komrek

Kostka o strukturze patka niegu


Jeli uwanie przyjrzymy si utworzonym wymiarom, to stwierdzimy, e dwa spord nich, opisujce towary i klientw, maj wspln cz. Stanowi j dwie tabele,
Miasta i Wojewdztwa, ktre s powizanymi sownikami, opisujcymi lokalizacj
geograficzn. W przypadku klienta jest to miejsce zamieszkania, a dla towaru lokalizacja firmy, ktra ten towar wyprodukowaa. Sowniki opisuj lokalizacj z dokadnoci do miasta. Takie rozumowanie prowadzi do stwierdzenia, e mona by ten
fragment generowa jako oddzieln struktur, a nastpnie docza j do pozostaych
atrybutw definiujcych wymiar. Dlatego utworzono niezaleny wymiar Lokalizacja
o strukturze logicznej, pokazanej na rysunku 5.80.
Rysunek 5.80.
Definicja wymiaru
Lokalizacja

Pomimo e w poprzednich przykadach tworzylimy wymiary opierajce si na kilku


tabelach, trudno byo mwi o strukturze patka niegu, poniewa logiczna struktura
wymiaru bya opisywana w jednym miejscu. Teraz bdziemy mieli do czynienia z rzeczywist realizacj takiego modelu, gdy bd istniay takie wymiary, ktre nie s bezporednio poczone z tabel faktw, ale wymagaj poredniego elementu czcego
poredniego wymiaru. Na rysunku 5.81 pokazano struktur kostki Zysk_platek z definicj wymiaru Time (kopia z poprzednich rozwiza) oraz wymiarami Towar_platek
i Lokalizacja. Wymiar Towar_platek zawiera atrybuty opisujce nazw towaru i nazw

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

161

Rysunek 5.81.
Kostka z wymiarami
w strukturze patka
niegu

producenta oraz IdMiasta, bdcy kluczem obcym, ktry zostanie wykorzystany do


doczenia wymiaru Lokalizacja. Wymiar ma zdefiniowan jedn hierarchi o dwch poziomach. W widoku struktury nie wida znaczcej rnicy pomidzy biecym rozwizaniem a poprzednio prezentowanym rozwizaniem Towar_calosc.
Rnica jest zauwaalna dopiero wtedy, kiedy przeniesiemy si na zakadk Dimension
usage (rysunek 5.82), w ktrej dwa wymiary nie maj zdefiniowanych relacji z tabel
faktw Time (por. z rysunkiem 5.71) oraz tabel Lokalizacja. Przyczyny dla pierwszego z nich i sposb definiowania poczenia opisano wczeniej. W przypadku drugiego wymiaru przyczyn jest zastosowanie struktury patka niegu.
Rysunek 5.82.
Brak definicji
pocze dla
lokalizacji i czasu

Definicja relacji dla wymiaru Lokalizacja (rysunek 5.83) bdzie polegaa na wybraniu
poredniego typu referencyjnego Referenced. Jako element poredniczcy naley wskaza
wymiar Towar_platek oraz porwna odpowiadajce sobie po obu stronach relacji pola
kluczy IdMiasta.
Na tej samej zasadzie tworzymy struktur patka niegu dla wymiaru o nazwie Klienci_platek, skadajc si z atrybutu reprezentujcego nazwisko klienta oraz klucza obcego
IdMiasta do podczenia wymiaru Lokalizacja. Dodanie go do kostki nie powoduje
automatycznego doczenia drugiego elementu. Proces ten musi by zrealizowany
rcznie, wedug zasad zaprezentowanych na rysunku 5.84.
Po dodaniu kopii wymiaru Lokalizacja konieczne jest zdefiniowanie relacji do poredniczcej struktury, ktr jest tym razem Towar_platek (rysunek 5.85).

162

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.83.
Definiowanie
pocze dla wymiaru
Lokalizacja w postaci
relacji referencyjnej

Rysunek 5.84. Dodanie kopii instancji wymiaru Lokalizacja

Rysunek 5.85. Skutek dodania kopii wymiaru Lokalizacja (automatyczne wykrycie poczenia referencyjnego)

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

163

Taka definicja wymiarw pozwala na przetworzenie kostki i obejrzenie wynikw na


zakadce Browser (rysunek 5.86). Naley jednak pamita, ktre z hierarchii s ze sob
poczone referencyjnie, i tylko te umieszcza w opisie tego samego elementu kolumny lub wiersza. Jeli dokonamy zego wyboru, wywietl si wszystkie elementy
niszego poziomu, dla kadej pozycji licia nadrzdnej hierarchii co jest oczywistym bdem.

Rysunek 5.86. Kostka z dwoma wymiarami w strukturze patka niegu po przetworzeniu

Tworzenie hurtowni danych


z zastosowaniem tabel porednich
Pomimo e opisane zostay ju zasadnicze metody tworzenia elementw hurtowni,
chciabym w skrcie przedstawi konsekwencje stosowania szablonw. Przechodzimy bowiem od metody tworzenia obiektw wedug schematu od dou do gry, czyli
takiego, w ktrym na pocztku mamy tabele schematu relacyjnego, do modelowania
od gry do dou. W tym drugim sposobie postpowania rozpoczynamy od tworzenia obiektw po stronie wielowymiarowej. Konsekwencj takiej definicji jest powstanie tabel po stronie relacyjnej, ktre nastpnie bd zasilone danymi. Przeledmy ten
proces na przykadzie zastosowania szablonu do tworzenia wymiaru (rysunki 5.22, 5.23).
Z zestawu dostpnych szablonw wybierzmy Product Template, ktry moim zdaniem
jest jednym z prostszych. Na skutek dokonania takiego wyboru pojawia si okno dialogowe sugerujce list atrybutw wymiaru (rysunek 5.87). Jak wida, lista ta jest
duga i poza ju do szerokim zakresem atrybutw domylnych, opatrzonych znakiem , oferuje kilka dodatkowych.

164

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.87.
Dostpne pola
szablonu Product
Template

Poniewa interesuje nas prosta struktura, przypominajca ju utworzony wymiar Towar, zredukujmy list zaznaczonych pozycji do dwch reprezentujcych nazw towaru Product i jego przynaleno do kategorii Product Category (rysunek 5.88). Pozostawiono domylne, angielskie nazwy wystpujce w kolumnie Dimension Attribute,
aby odrni ten wymiar od ju istniejcego oraz pokaza oryginalne nazewnictwo.
Rysunek 5.88.
Wybrane pola
do definicji wymiaru

Kolejny krok wymaga podania poziomu atrybutu, ktry bdzie reprezentowa klucz
gwny wymiaru (rysunek 5.89). Podobnie jak poprzednio, klucz ten wyznacza najniszy poziom hierarchii, czyli towar (Product).

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

165

Rysunek 5.89.
Ustanowienie klucza
wymiaru

Nastpne okno pokazuje struktur logiczn wymiaru wraz z tworzonymi hierarchiami


oraz jego nazw (pozostawiono stan domylny) (rysunek 5.90). Na uwag zasuguje
pole wyboru Generate schema now, ktre w stanie domylnym nie jest zaznaczone.
Wybranie tej opcji powoduje uruchomienie kolejnego kreatora, ktry przeprowadzi
nas przez proces tworzenia tabeli po stronie relacyjnej.
Rysunek 5.90.
Definicja wymiaru
wraz z hierarchiami,
z zaznaczonym
generowaniem
schematu

Po pojawieniu si okna powitalnego musimy zdecydowa, w jakiej bazie danych tabela bdzie generowana. Moemy utworzy nowy acuch poczeniowy lub skorzysta z istniejcego, co zaproponowano w przykadzie (rysunek 5.91). Kolejne okno
pozwala na okrelenie dodatkowych parametrw generacji tabeli: czy ma by tworzony klucz podstawowy, czy maj zosta wygenerowane indeksy, czy maj by wymuszone wizy integralnoci (klucze obce) oraz czy dane maj by chronione podczas
tego procesu (rysunek 5.91). W przypadku tworzenia wymiaru czas dodatkowo moemy wybra opcj decydujc, czy dane maj zosta wpisane do tworzonego obiektu
(zawsze; nigdy; tylko wtedy, gdy tabela jest pusta).

166

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.91. Wybr widoku rda danych do tworzenia struktury relacyjnej i sposobu generacji

Ostatni krok to przyjcie skadni nazewnictwa dla tworzonej tabeli (rysunek 5.92).
Decyzja dotyczy stosowanego separatora w nazwach zoonych oraz przedrostkw
wykorzystywanych w nazewnictwie, np. klucza podstawowego, kluczy obcych, nazw
atrybutw, etc.
Rysunek 5.92.
Wybr stosowanego
nazewnictwa
i ostateczna posta
generowanej struktury

Ostatecznym skutkiem takiej generacji jest uruchomienie skryptu, ktry tworzy odpowiedni struktur tabelaryczn; przebieg jego wykonywania przedstawia rysunek 5.93.
Na najniszym poziomie znajduje si polecenie utworzenia tabeli bez definicji ogranicze, a nastpnie dodanie waciwoci do pl. Ostatni operacj jest dodanie kluczy
obcych. Analizujc komunikaty z ostrzeeniami pokazane w kocowej sekcji tego rysunku, zauwaymy, e proces generowania dotyczy nie tylko biecej tabeli, ale rwnie wszystkich innych tabel przypisanych do definicji wymiarw. Wykonanie tego
fragmentu spowodowaoby wyczyszczenie rdowych tabel. Na szczcie tabele dowizane do wymiarw s chronione przed procesem generacji i nie zostan wyczyszczone, co potwierdzaj komunikaty z ostrzeeniami.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

167

Rysunek 5.93. Wykonanie skryptu generujcego wykaz polece i komunikatw z ostrzeeniami

Ostatecznym efektem dziaania obu szeregowo uruchamianych kreatorw jest struktura logiczna wymiaru, przedstawiona na rysunku 5.94. Definicja wymiaru zawiera dwa
atrybuty oraz trzy hierarchie. Dwie spord nich, ktre definiuj pojedynczy poziom,
nie nios adnej wartociowej informacji i mog bez szkody zosta usunite. Dodatkowo przedstawiono posta fizycznego odwzorowania tego wymiaru na tabel schematu relacyjnego prawy panel tego samego okna. Tabela ta jest oczywicie pusta.
Rysunek 5.94.
Widok struktury
wymiaru z trzema
hierarchiami oraz
definicj tabeli
schematu relacyjnego

Sprawdzenia poprawnoci generacji tabeli po stronie relacyjnej moemy dokona,


uywajc narzdzia MS Management Studio (rysunek 5.95). Widoczny jest klucz
podstawowy tabeli, odpowiednik klucza obcego dla poziomu kategorii oraz dwa pola
nazw oba typu znakowego z narodowym zestawem znakw nvarchar(50). Rozmiar tych pl wynika z domylnych ustawie dla typw znakowych i powinien zosta
dostosowany do rzeczywistych danych.

168

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.95.
Skutek generacji
tabeli po stronie
relacyjnej

Poniewa tabela, jak ju zaznaczono, nie zawiera adnych danych, co moe by zweryfikowane przez odpytanie zapytaniem wybierajcym z MS Management Studio, jak
rwnie przez wybranie polecenia Explore Data z panelu Data Source View zakadki
Dimension Structure w Analysis Services. Najprostszym sposobem zasilenia jest zastosowanie zapytania wstawiajcego dane wedug schematu INSERT SELECT ,
ktre zostao przedstawione niej. Jest to odpowiednik materializacji perspektywy,
ktrej definicj jest drugi czon zapytania. W zapytaniu wybierajcym dokonano zczenia dwch tabel zawierajcych odpowiednie dane rdowe.
INSERT INTO Product
SELECT IdTowaru, NazwaTowaru, Kategorie.IdKategorii, NazwaKategorii
FROM Towar JOIN Kategorie
ON Towar.IdKategorii=Kategorie.IdKategorii

Zasilenie tabeli powoduje, e po przetworzeniu wymiar bdzie mia posta podobn


do poprzednio utworzonego na podstawie istniejcych tabel, przedstawion na rysunku 5.43. Zamy, e podczas tworzenia wymiaru opartego na szablonie Product
Template zrezygnowalimy z uruchomienia drugiego z szablonw, odpowiadajcego
za generowanie tabeli. W takim przypadku powstanie tylko odpowiednia struktura logiczna atrybutw wraz z hierarchiami. Jednak wygenerowanie fizycznego obiektu
przechowujcego dane jest konieczne i moe by wykonane z prawego panelu w zakadce Dimension Structure (rysunek 5.96). Warto rozway opnienie tego dziaania a do chwili utworzenia wszystkich niezbdnych struktur logicznych wymiarw
opartych na szablonach, poniewa proces generacji nadpisuje definicje tabel dla
wszystkich wymiarw, ktre nie maj odpowiednikw relacyjnych lub nie s przypisane do struktur wielowymiarowych.
Tabel wygenerowan wedug krokw pokazanych na rysunkach od 5.91 do 5.93 bdziemy musieli zasili danymi. Moemy wykona prezentowane poprzednio zapytanie
INSERT SELECT . Drug drog jest skorzystanie z narzdzi, jakie oferuje Integration Services. Niestety, dane rdowe w tabelach Towar i Kategorie maj ustalone

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

169

Rysunek 5.96.
Generacja schematu
z poziomu struktury
wymiaru

typy tekstowe bez narodowej strony kodowej (varchar), a docelowa tabela Product ze
wskazan narodow stron kodow (nvarchar). Rnica ta nie przeszkadza podczas
wykonywania prezentowanego zapytania wstawiajcego dane, natomiast cz narzdzi integracyjnych nie radzi sobie z konwersj typw. Dlatego w pierwszym kroku
zmiemy kodowanie zmiennych znakowych, wykonujc zapytanie SQL o skadni:
ALTER TABLE Product
ALTER COLUMN Product_Name varchar(50)

Zapytanie to naley powtrzy dla kolumny Category_Name. Przykad pakietu zasilajcego tak zmodyfikowan tabel docelow przedstawia rysunek 5.97. Skada si on
z dwch krokw zdefiniowanych na zakadce Control Flow. Pierwszym jest wykonanie zapytania SQL (Execute SQL Task), ktre ma na celu wyczyszczenie danych wystpujcych w tabeli docelowej. Mona uy zapytania
DELETE FROM Product

albo
TRUNCATE TABLE Product

Rysunek 5.97.
Zasilenie tabeli
wymiaru za pomoc
pakietu Integration
Services

Poniewa w drugim przypadku usuwanie danych polega tylko na usuniciu wskanika do pierwszego rekordu w tabeli co powoduje szybsze dziaanie, szczeglnie odczuwalne dla duych tabel zdecydowano si na zastosowanie drugiego z zapyta.
Drugi krok stanowi definicja przepywu Data Flow Task, ktrego elementy przedstawiono w prawej czci rysunku 5.97. Zdefiniowane zostay dwa rda OLE DB,
wskazujce na dwie tabele, Towar i Kategorie, pochodzce z tej samej bazy danych,

170

Hurtownie danych. Od przetwarzania analitycznego do raportowania

co pozwala na zastosowanie tego samego acucha poczeniowego. Kolejne kroki


rwnolege to posortowanie danych rdowych. Dane mog by posortowane dowolnie. W przykadzie zdecydowano si na posortowanie wzgldem kluczy gwnych
obu tabel. Krok ten zosta wymuszony zastosowaniem jako elementu integracyjnego
kontrolki Merge Join, ktra tworzy poczenie zgodnie z definicj klucza obcego wynikowego zestaw rekordw. Ostatni element to przesanie tego zestawu do docelowej
tabeli Product, wskazywanej przez kontrolk OLE DB Destination. Na rysunku
przedstawiono stan po pomylnym wykonaniu pakietu integrujcego dane, na co
wskazuje zielony kolor wszystkich kontrolek i informacja o liczbie przetworzonych
przez kad z nich rekordw.
Oczywicie mona wyobrazi sobie rozwizanie zasilania wymiaru z wykorzystaniem
Integration Services tylko z zastosowaniem zapyta SQL (TRUNCATE TABLE
oraz INSERT SELECT ) albo tylko z uyciem polecenia MERGE.
Na podobnej zasadzie, wybierajc szablon (None) (brak szablonu), rysunek 5.22, moemy wygenerowa pusty wymiar. Pomimo deklaracji niestosowania szablonu kolejne okno dialogowe podpowiada szablony, tym razem typu wymiaru (rysunek 5.98).
Domylny typ Regular zapewnia tylko to, e bdzie to wielopoziomowa struktura hierarchiczna.
Rysunek 5.98.
Tworzenie pustego
wymiaru wybr
typu wymiaru
(domylny Regular)

Kolejne etapy pozwalaj na definiowanie automatycznego tworzenia kluczy, okrelenie


wolno zmiennego wymiaru oraz nadanie nazwy przy elementarnej definicji struktury.
Zakoczenie procesu powoduje, e otworzenie edycji w zakadce Dimension structure
wywietla tylko klucz New dimension ID. Manualne dodanie nowych atrybutw do
definicji wymiaru jest dostpne tylko w widoku Grid (rysunek 5.99).
Rysunek 5.99.
Tworzenie pustego
wymiaru
definiowanie nowych
atrybutw dostpne
tylko w widoku Grid

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

171

Ponownie proces definiowania atrybutw i hierarchii pokazano dla wymiaru opisujcego


towar i jego przynaleno do kategorii (rysunek 5.100). Zastosowano nazewnictwo,
w ktrym kolumny kluczy s poprzedzane prefiksem PK_, a kolumny nazw nie zawieraj tego fragmentu. Tak samo jak podczas stosowania szablonw, po utworzeniu
struktury logicznej konieczne jest przeprowadzenie generowania tabeli po stronie relacyjnej, a nastpnie zasilenie jej danymi. Utworzenie wymiaru opierajcego si na
dowolnym szablonie, w tym pustego wymiaru, wymaga dodatkowo zdefiniowania
powiza bazowej tabeli w perspektywie rda danych z innymi elementami schematu relacyjnego utworzenia logicznych kluczy obcych.
Rysunek 5.100.
Tworzenie pustego
wymiaru
po utworzeniu
atrybutw i hierarchii

Podobnie jak w przypadku wymiarw, istnieje rwnie moliwo zastosowania szablonw do generowania kostki. Poniewa ten sposb tworzenia nie wnosi adnych
istotnych, nowych informacji, zostanie pominity. Natomiast zasygnalizowa naley
konsekwencje utworzenia pustej definicji kostki. Oba przypadki wynikaj z wyboru
opcji przedstawionych na rysunku 5.45. Dla pustej kostki kreator wymaga podania
poczenia z baz danych przez wybranie istniejcej perspektywy rda danych lub
utworzenia nowej oraz podania jej nazwy. W prezentowanym przykadzie kostka zostaa
nazwana Zyski_pusta. Pierwszym krokiem moe by zdefiniowanie miar, jak pokazano na rysunku 5.101.
Rysunek 5.101.
Dodanie miary
do pustej kostki

172

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Definiowanie nowej miary, jak pokazano na rysunku 5.102, skada si z trzech operacji:
wyboru jednej z dostpnych funkcji agregujcych (domylna i najczciej stosowana
to Sum), wskazania tabeli faktw spord dostpnych w okrelonej podczas tworzenia
perspektywie rda danych oraz wyboru pola tej tabeli, dla ktrego bdzie obliczana
wybrana funkcja. Operacja ta powinna by powtrzona dla kadego z pl definiujcych miary oraz zwyczajowo powinny zosta policzone rekordy tabeli faktw.
Rysunek 5.102.
Wybr funkcji
agregujcej, tabeli
rdowej oraz
kolumny definiujcej
miar

Zamiast definiowa po kolei wszystkie miary, moemy zdefiniowa now grup miar
New Measure Group (rysunek 5.101). Wskazujemy wtedy tylko tabel faktw zawierajc pola z miarami tej grupy (rysunek 5.103).
Rysunek 5.103.
Wybr tabeli faktw
dla grupy miar

Podobnie jak w przypadku uycia kreatora do budowania kostki, wybr tabeli definiujcej grup miar powoduje, e dodawane s wszystkie pola numeryczne niebdce
kluczem gwnym ani adnym z kluczy obcych z definicji perspektywy rda danych. Na wszystkich nich ustanawiana jest domylna funkcja agregujca Sum. Dodatkowo dla pola klucza tabeli faktw definiowana jest funkcja zliczajca rekordy Count.
Skutek takiego dziaania zosta przedstawiony na rysunku 5.104.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

173

Rysunek 5.104.
Skutek dodania grupy
zamiast miary

Aby otrzyma pen definicj kostki, pozostaje jeszcze dodanie do niej co najmniej
jednego wymiaru. Moemy skorzysta z podrcznego menu kontekstowego, jak przedstawiono na rysunku 5.105, i dokona wyboru z listy istniejcych obiektw tego rodzaju.
Czynno t powtarzamy tak dugo, a dodane zostan wszystkie niezbdne wymiary.
Rysunek 5.105.
Dodanie wymiaru
do definicji kostki

Definiowanie zaawansowanych
elementw kostki
Powrmy teraz do najbardziej rozbudowanej kostki, Zyski. Do tej pory miary byy
definiowane na podstawie pojedynczych pl i dziaajcej na nie pojedynczej funkcji
agregujcej najczciej Sum lub Count. Istnieje jednak moliwo zdefiniowania
bardziej zoonych wyrae, tzw. miar kalkulowanych, ktre tworzymy, korzystajc
z zakadki Calculations. Podstawowy widok dla kostki Zyski przedstawia rysunek 5.106.
Centralne okno zawiera komentarz objaniajcy rol tej zakadki oraz pocztek sekcji
oblicze sowo kluczowe CALCULATE. Po lewej stronie okna, w grnym panelu,

174

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.106. Tworzenie miar kalkulowanych widok pustego formularza

zawarte s nazwy logiczne wszystkich utworzonych miar obliczanych w tym momencie jest on pusty. Poniej dwuzakadkowy panel zawiera metadane (logiczne nazwy elementw definiujcych kostk zorganizowane w postaci drzewa) oraz wykaz
dostpnych funkcji rozszerzenia wielowymiarowego MDX SQL. Panele te s przydatne do tworzenia definicji metod przecignij i upu.
W omwionej zakadce sprbujmy doda nowy element o nazwie Zysk (rysunek 5.107).
Poza podaniem nazwy logicznej koniecznie jest zdefiniowanie nadrzdnej hierarchii,
ktr domylnie jest grupa miar Measures. W definicji wyraenia podajemy sposb
obliczenia miary. Definicja zysku jest rnic midzy wartoci, za ktr produkt
sprzedano, a wartoci, za ktr produkt kupiono. Warto pamita, e jeli w nazwie
stosowany jest separator w postaci spacji lub wykorzystano narodowe znaki diakrytyczne, konieczne jest ujcie jej w nawias kwadratowy. Zdaj sobie spraw z tego, e
wszystkie zalecenia dotyczce tworzenia nazw wymagaj niestosowania takich elementw, jednak nazwy nadawane automatycznie przez kreatory nie stosuj si do tych
regu. Zakadajc, e w pierwszym etapie Czytelnik bdzie chcia jednak korzysta
z tych propozycji, w przykadach podano nazwy domylne. Midzy innymi podczas
tworzenia wyrae opisujcych miary kalkulowane przydatna jest technika przecignij i upu z wykorzystaniem metadanych, poniewa zgodno nazw przy przetwarzaniu jest sprawdzana co do znaku, wliczajc w to wszelkie separatory, w tym znaki
niewidoczne. Dodatkowym elementem, ktry warto zdefiniowa, jest format wyprowadzanych danych, ktry w przykadzie zosta zdefiniowany jako Currency, ale mona nada mu inn posta, definiujc acuch formatujcy zgodnie z zasadami stosowanymi w innych produktach MS. Pozostae elementy, takie jak widoczno, zachowanie
dla wartoci niepustych, skojarzenie z inn grup miar oraz folder, w ktrym miara
jest wywietlana, maj drugorzdne znaczenie.
Poza podstawowym formatowaniem moemy zdecydowa si na przypisanie dodatkowych parametrw formatowania zawartoci komrek, jak pokazano na rysunku 5.108.
Dotycz one koloru czcionki, koloru ta, rodzaju czcionki, jej wielkoci oraz flag okrelajcych wytuszczenie, pochylenie czy te podkrelenie napisu. W przypadku ustalania

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

175

Rysunek 5.107.
Tworzenie miary
kalkulowanej
podstawowy
widok formularza

Rysunek 5.108.
Tworzenie miary
kalkulowanej
widok formularza,
formatowanie
wynikw

kolorw moemy stosowa nazwy symboliczne podstawowych barw albo ich warto
liczbow, ktr atwiej uzyska, wykorzystujc funkcj RGB(r, g, b), wyznaczajc
kolor na podstawie barw skadowych, kodowanych w zakresie 0-255. Moliwe jest
rwnie formatowanie warunkowe przez zastosowanie funkcji IIF(wyraenie logiczne, warto dla prawdy, warto dla faszu), co zostanie pokazane pniej.
Po przetworzeniu powinny by widoczne wszystkie ustawienia, jednak wykorzystywana do tej pory kontrolka tabeli przestawnej Browser pozwala jedynie na poprawne
odwzorowanie ustawienia kolorw, pozostae elementy formatowania nie s jeszcze
realizowane.
Poza prezentacj w postaci formularza dostpny jest widok definicji miar kalkulowanych w postaci skryptu MDX, co pokazano na rysunku 5.109. Oczywicie istnieje
moliwo definiowania lub edycji ju istniejcych miar bezporednio w tej postaci.

176

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.109. Zdefiniowane miary kalkulowane widok kodu

Jak wida, skrypt zawiera kod dla wszystkich elementw obliczanych, w przeciwiestwie
do formularza, ktry pozwala na wywietlenie tylko jednego elementu. Popenienie
bdu podczas tworzenia elementu za pomoc rozszerzenia MDX powoduje, e nie
jest moliwe przejcie do wywietlenia w postaci formularza adnego zdefiniowanego
elementu, nawet jeli jego definicja jest poprawna. Dlatego zaleca si stosowanie tej
postaci tylko przez biegych programistw MDX.
Poniej przedstawiony jest kod MDX dla utworzonych miar. Pozostawiono oryginalny komentarz, ktry jest wywietlany nawet wtedy, gdy nie zdefiniowano adnych
elementw. W przykadzie zdefiniowano dynamiczny zestaw rekordw o nazwie
NajlepszeTowary, ktry zawiera list omiu towarw przynoszcych najwikszy zysk.
Zastosowana zostaa waciwo members, ktra wywietla czonkw atrybutu lub
poziomu w hierarchii oraz funkcja TOPCOUNT. Obiekty tego typu s wykorzystywane do filtrowania danych w kostkach. Powtrzono za definicj w postaci formularza miar Zysk. Ponadto wyznaczono ZyskProcentowy, ktry jest stosunkiem zysku
do wartoci sprzeday, wyraonym w procentach. Dodatkowo obliczono SredniZysk
zgodnie z definicj wartoci redniej, jako iloraz zysku przez liczb sprzedanych towarw. Jak atwo zauway, w definicji miar lub zestaww rekordw mog zosta
wykorzystane inne miary obliczane.
/*
The CALCULATE command controls the aggregation of leaf cells in the cube.
If the CALCULATE command is deleted or modified, the data within the cube is affected.
You should edit this command only if you manually specify how the cube is aggregated.
*/
CALCULATE;
CREATE DYNAMIC SET CURRENTCUBE.[NajlepszeTowary]
AS TOPCOUNT(
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].members
,8,[Measures].[Zysk]) ;
CREATE MEMBER CURRENTCUBE.[Measures].Zysk

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

177

AS Wartosc-[Wartosc Zakupu],
FORMAT_STRING = "Currency",
BACK_COLOR = RGB(0,255,255),
FORE_COLOR = 255 /*Red*/,
FONT_NAME = "Arial",
FONT_SIZE = 14,
FONT_FLAGS = 3 /*Bold, Italic*/,
VISIBLE = 1;
CREATE MEMBER CURRENTCUBE.[Measures].ZyskProcentowy
AS Zysk/wartosc,
FORMAT_STRING = "Percent",
VISIBLE = 1;
CREATE MEMBER CURRENTCUBE.[Measures].SredniZysk
AS Zysk/ilosc,
FORMAT_STRING = "# ##0,00 z;-# ##0,00 z",
VISIBLE = 1;

Oprcz miar kalkulowanych moliwe jest zdefiniowanie dla kadej tworzonej kostki
kluczowej wskanikw wydajnoci (Key performance indicators). Definiowane s one
w postaci formularza umieszczonego na zakadce KPIs, pokazanej na rysunku 5.110,
gdzie przede wszystkim podajemy nazw logiczn wskanika oraz przynaleno do
grupy miar (domylnie ALL wszystkie). Pozycja Value Expression definiuje testowany
wskanik, ktrym w przykadzie jest stosunek wartoci sprzeday do wartoci zakupu.
Poniewa w trakcie generowania danych cena zakupu bya obliczana przez wykorzystanie generatora liczb pseudolosowych wedug zalenoci (0.9 0.3*RAND())*cena,
wspczynnik ten moe mie warto z przedziau (1.1, 1.4). Kolejny parametr to
warto docelowa, progowa Goal Expression, czyli taka, jaka jest oczekiwan wartoci wskanika. Status Expression jest wyraeniem testujcym warto wskanika
w porwnaniu z wartoci docelow. Najprostszym sprawdzianem jest wyznaczenie
rnicy tych wartoci i jeli jest ona dodatnia, ustawienie flagi odpowiadajcej za
sukces (1), a w przeciwnym razie flagi odpowiadajcej za porak (-1). Flagom
tym odpowiadaj ikony, ktrych typ jest wybierany z listy Status Indicator.
Rysunek 5.110.
Definicja KPIs
(Key performance
indicators)

178

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Drugim elementem definicji wskanika jest okrelenie trendu zmian (rysunek 5.111).
W polu Trend Expression budowane jest wyraenie MDX, ktre pozwala porwnywa zmiany w czasie. Mona, jak pokazano w przykadzie, okreli zmian jego wartoci
w stosunku do wartoci w rwnolegym okresie odlegym o rok. W funkcji IIF jest
sprawdzane, czy warto wspczynnika jest wiksza od tego, jaki wystpowa w okresie
rwnolegym, wyznaczonym funkcj ParallelPeriod na poziomie hierarchii czasu
Year przesunitej o jeden wstecz do biecego czonka (waciwo CurrentMember).
Podobnie jak poprzednio, sukces i poraka kodowane s przez 1 i -1. Typ ikony dla
tego wskanika jest wybierany z listy Trend Indicator.
Rysunek 5.111.
Cig dalszy
definicji KPIs
(Key performance
indicators)

Testowanie wskanika wydajnoci odbywa si na tej samej zakadce na skutek przeczenia odpowiedniej ikony (rysunek 5.112). Jak wida, wskaniki wyznaczane s
w tym miejscu dla caej kostki. Istnieje moliwo filtrowania zakresu przez wybranie
dynamicznego zestawu wartoci w pozycji <Select Dimension>. W omawianym przypadku status jest oznaczony negatywnie; z premedytacj wybrano statyczn warto
Goal=1.4, ktrej wskanik nie jest w stanie osign (obliczono, e wynosi on 1,305).
Natomiast trend jest dodatni z wag 1,1. Wskaniki wydajnoci mog by wywietlane dla komrek kostki przy zastosowaniu zapyta MDX, ale wtedy s reprezentowane
nie przez ikony, tylko przez odpowiadajce im flagi.
Rysunek 5.112.
KPIs (Key
performance
indicators)
po przetworzeniu

W celu przewiczenia innych wasnych definicji warto zastosowa szablony z zakadki


Templates panelu Calculation Tools. Powtrzenie penej definicji omawianego wskanika
zawiera tabela 5.3.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

179

Tabela 5.3. Definicja KPIs (Key performance indicators)


Parametr

Wyraenie

Value Expression

[Measures].[Wartosc]/[Measures].[Wartosc Zakupu]

Goal Expression

1.4

Status expression

Iif
(
KPIValue( "Wspolczynnik" ) - KPIGoal( "Wspolczynnik" ) >=0, 1, -1

Trend expression

)
Iif
(
KPIValue("Wspolczynnik")>
(KPIValue("Wspolczynnik"),
ParallelPeriod
(
[Time].[Year - Quarter 1,
[Time].[Year - Quarter )
), 1, -1

Month -

Date].[Year],

Month -

Date].CurrentMember

Ostatnim elementem dynamicznym tworzonym z zastosowaniem wyrae MDX s


akcje (Actions). Pozwalaj one dodawa do menu kontekstowego, dostpnego na zakadce Browser definicji kostki, przy odpowiednim poziomie tabeli przestawnej pozycje skojarzone z rnymi typami zachowa (rysunek 5.112). Dostpne poziomy to:
Attribute members
Cells
Cube
Dimension members
Hierarchy
Hierarchy members
Level
Level members

Zgrubnie akcje podzielone zostay na trzy kategorie: Standard, zawierajc dodatkowe podkategorie, Drillthrough oraz Reporting. Tworzenie kadego z tych typw ma
przypisan odpowiedni ikon.
W definicji naley poda nazw akcji, poziom oraz nazw czonka tego poziomu (rysunek 5.113). Ponadto mona zdefiniowa w postaci wyraenia MDX warunek Condition; jeli jest on prawdziwy, akcja jest podejmowana. Domyln wartoci dla niego
jest TRUE i moe nie by podana (w przykadzie warto t wpisano jawnie). Domylnym
typem akcji jest URL, dla ktrego naley poda w polu Action expression adres otwieranej strony WWW. Moliwe jest rwnie zastosowanie wyrae MDX. W przykadzie

180

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.113.
Definiowanie akcji
Szukaj wartosci

odwoano si do strony wyszukiwania MSN, dla ktrej parametrem przekazywanym


przez pasek (Post) jest nazwa biecego, wskazywanego czonka wymiaru, ktrego
dotyczy definiowana akcja. Czyli przekazana zostanie nazwa wojewdztwa wskazanego w tabeli przestawnej. Oczywicie moliwe jest zastosowanie innej wyszukiwarki przyjmujcej parametry metod Post, np. Google, Yahoo!, Onet, etc.
Mona ponadto zdefiniowa parametry dodatkowe zgodnie z rysunkiem 5.114, np.
parametr Invocation, ktry wskazuje, kiedy akcja jest uruchamiana. Domyln wartoci jest Interactive, co oznacza uruchomienie akcji w momencie wybrania zdefiniowanego poziomu. Pozostae wartoci to: Batch oraz On Open. Application wskazuje
program uruchamiany przez akcj, np. moe wskazywa przegldark rn od domylnej. Description zawiera opis akcji, a Caption etykiet pozycji menu, ktra moe
by wyraeniem MDX. W takim przypadku naley ostatni pozycj, Caption is MDX,
przeczy na warto TRUE. W przykadzie etykieta zawiera nazw wybranego wojewdztwa.
Rysunek 5.114.
Definiowanie akcji
Szukaj wartosci
parametry
dodatkowe

Po przetworzeniu i odwieeniu kostki, dla ktrej zdefiniowano akcj na zakadce


Browser, moemy, wybierajc zdefiniowany poziom, odwoa si do dodatkowej pozycji menu zawierajcej nazw zaznaczonego wojewdztwa (rysunek 5.115). Po wybraniu tej pozycji otworzy si przegldarka z wyszukiwark MSN i wywietlone zostan wyniki dla przekazanego przez adres parametru.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

181

Rysunek 5.115.
Skutek zdefiniowania
akcji Szukaj
wartosci

Dokadn definicj wszystkich parametrw akcji wyszukujcej w sieci informacje o wybranym wojewdztwie zawiera tabela 5.4.
Tabela 5.4. Akcja URL Szukaj wartosci
Parametr

Wyraenie

Target type

Level members

Target object

[Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo]

Condition

TRUE

Action type

URL

Action expression

"http://search.msn.com/results.aspx?q=" +
[Towar_calosc].[Wojewdztwo].currentmember.name

Description

Wyszukaj_opis

Caption

[Towar_calosc].[Wojewdztwo].currentmember.name

Caption is MDX

TRUE

Na podobnej zasadzie moemy zbudowa akcj wywietlajc map dla atrybutu danego
parametrem tabela 5.5. Tym razem zdecydowano si na poziom miasta w hierarchii
Towar_calosc. Zasadnicz rnic jest polecenie przekazywane do przegldarki. Wywoana zostaa strona maps.msn.com, dla ktrej wymagane jest przekazanie dwch parametrw: plce1 zawiera nazw miasta, a regn1 statyczn warto 1, reprezentujc
Europ. W etykiecie zastosowano poczenie statycznego tekstu z wyraeniem MDX,
ale jeeli chocia jeden fragment odwouje si do tego jzyka, kolejny parametr musi mie
warto TRUE. Wybr obu akcji zosta spowodowany tym, e ich podstawowa posta,
bez odwoania si do parametrw definiowanych przez MDX, zawarta jest w szablonach.
Wybranie poziomu Miasto w tabeli przestawnej przetworzonej kostki Zyski powoduje, e w menu pojawia si dodatkowa opcja Wywietl map dla <nazwa miasta> (rysunek 5.116), ktrej wybranie spowoduje uruchomienie zdefiniowanego serwisu map
i wyszukanie odpowiedniej pozycji.
Chciabym jeszcze przedstawi kolejny typ akcji drenie danych Drillthrough.
Jest ona tworzona z zastosowaniem oddzielnego szablonu, ktry poza nazw wymaga
podania grupy miar, wskazania wymiaru i odpowiadajcej mu kolumny zwracanej w akcji
jako zestaw rekordw. Przykadow definicj takiej akcji zawiera tabela 5.6.

182

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 5.5. Akcja URL Wywietl mape


Parametr

Wyraenie

Target type

Level members

Target object

[Towar_calosc].[woj_miasto_prod_towar].[Miasto]

Condition

TRUE

Action type

URL

Action
expression

"http://maps.msn.com/home.aspx?plce1=" +
[Towar_calosc].[Miasto].currentmember.name + "&regn1=1"
//"plce1" parametr reprezentujcy nazw miejsca.
//"regn1" parametr okrelajcy region, w ktrym znajduje si wskazane pierwszym
// parametrem miejsce.
// Domyln wartoci "regn1" jest zero (0).
// 0 = Ameryka Pnocna
// 1 = Europa
// 2 = cay wiat
// 3 = Australia

Description
Caption

"Wyswietl mape dla

Caption is MDX

TRUE

" + [Towar_calosc].[Miasto].currentmember.name

Rysunek 5.116.
Akcja URL Wyswietl
mape odwoanie

Tabela 5.6. Akcja typu Drillthrough o nazwie Zglebianie


Parametr

Wyraenie

Measure level member

Wszystkie transakcje

Condition

TRUE

Drillthrough columns

Dimension

Return Column

Towar_calosc

Nazwa Producenta

Skutek zdefiniowania tego typu akcji jest widoczny w menu podrcznym, wywietlanym z komrek tabeli przestawnej, reprezentujcych miary wskazywanej grupy, i moe
wyglda jak na rysunku 5.117.
Natomiast rezultat wywoania tej akcji jest przedstawiony jako zestaw rekordw wywietlany w odrbnym oknie dialogowym rysunek 5.118.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

183

Rysunek 5.117.
Odwoanie do akcji
o nazwie Zglebianie

Rysunek 5.118.
Rezultat wywoania
akcji Zglebianie

Podobnie jak akcja standardowa oraz zgbiania, w oddzielny kreator wyposaona jest
akcja Report, suca do generowania sparametryzowanego raportu. Jednak w obrbie
akcji Standard moliwe jest zdefiniowanie dodatkowych podtypw tej akcji. Zestaw
wszystkich dostpnych rodzajw akcji jest przedstawiony w tabeli 5.7. Poniewa do
definiowania wikszoci z nich konieczna jest biego w posugiwaniu si poleceniami MDX lub zapoznanie si z metodami tworzenia raportw, dalsze przykady nie
bd prezentowane w tej czci ksiki.
Tabela 5.7. Typy akcji
Typ akcji

Opis

CommandLine

Wykonuje polecenie w oknie polece systemu operacyjnego.

Dataset

Zwraca zestaw danych do aplikacji klienta.

Drillthrough

Zwraca zestaw danych z drenia i pokazuje go w postaci zestawu rekordw.

Html

Wykonuje skrypt HTML w oknie przegldarki.

Proprietary

Wykonuje operacje, uywajc interfejsu innego ni domylny.

Report

Przesya sparametryzowane zapytanie URL do serwera raportw, aby uruchomi raport.

Rowset

Zwraca zestaw rekordw do aplikacji klienta.

Statement

Wykonuje polecenie OLE DB.

URL

Wywietla sparametryzowan dynamiczn stron WWW w przegldarce.

184

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Struktura uprawnie
do korzystania z hurtowni danych
Mwic do tej pory o elementach hurtowni danych, abstrahowalimy od uprawnie
do nich, zakadajc niejawnie, e uytkownik posiada wszelkie niezbdne prawa.
Oczywicie tak nie jest, a nawet nie powinno by. Peny zestaw uprawnie powinien
zosta zarezerwowany tylko dla twrcw hurtowni. Wszyscy uytkownicy, dla ktrych
dedykowane jest to rozwizanie, powinni mie moliwo wykonywania tylko ograniczonego zestawu operacji zwizanych nie ze struktur, ale gwnie z przegldaniem
wynikw. Dlatego utwrzmy w panelu Solution Explorer now rol (rysunek 5.119).
Nowo tworzona rola typu Full control ma domylnie zaznaczone wszystkie moliwoci
oddziaywania na obiekty hurtowni: Full control, Process database oraz Read definition,
co wida na zakadce General.
Rysunek 5.119.
Definiowanie roli

Rola nie ma domylnie przypisanych czonkw. Na zakadce Members (rysunek 5.120)


moemy doda do niej dowolnych uytkownikw lub grupy systemu operacyjnego,
grupy robocze czy domeny. Jeeli mamy do czynienia z uprawnieniami penymi, pozostae zakadki definiowania roli s nieaktywne.
Rysunek 5.120.
Przypisanie
uytkownikw do roli

Podobnie moemy definiowa rol z ograniczonym zakresem uprawnie. Rozwamy


tym razem tak, do ktrej przypisane zostay tylko uprawnienia Process database
i Read definition, co prezentuje rysunek 5.121. Rola ta ma nazw Process. Jeli rola nie
zawiera uprawnienia Full control, to poza zakadk Members, na ktrej dopisujemy
czonkw tej roli, aktywne staj si pozostae zakadki.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

185

Rysunek 5.121.
Rola o niepenych
uprawnieniach
uaktywniaj si
zakadki na prawo
od Members

Na zakadce Data Sources, przedstawionej na rysunku 5.122, moemy zdecydowa,


czy rola ma pozwala na odczyt ze zdefiniowanych w hurtowni rde danych. Uprawnienie to moe przyj tylko wartoci Read lub None. W pierwszym przypadku opcja
Read Definition przestawiana jest automatycznie w stan aktywny.
Rysunek 5.122.
Definiowanie dostpu
do definicji hurtowni

Kolejna zakadka, Cubes, pozwala na definiowanie dostpu do kadej zdefiniowanej


w hurtowni kostki (rysunek 5.123). Moemy definiowa zdolno do drenia danych,
wybierajc jedn z trzech opcji: None, Drillthrough oraz Drillthrough and Local Cube,
i sposb dostpu dla kadej z tych wartoci: None, Read, Read/Write. Ze wzgldu na
moliw liczb sensownych kombinacji dostpu do kostki kada jest reprezentowana
na licie dwukrotnie. Domylnym stanem jest stan pozwalajcy na przetwarzanie
kostki, jeli tylko dostp do niej jest rny od None.
Rysunek 5.123.
Definiowanie dostpu
do kostek

Na rysunku 5.124 pokazano moliwoci definiowania warunkowego dostpu do kostki i kadej z jej komrek. Definicje warunkw s przedstawiane w postaci wyrae
MDX i nie bd omawiane w tym miejscu. Oczywicie najprostszym przykadem jest
wpisanie wartoci TRUE, co spowoduje bezwarunkowe ustawienie tych uprawnie.
Moemy zdefiniowa moliwo odczytu caej kostki (Enable read permissions), odczytu wybranych komrek (Enable read-contingent permissions) oraz odczytu i zapisania zawartoci kostki (Enable reading and writing of cube content).
Podobnie jak w przypadku dostpu do caej kostki, moemy sterowa dostpem do
wybranych wymiarw hurtowni, zgodnie z zasadami pokazanymi na rysunku 5.125.
Definiowane jest prawo czytania definicji, przetwarzania oraz dostpu przez wybranie
jednej z dwch wartoci: Read lub Read/Write.

186

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.124.
Definicja dostpu
do komrek kostki

Rysunek 5.125.
Definicja dostpu
do wymiarw

Moliwe jest te definiowanie szczegowych zasad dostpu do danych zawartych


w wymiarze (rysunek 5.126). Przede wszystkim na wewntrznej zakadce Basic mona ustali dla kadego wymiaru, a w ramach niego dla kadego zdefiniowanego atrybutu i kadej hierarchii ktre atrybuty maj by dostpne dla uytkownika bdcego czonkiem tej roli.
Rysunek 5.126.
Definiowanie dostpu
do atrybutw
wymiarw

Drugi wariant to wykorzystanie zaawansowanego sposobu filtrowania, pokazane na


rysunku 5.127 i realizowane z poziomu wewntrznej zakadki Advanced. Naley tutaj
stosowa wyraenia MDX (w najprostszym przypadku TRUE lub FALSE), ktre pozwalaj na warunkowy dostp (lub jego brak) do zbioru danych member set oraz na
ustalenie domylnego czonka tego wymiaru. Bezwarunkowo definiowany jest dostp
do wywietlenia podsumowa na poziomie korzenia wymiaru.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

187

Rysunek 5.127.
Definiowanie dostpu
do atrybutw
wymiarw

Analogicznie mog by ustalane zasady dostpnoci danych dla rl z rnym dostpem do przetwarzania danych. Do kadej z nich oddzielnie moemy przypisywa
uprawnienia szczegowe. Naley pamita, e jeeli uytkownik jest czonkiem kilku rl, to jego uprawnienia szczegowe wynikaj z tej roli, ktra definiuje ich najszerszy zakres.

Dodatkowe funkcjonalnoci
Analysis Services
W zasadzie mona powiedzie, e wszystkie niezbdne informacje potrzebne do zbudowania hurtowni danych oraz zarzdzania ni zostay podane. Niestety, jak ma to
miejsce w przypadku wikszoci zoonych narzdzi, ich funkcjonalno jest na tyle
zoona, e trudno j opisa, stosujc strategi od najprostszego elementu do ostatecznego efektu. Istnieje bowiem szereg bocznych drg, ktrych omawianie w jednym cigu
prowadzi bardziej do zagmatwania ni rozjanienia informacji na ich temat. Dlatego
na koniec pozostawiem kilka z nich. Pierwsz jest moliwo budowania elementw
hurtowni opartych na zapytaniach definiowanych po stronie OLAP. Aby pokaza to
rozwizanie, utwrzmy pusty widok rda perspektywy danych o nazwie Virtual.
W panelu edycji rda moemy z menu podrcznego wybra pozycj New Named
Query zamiast, jak dotd, Add/Remove Tables rysunek 5.128.
Dokonanie takiego wyboru prowadzi do uruchomienia narzdzia, ktre jest kopi
rozwizania sucego do wizualnego projektowania perspektyw po stronie SQL Server
Management Studio (rysunek 5.129). Po nadaniu nazwy Osoby_Q oraz wyborze rda danych konieczne jest wskazanie tabel, ktre bd wchodziy w skad definicji.
Dostpne s wszystkie tabele i perspektywy wynikajce z definicji rda danych.
Sprbujmy skonstruowa zmodyfikowany wymiar, definiujcy struktur organizacyjn
firmy. Wybierzmy wic tabele Dzialy oraz Osoby. Poniewa w tabeli Osoby zdefiniowano klucz obcy, automatycznie tworzone jest poczenie midzy tabelami. Gdyby klucz nie
zosta zdefiniowany, poczenie midzy tabelami naleaoby ustanowi rcznie.

188

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.128.
Definiowanie
nazwanego zapytania
w pustym widoku
rda danych

Rysunek 5.129.
Tworzenie nazwanego
zapytania wybr
tabel rdowych

Kolejny etap stanowi wybr pl definiujcych perspektyw, jak pokazuje rysunek 5.130.
Poza polem klucza gwnego tabeli Osoby, ktry bdzie definiowa klucz wymiaru,
jawnie wybrano jeszcze pole Opis, ktre ma stanowi jeden z atrybutw wymiaru.
Aby pokaza rnice i korzyci pynce z zastosowania perspektywy do definiowania
elementw hurtowni, trzecie pole jest definiowane przez wyraenie
dbo.Osoby.Nazwisko + ' ' + dbo.Osoby.Imie AS Pracownik

Zastosowanie aliasu jest wskazane, aby w definicji wymiaru posugiwa si sensown


nazw atrybutu. Uycie nazw kwalifikowanych pl nie jest obowizkowe i jest tylko
i wycznie wykorzystaniem wizualnej czci narzdzia. Moliwe jest bezporednie
napisanie kodu zapytania SQL. Przed zamkniciem definicji zapytania warto rwnie
sprawdzi, jak wyglda zestaw generowanych przez nie rekordw.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

189

Rysunek 5.130.
Tworzenie nowego
nazwanego zapytania
edytor

Skutkiem takiego postpowania jest wymiar zdefiniowany za pomoc nazwanego zapytania rysunek 5.131. Dla kolumny klucza zdefiniowano kolumn nazw Pracownik,
ktra stanowi pole zawierajce wyraenie czce nazwisko i imi, dlatego nie pojawia si ona jako atrybut w definicji wymiaru. Dodatkowo zostaa zdefiniowana dwupoziomowa hierarchia, ktrej czciowo rozwinity widok po przetworzeniu jest
przedstawiony w prawej czci rysunku 5.131. Jak wida, zastosowanie wyraenia
definiujcego pracownika pozwala na uzyskanie informacji o nim w peniejszej, czytelniejszej postaci.

Rysunek 5.131. Wymiar utworzony na podstawie nazwanego zapytania

Ju podczas rozwaa teoretycznych zwrciem uwag na sposoby reprezentowania


cigych atrybutw numerycznych. Przykadem takiego typu w naszej strukturze moe by cena towaru. Zamy, e chcemy dokona analizy sprzeday towarw w zalenoci od ich ceny, sprawdzajc tzw. funkcj substytucyjn taszych produktw.

190

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Dla potrzeb tego fragmentu zostaa zbudowana pomocnicza perspektywa Towar_Q,


pobierajca dane z tabeli Towar. Ustalono klucz podstawowy IdTowaru oraz atrybut
niekluczowy NazwaTowaru. Pozostae pola perspektywy zawieraj t sam dan
cen produktu; w celu identyfikacji nadano im nazwy od CenaA do CenaD.
SELECT IdTowaru, NazwaTowaru,
Cena AS CenaA, Cena AS CenaB, Cena AS CenaC, Cena AS CenaD
FROM Towar

Klucz podstawowy i wszystkie pola reprezentujce cen wybrano do definicji wymiaru


Towar_Q. Nie utworzono adnej hierarchii. Na rysunku 5.132 poza opisan struktur
zostay przedstawione dla atrybutu CenaA sposoby jego dyskretyzacji. Pozycja domylna
None oznacza brak dyskretyzacji, czyli kada cena wystpujca w tabeli stanowi jedn
warto atrybutu. Innymi sowy, atrybut ma tyle wartoci, ile rnych cen maj towary zawarte w tabeli. Dla atrybutu CenaA zostaa wybrana wanie taka reprezentacja.

Rysunek 5.132. Definicja wymiaru opartego na cigych atrybutach wraz z dostpnymi metodami ich
reprezentacji

Pozostae trzy wartoci okrelaj, e cena bdzie reprezentowana nie przez pojedyncze wartoci, ale przedziay, ktrych sposb okrelenia zaley od wybranej metody.
Kolejne pola, poczwszy od CenaB, maj ustawiane metody dyskretyzacji zgodnie
z pozycjami na przedstawionej na rysunku 5.132 licie. Po przetworzeniu poszczeglne
atrybuty wymiaru reprezentujcego cen maj posta pokazan na rysunku 5.133.
Analizujc wyniki, moemy zauway, e w przypadku A s wywietlone wszystkie
wartoci ceny wystpujce w tabeli Towar. Ze wzgldu na ich liczb na rysunku pokazane zostay tylko wartoci pocztkowe. Wyniki dla metody B i C s tosame, co
wiadczy, e domyln metod dyskretyzacji jest podzia na rwne przedziay. Polega
on na wyznaczeniu zakresu zmiennoci dyskretyzowanego przedziau MAX(Cena)
MIN(Cena), a nastpnie podzieleniu go na ustalon liczb przedziaw. Ich granice s
wyznaczane w taki sposb, e w kadym z nich znajduje si taka sama liczba atrybutw
z dokadnoci 1, ze wzgldu na podzielno liczby atrybutw przez liczb przedziaw.
Rn od domylnej liczb przedziaw (koszykw) moemy ustali, zmieniajc parametr
DiscretizationBucketCount, natomiast liczebno przedziau ustala warto parametru

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

191

A
B
C
D
Rysunek 5.133. Wynik przetworzenia wymiaru reprezentujcego ceny towarw dla rnych metod
reprezentacji: A wartoci dyskretne, B dyskretyzacja automatyczna, C dyskretyzacja rwnych
obszarw, D dyskretyzacja z zastosowaniem algorytmu grupowania

EstimatedCount. Ostatnia metoda wykorzystuje algorytm grupowania k-rodkw, wykrywajcy naturaln tendencj do grupowania si wartoci rzeczywistych parametrw.
W tym przypadku mona zmieni domyln liczb grup (koszykw), ustalajc warto DiscretizationBucketCount. Eksperymenty z doborem najodpowiedniejszej metody dyskretyzacji oraz wartoci parametrw j opisujcych pozostawiam uwanemu
Czytelnikowi. Niestety, nawet najlepsza metoda prowadzi do takiego skutku, e w przypadku atrybutw typu liczba rzeczywista granice przedziaw s rwnie liczbami
rzeczywistymi, co nie zawsze jest podane. Jeli zdecydujemy si na inne okrelenie
przedziaw, musimy skonstruowa wasny algorytm. Najlepszym rozwizaniem jest
podzia i etykietowanie przedziaw ju na poziomie budowania perspektyw rdowych.
Moemy wtedy dopasowa etykiety do typu atrybutu, np. dla ceny: bardzo tanie, tanie,
rednie, drogie, bardzo drogie, a dla wzrostu: niscy, redni, wysocy. Moliwe jest rwnoczenie swobodne manipulowanie liczb etykiet w zalenoci od potrzeb oraz synchronizacja z nadrzdnym poziomem hierarchii. Nie dla kadej kategorii towaru etykieta
tani lub drogi musi oznacza ten sam przedzia cen. Procesy takie, zwaszcza
zwizane z automatycznym, inteligentnym etykietowaniem, adekwatnym do okrele
stosowanych w jzyku naturalnym, s w dalszym cigu przedmiotem bada.
Uwanemu Czytelnikowi na pewno nie umkn fakt, e nazwa waciwie kadego definiowanego wymiaru w panelu Attributes jest podkrelona niebiesk, falist lini.
wiadczy to o tym, e kady zosta utworzony z ostrzeeniami. Nie wpywa to na poprawne ich przetwarzanie, ale moe, a w wikszoci przypadkw ma wpyw na jego
wydajno. Zajmijmy si teraz usuniciem ostrzee, ilustrujc przykadem wymiaru

192

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Towar. Pierwsze ostrzeenie wynika z faktu utworzenia przynajmniej jednej hierarchii.


W tej sytuacji uzasadnione jest, aby wywietlane byy tylko struktury wielopoziomowe,
a nie pojedyncze, jednopoziomowe struktury atrybutw. Std mona by dla atrybutw
ustawi waciwo widocznoci AttributeHierarchyVisible na FALSE. Na rysunku 5.134
pokazane zostao ustawienie tej waciwoci dla atrybutu Id Towaru. Aby usun
wszystkie tego typu ostrzeenia, operacje t naley powtrzy dla wszystkich atrybutw
wymiaru definiujcych dowoln z hierarchii w nim utworzonych. W omawianym przypadku dotyczy to jeszcze atrybutu Nazwa Kategorii. Jak zostanie pokazane w rozdziale powiconym zapytaniom MDX, takie postpowanie nie zawsze jest uzasadnione, zwaszcza kiedy stosujemy definicj krotki za pomoc instrukcji CROSSJOIN.

Rysunek 5.134. Ustawienie waciwoci widocznoci atrybutu w celu wyeliminowania ostrzee

Aby uatwi Czytelnikowi posugiwanie si waciwociami atrybutw oraz ustawianie


wartoci rnych od domylnych ich nazwy i opisy zostay zamieszczone w tabeli 5.8.
Tabela 5.8. Waciwoci atrybutw wymiaru
Waciwo

Opis

AttributeHierarchyDisplayFolder

Wskazuje folder, w ktrym uytkownikowi wywietlane bd


atrybuty skojarzone z hierarchi.

AttributeHierarchyEnabled

Okrela dostpno atrybutu podczas definiowania hierarchii


uytkownika oraz moliwo odwoywania si do n-tego z nich
w zapytaniach MDX.

AttributeHierarchyOptimizedState

Okrela, czy atrybut jest indeksowany, przez podanie jednej


z dwch wartoci:
FullyOptimized: indeksy s budowane i wykorzystywane
przy optymalizacji zapyta;
NotOptimized: indeksy nie s tworzone; taki stan jest uzasadniony
tylko w przypadku atrybutw niewykorzystywanych podczas
budowania zapyta.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

193

Tabela 5.8. Waciwoci atrybutw wymiaru cig dalszy


Waciwo

Opis

AttributeHierarchyOrdered

Okrela, czy atrybut jest porzdkowany (sortowany). Wartoci


domyln jest TRUE. Ustawienie wartoci na FALSE jest
uzasadnione tylko w przypadku atrybutw niewykorzystywanych
podczas budowania zapyta.

AttributeHierarchyVisible

Okrela, czy atrybut jest widoczny dla kocwki klienta. Wartoci


domyln jest TRUE. Ustawienie wartoci na FALSE jest
uzasadnione tylko w przypadku atrybutw niewykorzystywanych
podczas budowania zapyta poprawia wydajno przetwarzania.

CustomRollupColumn

Ustanowienie kolumn zawierajcych dane dla dodatkowej opcji


ROLLBACK.

CustomRollupPropertiesColumn

Ustanowienie kolumn zawierajcych waciwoci dla dodatkowej


opcji ROLLBACK.

DefaultMember

Pozwala na wybranie w postaci wyraenia MDX domylnego


czonka miar dla wymiaru (fabrycznie pierwszy na licie).

Description

Zawiera opis atrybutu.

DiscretizationBucketCount

Zawiera liczb grup, na ktre dzieli si dyskretyzowany atrybut


w dyskretyzacji z okrelon ich liczb.

DiscretizationMethod

Wybiera metod dyskretyzacji wybrana liczba grup lub liczba


elementw w grupie.

EstimatedCount

Definiuje szacowan liczebno grupy. W czasie uruchamiania


Aggregation Design Wizard pocztkow wartoci jest zero.
Kreator moe policzy rekordy lub uytkownik moe oszacowa
ich liczb. Jeli chcemy pomin dodatkowy czas na obliczenia,
zalecane jest wprowadzenie tej wartoci rcznie.

GroupingBehavior

Wprowadzona przez uytkownika warto stanowica wskazwk,


podpowied dla aplikacji klienckiej, jak ma by grupowany atrybut.

ID

Unikalny identyfikator wymiaru klucz podstawowy (TRUE,


FALSE).

InstanceSelection

Dostarcza podpowiedzi do kocwki klienta, opierajc si na liczbie


wartoci atrybutu, w jaki sposb maj by wywietlane elementy:
None podpowiedzi nie bd wywietlane warto
domylna;
DropDown liczba wartoci jest tak niewielka, e moe by
wywietlana na licie rozwijanej;
List liczba wartoci jest zbyt dua, aby zastosowa list
rozwijan, ale nie wymaga filtrowania;
FilteredList liczba wartoci jest wystarczajco dua,
aby uytkownik mg stosowa filtrowanie wartoci
przeznaczonych do wywietlenia;
MandatoryFilter liczba wartoci jest wystarczajco dua,
aby wartoci byy zawsze filtrowane.

IsAggregatable

Podaje, czy czonkowie tego atrybutu wymiaru mog by grupowani.


TRUE oznacza, e w hierarchii atrybut bdzie zawiera
poziom All warto domylna;
FALSE oznacza, e wze All si nie pojawi.

194

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 5.8. Waciwoci atrybutw wymiaru cig dalszy


Waciwo

Opis

KeyColumns

Wskazuje kolumn lub kolumny, ktre reprezentuj klucz dla tego


atrybutu. Jest to zwykle kolumna schematu relacyjnego definiujca
atrybut. Warto tej kolumny jest wywietlana zamiast wartoci
podanej we waciwoci NameColumn.

MemberNamesUnique

Okrela, czy nazwy czonkw atrybutu musz by unikalne,


czy te nie.

MembersWithData

Uywany przez atrybut rodzica, aby okreli, jak wywietla


czonkw nieposiadajcych lici (wzw na poziomie potomka).
Ta waciwo moe by stosowana tylko wtedy, gdy waciwo
Usage tego atrybutu ma warto Parent. Moemy uywa dwch
wartoci:
NonLeafDataHidden wzy bez lici s ukrywane;
NonLeafDataVisible wzy bez lici s widoczne.

MembersWithDataCaption

Podaje napis stanowicy szablon uywany przez wze rodzica


do tworzenia opisw dla wygenerowanych przez system wzw.
Ta waciwo moe by stosowana tylko wtedy, gdy waciwo
Usage tego atrybutu ma warto Parent.

Name

Zawiera przyjazn dla uytkownika nazw atrybutu.

NameColumn

Wskazuje kolumn, ktra dostarcza nazw dla atrybutu zamiast


jego oryginalnych wartoci. Stosowany jest wtedy, kiedy oryginalne
wartoci nie s czytelne dla uytkownika, poniewa s kodowane
lub s indeksami, albo kiedy klucz wymiaru jest kluczem
zoonym. Waciwo NameColumn nie moe by stosowana
dla hierarchii typu Rodzic Potomek.

NamingTemplate

Definiuje na podstawie wartoci atrybutu rodzica nazwy poziomw


w hierarchii. Ta waciwo moe by stosowana tylko wtedy,
gdy waciwo Usage tego atrybutu ma warto Parent.

OrderBy

Definiuje sposb sortowania czonkw w hierarchii atrybutw:


NameColumn wedug nazwy kolumny; stan domylny,
gdy kolumna ma zdefiniowan waciwo NameColumn;
Key wedug wartoci kolumny klucza; alternatywny stan
domylny, kiedy nie zdefiniowano waciwoci NameColumn;
AttributeKey wedug wartoci klucza wskazanego atrybutu;
wybrany atrybut musi mie zdefiniowane relacje z biecym
atrybutem;
AttributeName wedug nazwy wskazanego atrybutu;
wybrany atrybut musi mie zdefiniowane relacje z biecym
atrybutem.

OrderByAttribute

Wskazuje atrybut, wedug ktrego nastpuje sortowanie (patrz


pozycja wyej).

RootMemberIf

Wskazuje, na jakiej podstawie wykrywany jest najbardziej


nadrzdny poziom (root) w hierarchii Rodzic Potomek.
Ta waciwo moe by stosowana tylko wtedy, gdy
waciwo Usage tego atrybutu ma warto Parent.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

195

Tabela 5.8. Waciwoci atrybutw wymiaru cig dalszy


Waciwo

Opis

RootMemberIf

Dopuszczalne s wartoci:
ParentIsBlank tylko czonek, dla ktrego kolumna
lub kolumny klucza maj warto null lub zero;
ParentIsSelf tylko czonek, ktry wskazuje samego siebie
jako rodzica;
ParentIsMissing tylko czonek, dla ktrego nie da si
znale rodzica (klucz poza zakresem);
ParentIsBlankSelfOrMissing poczenie wszystkich
poprzednich warunkw; warto domylna.

Type

Definiuje typ danych atrybutu. W przypadku danych prostych


jest dziedziczony po danych rdowych.

UnaryOperatorColumn

Wskazuje kolumn, dla ktrej mog by wykonywane dziaania


jednoargumentowe, jeli to niemoliwe dla oryginalnej kolumny
atrybutu.

Opisuje sposb uycia atrybutu. Dostpne s wartoci:

Usage

ValueColumn

Regular zwyky atrybut; warto domylna;


Key atrybut jest kluczem wymiaru; dla kadego wymiaru
musi istnie przynajmniej jeden;
Parent atrybut jest rodzicem w hierarchii Rodzic Potomek.

Wskazuje kolumn zawierajc wartoci atrybutu. Jeli wartoci


waciwoci NameColumn i DataItem wskazuj t sam warto,
ta druga jest wartoci domyln waciwoci. Jeli nie podano
wartoci NameColumn, a klucz podstawowy nie jest zoony,
rwnie DataItem zawiera wartoci atrybutu.

Uzupenieniem waciwoci atrybutw wymiaru s waciwoci wymiaru traktowanego jako cao, ktre zostay przedstawione w tabeli 5.9. Dotycz one w wikszoci
przypadkw sposobu przechowywania albo metod przetwarzania. Z przyczyn czysto
praktycznych warto zmieni pierwsz z wymienionych waciwoci, okrelajc nazw
korzenia w jzyku polskim, np. Cao.
Kolejne ostrzeenie wynika z tego, e w definicji wszystkich wymiarw stosowalimy
tabele poczone ze sob za pomoc zdefiniowanych na poziomie struktury relacyjnej
klucza obcego i klucza podstawowego. Jak wiadomo, taka definicja powoduje automatyczne utworzenie indeksw, z ktrych korzysta silnik bazy danych w przypadku
realizowania zcze na tych polach. Zmiana tej opcji ma bardzo due znaczenie i wpywa
na wydajno przetwarzania, poniewa jeeli w przypadku Rigid pojawi si nowe
wartoci atrybutw, funkcje agregujce bd obliczane przyrostowo z wykorzystaniem
ju obliczonych wartoci. Natomiast dla opcji Flexible funkcje obliczane s od pocztku. Miejsce i sposb ustalenia wartoci tej waciwoci pokazuje rysunek 5.135,
natomiast opis wszystkich opcji zawarty jest w tabeli 5.10.

196

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 5.9. Waciwoci wymiaru


Waciwo

Opis

AttributeAllMemberName

Ustawia nazw dla korzenia hierarchii o domylnej nazwie All.

Collation

Wywietla domyln stron kodow dla wymiaru.

CurrentStorageMode

Wywietla informacje o sposobie przechowywania wymiaru:


MOLAP skadowanie w postaci struktury wielowymiarowej;
ROLAP skadowanie w postaci relacyjnej.

DependsOnDimension

Zawiera identyfikator nadrzdnego wymiaru o ile istnieje.

Description

Wywietla opis wymiaru.

ErrorConfiguration

Zawiera ustawienia dotyczce bdw zwizanych z: nieunikalnymi


kluczami (duplicate keys), nieokrelonymi wartociami klucza
(unknown keys), kluczami o wartoci null (null keys), ograniczeniem
liczby bdw (error limits) oraz akcjami wystpujcymi na skutek
wykrycia bdu i pliku, do ktrego te informacje s zapisywane.
Szczegy patrz tabela 5.11.

ID

Wywietla identyfikator wymiaru.

Language

Zawiera domylny jzyk opisw dla wymiaru.

MdxMissingMemberMode

Wskazuje, jak w wyraeniach MDX maj by reprezentowane wartoci


puste.

MiningModelID

Wskazuje identyfikator (jeli go zdefiniowano) modelu zgbiania


danych dla wymiaru.

Name

Zawiera nazw wymiaru.

ProactiveCaching

Okrela ustawienia dla aktywnego cachowania wymiaru.

ProcessingGroup

Specyfikuje sposb grupowania podczas przetwarzania ByAttribute


(domylnie) lub ByTable.

ProcessingMode

Wybiera sposb przetwarzania wymiaru:


Regular indeksy i agregacja s obliczane podczas przetwarzania;
LazyOptimizations indeksy i agregacja s obliczane po zakoczeniu
przetwarzania.

ProcessingPriority

Okrela priorytet przetwarzania wymiarw wzgldem procesw ta,


takich jak te, ktre wynikaj z LazyOptimizations. Wartoci domyln
jest 0 najwyszy priorytet.

Source

Wskazuje rdowy obiekt, na ktrego podstawie zbudowano wymiar.

StorageMode

Wywietla informacje o sposobie przechowywania wymiaru:


MOLAP skadowanie w postaci struktury wielowymiarowej;
ROLAP skadowanie w postaci relacyjnej.

Type

Wskazuje typ wymiaru, domylnie Regular.

UnknownMember

Wskazuje, czy dla wymiaru ma by ustanowiona dodatkowa pozycja


dla nieznanej wartoci wymiaru.

UnknownMemberName

Wskazuje nazw dla nieznanej wartoci wymiaru, domylnie


Unknown.

WriteEnabled

Wskazuje, kiedy zapisywanie wymiaru jest moliwe.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

197

Rysunek 5.135. Ustawienie waciwoci relacji w celu wyeliminowania ostrzeenia


Tabela 5.10. Waciwoci relacji
Waciwo

Opis

Attribute

Nazwa atrybutu.

Cardinality

Okrela typ relacji dla MS 2008; niewykorzystywane, przeznaczone do


zastosowania w przyszoci.
Many jeden do wielu (domylnie);
One jeden do jednego.

Name

Opis atrybutu w formie przyjaznej dla uytkownika.

RelationshipType

Okrela, czy relacja zmienia si w czasie.


Rigid relacja midzy atrybutami nie zmienia si w czasie, jest cile
okrelona przez klucze schematu relacyjnego. Jeli pojawi si nowe wartoci
atrybutw, funkcje agregujce obliczane s przyrostowo z wykorzystaniem
ju obliczonych wartoci. Jeli po zdefiniowaniu relacja si zmienia, silnik
zgasza komunikat o bdzie.
Flexible relacja moe zmienia si w czasie (domylna). Jeli pojawi si
nowe wartoci atrybutw, funkcje agregujce obliczane s od pocztku,
a stare wartoci s usuwane.

Visible

Okrela widoczno atrybutu (domylnie TRUE).

Dla wikszoci poziomw, dla ktrych ustalane s waciwoci, definiowana jest ich grupa okrelajca reakcj na pojawienie si podczas przetwarzania rnego rodzaju bdw.
Domylnie nastpuje zazwyczaj przerwanie przetwarzania i wygenerowanie komunikatu
o szczegowej przyczynie pojawienia si bdu. Miejsce definiowania niestandardowej reakcji w takich przypadkach prezentuje rysunek 5.136 na przykadzie wymiaru.
Natomiast szczegowy opis moliwych wartoci parametru zawiera tabela 5.11.
Aby dokoczy przegld waciwoci ustawianych dla rnych elementw hurtowni,
w tabeli 5.12 zawarto ich opis dla poziomu definiowania miary. Poniewa s one do
intuicyjne, nie zostay dodatkowo omwione w tekcie.

198

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 5.136. Ustawienie waciwoci dla grupy ErrorConfiguration na potrzeby przykadu


przetwarzania wymiaru
Tabela 5.11. Waciwoci zwizane z bdami
Waciwo

Opis

Key not found,

Definiuje akcje zwizane z sytuacjami wyjtkowymi dotyczcymi


kluczy:
Ignore error ignoruje bd;
Report and continue raportuje o pojawieniu si bdu
i kontynuuje przetwarzanie;
Report and stop raportuje o pojawieniu si bdu i przerywa
przetwarzanie.

Duplicate key,
Null key converted to unknown,
Null key not allowed

Key error action

Definiuje akcj dla sytuacji, kiedy nie znaleziono wartoci klucza:


Convert to unknown dodaje t warto do grupy nieznanych
wartoci Unknown;
Discard record pomija t warto podczas przetwarzania.

Ignore errors count

Ignoruje wszystkie bdy podczas przetwarzania.

Stop on error

Przerywa przetwarzanie po wystpieniu bdu. Ustawienie tej


waciwoci powoduje, e aktywne staj si waciwoci Number
of errors oraz On error action.

Number of errors

Liczba bdw, ktre bd zignorowane, zanim proces zostanie


przerwany.

On error action

Ustanawia akcj, ktra wystpuje po przekroczeniu limitu bdw:


Stop processing zatrzymuje przetwarzanie;
Stop logging przerywa zapis bdw do dziennika (plik loga),
ale kontynuuje przetwarzanie.

Error log path

Zawiera kwalifikowan nazw pliku dziennika.

Pierwsz pozycj tabeli 5.12 jest waciwo AggregateFunction, ktra okrela, jaka
funkcja jest wyznaczana dla atrybutu okrelajcego miar. Jak ju wielokrotnie
wspominano, domyln funkcj jest suma, drug czsto stosowan jest COUNT, wyznaczajca liczebno atrybutu. Jak pokazuje tabela 5.13, moliwe jest stosowanie
take wielu innych funkcji. Poza opisem wyraenia wyznaczonego przez funkcj tabela zawiera informacj o addytywnoci funkcji. Informacja ta ma wpyw na sposb
oraz czas przetwarzania miary, a co za tym idzie, caej kostki.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

199

Tabela 5.12. Waciwoci miary


Waciwo

Opis

AggregateFunction

Pokazuje obliczan funkcj agregujc.

DataType

Pokazuje typ danych kolumny w tabeli faktw definiujcej miar.

Description

Zawiera opis miary, ktry moe by dostpny dla aplikacji klienckich.

DisplayFolder

Pokazuje nazw folderu, w ktrym wywietlana jest miara. Podzia na grupy


jest uyteczny jako element porzdkujcy w przypadku zdefiniowania
duej liczby miar.

FormatString

Zawiera definicj formatowania wynikw wyznaczania funkcji agregujcej.

ID

Zawiera unikalny identyfikator miary, tylko do odczytu.

MeasureExpression

Zawiera wyraenie MDX definiujce miar.

Name

Pokazuje nazw logiczn miary.

Source

Zawiera nazw kolumny rdowej z tabeli faktw definiujc miar.

Visible

Okrela, czy miara jest widoczna.

Tabela 5.13. Funkcje agregujce definiujce miary


Funkcja

Addytywna

Opis

Sum

Tak

Oblicza sum wszystkich potomkw domylna.

Count

Tak

Zlicza wszystkie wzy potomne.

Min

Semi

Oblicza minimaln warto wrd wszystkich potomkw.

Max

Semi

Oblicza maksymaln warto wrd wszystkich potomkw.

DistinctCount

Nie

Zlicza wszystkie unikalne wartoci wzw potomnych.

None

Nie

Nie jest wyznaczana adna funkcja agregujca i wywietlane s


wszystkie wartoci wystpujce w wzach potomnych.

ByAccount

Semi

Wyznaczana jest funkcja agregujca taka sama jak w definicji


nadrzdnego wymiaru o waciwoci Account. Jeli nie ma takiego
wymiaru, traktowana jest tak, jakby ustawiono warto None.

AverageOfChildren

Semi

Oblicza warto redni ze wszystkich niepustych wartoci


wzw potomnych.

FirstChild

Semi

Pokazuje warto pierwszego potomka na licie wzw potomnych.

LastChild

Semi

Pokazuje warto ostatniego potomka na licie wzw potomnych.

FirstNonEmpty

Semi

Pokazuje warto pierwszego niepustego potomka na licie wzw


potomnych.

LastNonEmpty

Semi

Pokazuje warto ostatniego niepustego potomka na licie wzw


potomnych.

Addytywno funkcji agregujcej okrela, jak bdzie ona wyznaczana w przypadku zmiany zawartoci wymiaru. cisa addytywno oznacza, e do oblicze po zmianie nie jest
konieczne przeliczenie kostki wzgldem caego wymiaru, lecz tylko dodanie wyniku do
dopisanych wzw. Brak addytywnoci powoduje konieczno ponownego przetworzenia wszystkich wartoci. Semiaddytywno nie wymaga przeliczenia wszystkich wartoci,
ale nie jest to addytywno w sensie algebraicznym. Wymagana moe by znajomo
pewnych informacji dodatkowych o wymiarze oraz stanw przelicze czciowych.

200

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Ostatni zestaw waciwoci, zebranych w tabeli 5.14, dotyczy caej kostki. Poza waciwociami informacyjnymi znaczce miejsce maj informacje dotyczce sposobu
przechowywania kostki, definicji wyrae MDX oraz metod przetwarzania. Pojawia
si rwnie grupa ustawie w przypadku wystpowania bdw, ktr szczegowo
przedstawiono wczeniej.
Tabela 5.14. Waciwoci kostki
Waciwo

Opis

AggregationPrefix

Pokazuje wsplny przedrostek, uywany podczas tworzenia nazw


agregacji.

Collation

Pokazuje lokalny identyfikator (LCID) i flag zgodnoci, rozdzielone


podkrelnikiem, np. Latin1_General_C1_AS.

DefaultMeasure

Zawiera wyraenie MDX, definiujce domyln miar dla kostki.

Description

Pokazuje opis kostki, ktry moe by dostpny z aplikacji klienta.

ErrorConfiguration

Zawiera ustawienia dotyczce bdw zwizanych z: nieunikalnymi


kluczami (duplicate keys), nieokrelonymi wartociami klucza (unknown
keys), kluczami o wartoci null (null keys), ograniczeniem liczby bdw
(error limits) oraz akcjami wystpujcymi na skutek wykrycia bdu
w pliku, do ktrego te informacje s zapisywane. Szczegy w tabeli 5.11.

EstimatedRows

Pokazuje szacunkow liczb wierszy w kostce.

ID

Pokazuje unikalny identyfikator kostki.

Language

Wskazuje identyfikator domylnego jzyka dla kostki.

Name

Wskazuje nazw kostki.

ProactiveCaching

Definiuje ustawienia pamici cash dla kostki.

ProcessingMode

Wybiera sposb przetwarzania kostki:


Regular indeksy i agregacja s obliczane podczas przetwarzania;
LazyOptimizations indeksy i agregacja s obliczane po zakoczeniu
przetwarzania.

ProcessingPriority

Okrela priorytet przetwarzania kostki wzgldem procesw ta takich


jak te, ktre wynikaj z LazyOptimizations. Wartoci domyln jest 0
najwyszy priorytet.

ScriptCacheProcessingMode

Wskazuje, kiedy bdzie tworzony cash dla przetwarzania skryptw


w trakcie przetwarzania lub po przetwarzaniu. Opcje Regular lub Lazy.

ScriptErrorHandlingMode

Definiuje sposb reagowania w przypadku pojawienia si bdw:


IgnoreNone aden bd nie jest pomijany;
IgnoreAll wszystkie bdy s pomijane.

Source

Wskazuje rdowy obiekt po stronie relacyjnej, uyty do definicji kostki.

StorageLocation

Wskazuje miejsce przechowywania kostki na dysku. Jeli nie wskazano


jawnie, jest dziedziczony po hurtowni, w ktrej tworzymy kostk.

StorageMode

Wskazuje sposb przechowywania kostki:


MOLAP struktura wielowymiarowa;
ROLAP struktura relacyjna;
HOLAP struktura hybrydowa, czciowo wielowymiarowa,
czciowo relacyjna.

Visible

Wskazuje, czy kostka ma by widoczna dla uytkownika.

Rozdzia 5. Wizualne tworzenie elementw hurtowni danych

201

Jak mona byo si przekona z lektury tego rozdziau, potencjalnych metod definiowania
elementw hurtowni danych jest wiele. Pojawia si wic problem, ktre z nich naley
wybra. Mona powiedzie, e wiadomego wyboru powinien zawsze dokona twrca rozwizania OLAP. Jednak najczciej da si stwierdzi, e najlepszym rozwizaniem wydaje si stosowanie jako rde perspektyw, ktre zawieraj obliczone wyraenia, niezbdne dla poprawy czytelnoci czy jakoci przetwarzania. Poniewa
bezporednie odwoywanie si do perspektyw wie si z koniecznoci przetworzenia czasami bardzo zoonego zapytania definiujcego dan perspektyw, wskazane
wydaje si materializowanie ich do postaci tabel serwera bazy danych. Te zabiegi
powinny spowodowa popraw wydajnoci opracowywanego rozwizania analitycznego. Std generowanie obiektw od gry do dou od struktury logicznej do tabeli
schematu relacyjnego, ktra nastpnie zostaje zasilona danymi relacyjnymi wydaje si
rozwizaniem korzystnym, chocia trudniejszym do praktycznego opanowania.

202

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rozdzia 6.

Analiza danych
z wykorzystaniem
rozszerzenia MDX SQL
Podstawy skadni zapyta MDX
Dostp do elementw hurtowni danych i ogldanie przetworzonych struktur s moliwe
nie tylko z poziomu Analysis Services. Moemy manipulowa elementami hurtowni,
wykorzystujc rozszerzenie jzyka zapyta do odpytywania struktur wielowymiarowych MDX SQL (Multidimensional extension). Jednym z narzdzi umoliwiajcych
uywanie zapyta jest SQL Server Management Studio, ale mog by one stosowane
rwnie z poziomu jzykw wyszego rzdu. Poniewa wbudowane narzdzie MS
SQL daje moliwo atwego konstruowania zapyta i testowania ich poprawnoci,
jest zdecydowanie najlepszym rozwizaniem dla osb rozpoczynajcych nauk tego
jzyka. Jest ono bardzo dobrym narzdziem dydaktycznym i dlatego analiz skadni
i prezentacje przykadw rozpoczniemy od jego zastosowania. Pomimo atwej obsugi
zapytania MDX wymagaj dobrego opanowania idei przetwarzania wielowymiarowego i zrozumienia wizualnego ich tworzenia. Lepiej nie postpowa jak bohater
Terryego Pratchetta i niestety dua cz studentw: Zrozumiae? Nie. Miaem
tylko nadziej, e jeli nic nie bd mwi, przestaniesz prbowa mi to wytumaczy (Terry Pratchett, Ostatni bohater). W razie potrzeby lepiej wrci do poprzednich rozdziaw i sprbowa jeszcze raz zmierzy si z przykadami.
Podobnie jak pokazano w rozdziale 2., z menu Start uruchamiamy SQL Server Management Studio. Jednak zamiast czy si z silnikiem relacyjnym, musimy poczy
si z hurtowni danych zgodnie z tym, co zaprezentowano na rysunku 6.1. Jak wida,
moliwa jest tylko autoryzacja za pomoc danych logowania do systemu operacyjnego,
na co ju zwrcono uwag w omwieniu wizualnego tworzenia elementw hurtowni.

204

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 6.1.
czenie si
z hurtowni danych

Po udanym logowaniu w panelu Object Explorer dostpne s wszystkie struktury


wielowymiarowe utworzone na lokalnym komputerze za pomoc Analysis Services.
Na rysunku 6.2 przedstawiono ten panel z czciowo rozwinitym wzem dla obiektu
o nazwie hurtownia. Na pasku narzdziowym zostaa wskazana ikona powodujca otwarcie nowej zakadki w centralnym panelu, pozwalajcej na zadawanie zapyta MDX.
Rysunek 6.2.
Panel Object Browser
z wykazem dostpnych
hurtowni i wskazaniem
ikony uruchamiajcej
panel zapyta MDX

Po uruchomieniu panelu zapyta MDX pene okno aplikacji MS SQL Server Management Studio ma posta tak, jak przedstawiono na rysunku 6.3. Zakadka zapyta jest
podzielona na trzy obszary. W lewej czci okna na licie mamy moliwo wyboru
kostki z biecej hurtowni danych; kostka ta jest wskazywana przez pole listy w pasku narzdziowym, a nie przez wybr w panelu Object Browser. Mog by one takie same,
jak pokazano na rysunku, ale nie musz. Naley zaznaczy, e na licie dostpnych
kostek biecej hurtowni znajduj si tylko obiekty, ktrych przetworzenie zakoczyo si sukcesem. Dla wybranej kostki przedstawiona jest poniej jej pena struktura logiczna: miary, KPIs oraz wymiary. Na zakadce Functions bez wzgldu na dokonany wybr znajduje si pogrupowany funkcjonalnie wykaz funkcji. Na rysunku 6.4
wida fragment okna zapyta MDX z rozwinitym jednym wzem drzewa przedstawiajcego dostpne funkcje w przykadowej grupie Others. Obiekty z obu zakadek
mog by wykorzystane do budowania zapyta przez zastosowanie techniki przecignij i upu. Taka metoda jest wskazana dlatego, e jak pokazano wczeniej, kreatory nie
zachowuj przyjtych powszechnie zasad nazewniczych; dotyczy to gwnie stosowania spacji jako separatora. W prawej czci na grze mamy panel, w ktrym piszemy
zapytania, a na dole otrzymujemy ich wynik w postaci tabelarycznej oraz komunikaty
o przetwarzaniu, w tym rwnie o bdach.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

205

Rysunek 6.3. SQL Server Management Studio po poczeniu z silnikiem Analysis Services i po
przetworzeniu zapytania MDX
Rysunek 6.4.
SQL Server
Management Studio
po poczeniu
z silnikiem Analysis
Services; funkcje
MDX z rozwinitym
jednym wzem
po przetworzeniu
zapytania MDX

Przykadem do elementarnego zastosowania MDX jest zapytanie wywietlajce


wartoci wszystkich miar dla kostki Zyski. Spowoduje ono wywietlenie w opisie kolumn nazwy miary Wartosc, a w komrce tabeli jej wartoci wyznaczonej dla caoci.
Graficzn prezentacj wynikw tego zapytania przedstawia rysunek 6.5.
SELECT
[Measures].[Wartosc] ON COLUMNS
FROM [Zyski]

206

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 6.5.
SQL Server
Management Studio po
poczeniu z silnikiem
Analysis Services
i po przetworzeniu
zapytania MDX

Oprcz definicji wartoci wywietlanych w kolumnach kostki moliwe jest wywietlenie innego zestawu danych w opisie wierszy. Definicje obiektw wywietlanych
w obu osiach s separowane przecinkiem, a kolejno ich wymieniania jest dowolna.
W przedstawionym przykadzie pozostawiono poprzedni wybr dla kolumn, natomiast
jako opisu wierszy uyto wszystkich czonkw atrybutu [Nazwa Kategorii] wymiaru
Towar_calosc. W pierwszym przypadku konieczne jest zastosowanie nawiasu kwadratowego ze wzgldu na wystpujc w nazwie spacj. W drugim przypadku nawias
kwadratowy nie jest wymagany. Wywietlenie wszystkich czonkw dla danego atrybutu wymiaru lub miary uzyskujemy dziki zastosowaniu metody members.
SELECT
[Towar_calosc].[Nazwa Kategorii].members ON ROWS,
[Measures].[Wartosc] ON COLUMNS
FROM [Zyski]

Zamiast stosowa nazwy logiczne Columns i Rows moemy uy nazwy oglnej Axis(nr),
ktrej parametrem jest identyfikator o wartociach rozpoczynajcych si od 0. W prezentowanym przykadzie zastosowano nazwy oglne, przy okazji zamieniajc kolejno wywietlania elementw opisu osi. Wynika z tego, e Axis(0) opisuje kolumny, a Axis(1)
wiersze tabeli. Poniewa w zapytaniu musz pojawi si wszystkie kolejne indeksy
osi, rozpoczynajc od 0, w przypadku stosowania nazw logicznych w najprostszym
zapytaniu obowizkowe jest uycie Columns. Grny zakres indeksw osi nie zosta
okrelony. Skutek wykonania prezentowanego zapytania przedstawia rysunek 6.6.
SELECT
[Towar_calosc].[Nazwa Kategorii].members ON AXIS(0),
[Measures].[Wartosc] ON AXIS(1)
FROM [Zyski]

Rysunek 6.6.
SQL Server
Management Studio
po poczeniu
z silnikiem Analysis
Services i po
przetworzeniu
zapytania MDX

W przypadku nazw logicznych kolejnym numerom odpowiadaj nazwy: Columns, Rows,


Pages, Chapters, Sections. Jak wida, zapytanie moe si tutaj odwoywa do co najwyej piciu wymiarw. Niestety, wykorzystywane przez nas narzdzie Management
Studio pozwala tylko na odpytywanie struktury o najwyej dwch wymiarach, co wynika z zastosowanej kontrolki do prezentowania wynikw. Zapytania o wikszej liczbie
wymiarw wymagaj zbudowania wasnego rodowiska programistycznego.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

207

Poniewa w firmie nie sprzedawano towarw nalecych do czci kategorii zdefiniowanych tabel sownikow, a nastpnie wymiarem, w niektrych komrkach tabeli pojawia
si warto (null). Informacja niesiona przez takie rezultaty jest z reguy mao istotna,
dlatego czsto eliminuje si j z tabeli wynikowej. Mona tego dokona, stosujc
funkcj NONEMPTY, ktrej parametrem jest definicja czonkw atrybutu. W przykadowym zapytaniu ponownie zamieniono kolejno osi, aby prezentacja wynikw bya
czytelniejsza. Skutek wykonania zapytania jest przedstawiony na rysunku 6.7.
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS,
[Measures].[Wartosc] ON COLUMNS
FROM [Zyski]

Rysunek 6.7.
SQL Server
Management Studio
po poczeniu
z silnikiem Analysis
Services i po
przetworzeniu
zapytania MDX

Od tej chwili wynikowe rezultaty nie bd ju prezentowane w postaci graficznej.


Zamiast takiej formy bdzie stosowana posta tabelaryczna. Ze wzgldu na znaczny
rozmiar tabeli wynikowej przedstawiony bdzie tylko ograniczony zestaw wierszy i kolumn. Aby da moliwo porwnania tych form prezentacji wynikw, zestaw rekordw widoczny na rysunku 6.7 zosta rwnie pokazany w tabeli 6.1 ze zredukowan
liczb wierszy.
Tabela 6.1. Skutek wykonania zapytania wyznaczajcego wartoci sprzeday dla kategorii towarw
Wartosc
All

92984.44

Akcesoria

7765.48

GPS

9794

...

Telefony

10928.25

Zegary

5856.49

Do tej pory wywietlalimy czonkw tylko dla atrybutw wymiaru, natomiast miara
bya wskazywana jawnie. Moliwe jest wskazanie wszystkich czonkw wymiaru
dziki zastosowaniu metody members, co zostao uwidocznione na skutek przeksztacenia poprzedniego zapytania na ponisz posta:

208

Hurtownie danych. Od przetwarzania analitycznego do raportowania


SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS,
[Measures].Members ON COLUMNS
FROM [Zyski]

W caym rozdziale powiconym MDX bd stara si zachowa, gdzie to tylko bdzie moliwe, konwencj, e kolejne zapytanie jest modyfikacj, rozszerzeniem poprzedniego. Rezultat wykonania zapytania zosta przedstawiony w tabeli 6.2. Naley
zwrci uwag na to, e w przypadku miar metoda members wywietla tylko miary bezporednio zdefiniowane na kostce. Miary obliczane nie s pokazywane.
Tabela 6.2. Skutek wykonania zapytania wyznaczajcego wszystkie miary dla kategorii towarw
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

All

1181

92984.44

71234.97

402

Akcesoria

156

7765.48

6056.27

53

GPS

96

9794

7493.74

30

...

...

...

...

Telefony

126

10928.25

7484.82

43

Zegary

71

5856.49

4280.42

25

W celu wywietlenia miar obliczanych naley zastosowa funkcj ADDCALCULATEDMEMBERS(miara), ktrej atrybutem jest zestaw czonkw wymiaru lub grupy,
dla ktrych je zdefiniowano, jak pokazuje kolejne zapytanie. Reprezentatywny zestaw
rekordw przez nie zwracanych jest przedstawiony w tabeli 6.3.
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS,
ADDCALCULATEDMEMBERS([Measures].Members) ON COLUMNS
FROM [Zyski]

Tabela 6.3. Skutek wykonania zapytania wyznaczajcego miary cznie z obliczanymi dla kategorii towarw
Ilosc

Wartosc

Wartosc
Zakupu

Wszystkie
Transakcje
Count

Zysk

ZyskProcentowy

SredniZysk

All

1181

92984.44

71234.97

402

$21,749.47

23.39%

018 z

Akcesoria

156

7765.48

6056.27

53

$1,709.21

22.01%

011 z

GPS

96

9794

7493.74

30

$2,300.26

23.49%

024 z

...

...

...

...

...

...

...

...

Telefony

126

10928.25

7484.82

43

$3,443.43

31.51%

027 z

Zegary

71

5856.49

4280.42

25

$1,576.07

26.91%

022 z

Kolejny przykad pokazuje, e zamiast elementw pojedynczego atrybutu moliwe jest


wywietlanie ich zestawu zbioru Set. Jego definicja jest ujta w nawias klamrowy
{ }, a elementy s separowane przecinkami. Do prezentacji wybrano dzieci dwch
kategorii: [GPS] i [Muzyka]. Metoda children zwraca wszystkich czonkw podrzdnego poziomu wskazanego atrybutu hierarchii. Dla pojedynczego atrybutu niedefiniujcego hierarchii metoda ta nie moe zosta zastosowana.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

209

SELECT
Measures.Members ON COLUMNS,
{[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[GPS].Children,
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Muzyka].Children}
ON ROWS
FROM [Zyski]

Rezultaty otrzymane na skutek wykonania zapytania zawiera tabela 6.4. Wad takiej
definicji zbioru jest to, e bez znajomoci struktury danych trudno jest okreli miejsce
podziau midzy dziemi wskazanych kategorii. Po zapoznaniu si z przedstawionym
wynikiem moemy przypuszcza bez analizy danych rdowych, tylko na podstawie przesanek e podzia ten ma miejsce midzy pozycjami Tom A1 i Kapela.
Tabela 6.4. Skutek wykonania zapytania wyznaczajcego miary dla dzieci dwch kategorii towarw
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

Gio 15

13

891.15

759.98

Gio 200 S

952.96

847.04

Mov 200

12

660.96

541.92

Mov 300

23

2479.86

1909.23

Mov 350

19

2307.55

1869.6

Tom A1

21

2501.52

1565.97

Kapela

15

1314.45

823.95

Koncerty WAM

21

2308.74

1904.07

Mazurki FCh

21

2277.24

1654.59

Opera
Wiedenska

18

2063.16

1515.96

Skadanka

204.33

141.19

Oczywicie moliwe jest zastosowanie w definicji zestawu atrybutw wskazanego


czonka poziomu nadrzdnego oraz wszystkich jego dzieci. Mona w tym celu uy
prezentowanej ju metody children albo funkcji DESCENDANTS( ), jak pokazano
w przykadowym kodzie. Argumentami tej funkcji s: czonek wybranego poziomu
hierarchii, dla ktrego wyznaczamy potomkw, oraz poziom, na ktrym ci potomkowie maj by wybrani. O ile metoda children pozwala tylko na wyznaczenie wzw
lecych bezporednio poniej wybranego wza, o tyle funkcja DESCENDANTS( )
umoliwia wywietlenie potomkw lecych w dowolnej odlegoci od wza macierzystego protoplasty. Ze wzgldu na to, e w przykadzie nie istniej bardziej zagniedone poziomy, wskazany zosta rwnie poziom lecy bezporednio poniej
okrelonego pierwszym parametrem zbioru Set. Wynikowy zestaw rekordw jest
zaprezentowany w tabeli 6.5.
SELECT
Measures.Members ON COLUMNS,
{[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[GPS],
DESCENDANTS([Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[GPS], [Id Towaru])}
ON ROWS
FROM [Zyski]

210

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.5. Skutek wykonania zapytania wyznaczajcego miary dla wskazanej kategorii towarw i jej dzieci
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

GPS

96

Gio 15

13

9794

7493.74

30

891.15

759.98

Gio 200 S

952.96

847.04

Mov 200

12

660.96

541.92

Mov 300

23

2479.86

1909.23

Mov 350

19

2307.55

1869.6

Tom A1

21

2501.52

1565.97

Podobnie jak dla pojedynczego atrybutu reprezentujcego wymiar, rwnie w przypadku stosowania zbioru moliwe jest wywietlenie miar obliczanych za pomoc
funkcji ADDCALCULATEDMEMBERS( ), jak pokazuje kolejny przykad zapytania,
ktrego rezultat wykonania zawiera tabela 6.6.
SELECT
ADDCALCULATEDMEMBERS(Measures.Members) ON COLUMNS,
{[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[GPS],
DESCENDANTS([Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[GPS],[Id Towaru])}
ON ROWS
FROM [Zyski]

Tabela 6.6. Skutek wykonania zapytania wyznaczajcego miary zwyke oraz obliczane dla wskazanej
kategorii towarw i jej dzieci
Wartosc
Zakupu

Wszystkie
Transakcje
Count

Zysk

ZyskProcentowy

SredniZysk

Ilosc

Wartosc

GPS

96

9794

7493.74

30

$2,300.26

23.49%

024 z

Gio 15

13

891.15

759.98

$131.17

14.72%

010 z

Gio 200 S

952.96

847.04

$105.92

11.11%

013 z

Mov 200

12

660.96

541.92

$119.04

18.01%

010 z

Mov 300

23

2479.86

1909.23

$570.63

23.01%

025 z

Mov 350

19

2307.55

1869.6

$437.95

18.98%

023 z

Tom A1

21

2501.52

1565.97

$935.55

37.40%

045 z

Podobnie jak w przypadku wymiarw, rwnie definicja wywietlanych miar moe by


zestawem skadajcym si ze wskazanych wartoci. W przedstawionym poniej przykadzie wybrana zostaa jedna miara podstawowa, [Wartosc Zakupu], oraz dwie miary obliczane: [Zysk] i [ZyskProcentowy]. Jak wida, tutaj oba typy miar zachowuj si tak samo.
Wynikowy zestaw rekordw wygenerowany tym zapytaniem jest zawarty w tabeli 6.7.
SELECT
{[Measures].[Wartosc Zakupu], [Measures].[Zysk],
[Measures].[ZyskProcentowy]} ON COLUMNS,
{[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[GPS],
DESCENDANTS([Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[GPS], [Id Towaru])}
ON ROWS
FROM [Zyski]

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

211

Tabela 6.7. Skutek wykonania zapytania wyznaczajcego wybrane miary dla wskazanej kategorii
towarw i jej dzieci
Wartosc Zakupu

Zysk

ZyskProcentowy

GPS

7493.74

$2,300.26

23.49%

Gio 15

759.98

$131.17

14.72%

Gio 200 S

847.04

$105.92

11.11%

Mov 200

541.92

$119.04

18.01%

Mov 300

1909.23

$570.63

23.01%

Mov 350

1869.6

$437.95

18.98%

Tom A1

1565.97

$935.55

37.40%

Definicja zestawu danych reprezentujcych wymiar moe te odnosi si do wszystkich czonkw dwch rnych atrybutw. W zaprezentowanym przykadzie najpierw
zostan wywietlone wszystkie kategorie, a po ostatniej z nich wszystkie towary. Problemem jest wyznaczenie miejsca, w ktrym wystpuje granica podziaowa midzy
dwoma elementami zestawu tabela 6.8.
SELECT
{[Measures].[Wartosc Zakupu], [Measures].[Zysk]} ON COLUMNS,
{[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].Members,
[Towar_calosc].[Kategoria_towar].[Id Towaru].Members}
ON ROWS
FROM [Zyski]

Tabela 6.8. Skutek wykonania zapytania wyznaczajcego wybrane miary kolejno dla wszystkich
kategorii oraz wszystkich towarw
Wartosc Zakupu

Zysk

Akcesoria

6056.27

$1,709.21

Biurowe

(null)

(null)

...

Zegary

4280.42

$1,576.07

Unknown

(null)

(null)

Pasek

185.2

$108.80

Podstawka

193.68

$56.61

...

Uchwyt

146.88

$83.97

Zestaw Lux

1469.6

$272.80

...

Budzik

135.24

$66.60

Budzik Mech.

21.49

$14.01

...

...

...

Wielofunkcyjny

175.02

$98.82

Unknown

(null)

(null)

212

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Operacje na zbiorach atrybutw


Jak ju wspomniano, w poprzednim przykadzie istotn wad stosowania zestawu
atrybutw reprezentujcych wymiar moe by kopot ze znalezieniem midzy nimi
granicy w wynikowej tabeli. Innym podejciem do problemu jednoczesnej prezentacji
atrybutw z dwch poziomw jest wykorzystanie funkcji CROSSJOIN( ), co pokazuje
kolejne zapytanie.
SELECT
{[Measures].[Wartosc Zakupu], [Measures].[Zysk],
[Measures].[ZyskProcentowy]} ON COLUMNS,
CROSSJOIN(
[Towar_calosc].[Nazwa Kategorii].Members,
[Towar_calosc].[Id Towaru].Members)
ON ROWS
FROM [Zyski]

Argumentami funkcji CROSSJOIN( ) s dwa atrybuty z definicji wymiaru lub dwch


hierarchii zdefiniowanych na wymiarze. Funkcja ta tworzy krotk, czyli do kadej wartoci jednego atrybutu s doczane wartoci z drugiego atrybutu wszystkie poczone
z pierwszym. Uwaga: w funkcji tej nie mona uywa dwa razy tej samej hierarchii.
Moliwe jest stosowanie atrybutw tego samego wymiaru, poniewa mona powiedzie, e tworz one dwie rne jednopoziomowe hierarchie. Jeli midzy wskazanymi
w tej funkcji atrybutami nie jest zdefiniowana adna relacja, wynikowy zestaw jest
krotk w rozumieniu cisym (kady argument z kadym). Analizujc wyniki zapytania przedstawione w tabeli 6.9, zauwaamy, e dla obu argumentw wywietlony zosta wze ALL, reprezentujcy wszystkie wartoci danego poziomu, w przypadku poziomu podrzdnego wszystkie powizane z wzem nadrzdnym. Na analogicznych
zasadach wprowadzono wze Unknown, reprezentujcy wartoci kluczy wystpujce
po stronie tabeli faktw, lecz niezdefiniowane w wymiarach.
Podobnie jak w przypadku analizy zyskw dla kategorii towaru, przy zastosowaniu
krotki obserwujemy puste rekordy. Skoro firma nie sprzedaa adnego towaru reprezentujcego dan kategori, to take dla caej kategorii sprzeda ma warto null. Rwnie brak elementw nieznanych powoduje wywietlenie tej samej wartoci. Uzasadnione jest zatem zastosowanie funkcji NONEMPTY( ), eliminujcej puste wiersze dla
elementw krotki. Wynik wykonania tego zapytania jest przedstawiony w tabeli 6.10,
przy czym wyeliminowane na skutek dziaania funkcji NONEMPTY( ) rekordy zostay
podwjnie przekrelone.
SELECT
{[Measures].[Wartosc Zakupu], [Measures].[Zysk],
[Measures].[ZyskProcentowy]} ON COLUMNS,
NONEMPTY(CROSSJOIN(
[Towar_calosc].[Nazwa Kategorii].Members,
[Towar_calosc].[Id Towaru].Members))
ON ROWS
FROM [Zyski]

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

213

Tabela 6.9. Skutek wykonania zapytania wyznaczajcego wybrane miary dla poczonych funkcj
CROSSJOIN kategorii oraz towarw
Wartosc Zakupu

Zysk

ZyskProcentowy

All

All

71234.97

$21,749.47

23.39%

All

Akwarela

644.76

$77.13

10.68%

All

Analiza

1263.96

$576.36

31.32%

...

...

...

...

All

Zestaw Lux

1469.6

$272.80

15.66%

All

Unknown

(null)

(null)

(null)

Akcesoria

All

6056.27

$1,709.21

22.01%

Akcesoria

Pasek

185.2

$108.80

37.01%

...

...

...

...

Akcesoria

Zestaw Lux

1469.6

$272.80

15.66%

Biurowe

All

(null)

(null)

(null)

...

...

...

...

Fotograficzne

All

(null)

(null)

(null)

GPS

All

7493.74

$2,300.26

23.49%

GPS

Gio 15

759.98

$131.17

14.72%

...

...

...

...

GPS

Tom A1

1565.97

$935.55

37.40%

...

...

...

...

Zegary

All

4280.42

$1,576.07

26.91%

Zegary

Budzik

135.24

$66.60

33.00%

...

...

...

...

Zegary

Wielofunkcyj
ny

175.02

$98.82

36.09%

Unknown

All

(null)

(null)

(null)

Unknown

Unknown

(null)

(null)

(null)

W wielu przypadkach nie jestemy zainteresowani przedstawieniem globalnego podsumowania reprezentowanego przez wze ALL; ponadto dla wskazanego towaru powiela on warto wystpujc przy przypisaniu go do waciwej kategorii. Usunicie
nadmiarowej informacji moemy uzyska, stosujc funkcj FILTER( ), ktrej pierwszym parametrem jest wyraenie reprezentujce filtrowany zestaw danych (czonkowie
atrybutu lub poziomu hierarchii), a drugim wyraenie zwracajce warto logiczn.
Wywietlane bd tylko te wzy, dla ktrych wyraenie jest prawdziwe. Wyraenie
filtrujce wskazuje te nazwy kategorii, ktre s rne od wza ALL. Wynikowy zestaw
rekordw jest przedstawiony w tabeli 6.11.
SELECT
{[Measures].[Wartosc Zakupu],[Measures].[Zysk],
[Measures].[ZyskProcentowy]} ON COLUMNS,

214

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.10. Skutek wykonania zapytania wyznaczajcego wybrane miary dla poczonych funkcj
CROSSJOIN kategorii oraz towarw z wyeliminowanymi pustymi rekordami (podwjnie przekrelone
wartoci usunito)
Wartosc Zakupu

Zysk

ZyskProcentowy

All

All

71234.97

$21,749.47

23.39%

All

Akwarela

644.76

$77.13

10.68%

All

Analiza

1263.96

$576.36

31.32%

...

...

...

...

Akcesoria

All

6056.27

$1,709.21

22.01%

Akcesoria

Pasek

185.2

$108.80

37.01%

...

...

...

...

Akcesoria

Zestaw Lux

1469.6

$272.80

15.66%

Biurowe

All

(null)

(null)

(null)

...

...

...

...

Fotograficzne

All

(null)

(null)

(null)

GPS

All

7493.74

$2,300.26

23.49%

GPS

Gio 15

759.98

$131.17

14.72%

...

...

...

...

Zegary

Wielofunkcyj
ny

175.02

$98.82

36.09%

Unknown

All

(null)

(null)

(null)

Unknown

Unknown

(null)

(null)

(null)

Tabela 6.11. Skutek wykonania zapytania wyznaczajcego wybrane miary dla poczonych funkcj
CROSSJOIN kategorii oraz towarw z wyeliminowanymi pustymi rekordami i wzem ALL dla poziomu
kategorii
Wartosc Zakupu

Zysk

ZyskProcentowy

Akcesoria

All

6056.27

$1,709.21

22.01%

Akcesoria

Pasek

185.2

$108.80

37.01%

...

...

...

...

Akcesoria

Zestaw Lux

1469.6

$272.80

15.66%

...

...

...

...

Zegary

Wielofunkcyjny

175.02

$98.82

36.09%

NONEMPTY(CROSSJOIN(
FILTER (
[Towar_calosc].[Nazwa Kategorii].Members,
[Towar_calosc].[Nazwa Kategorii]<>[Towar_calosc].[Nazwa Kategorii].[All]),
[Towar_calosc].[Id Towaru].Members))
ON ROWS
FROM [Zyski]

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

215

Na podobnej zasadzie moemy dokona usunicia wzw ALL na poziomie atrybutu


reprezentujcego towar. Oba atrybuty po odfiltrowaniu podlegaj dziaaniu funkcji
CROSSJOIN, jak pokazano w kolejnym przykadzie; rezultaty tej operacji przedstawiono
w tabeli 6.12. W porwnaniu z poprzedni tabel przykadowy wyeliminowany rekord zosta podwjnie przekrelony.
SELECT
{[Measures].[Wartosc Zakupu], [Measures].[Zysk],
[Measures].[ZyskProcentowy]} ON COLUMNS,
NONEMPTY(CROSSJOIN(
FILTER (
[Towar_calosc].[Nazwa Kategorii].Members,
[Towar_calosc].[Nazwa Kategorii]<>[Towar_calosc].[Nazwa Kategorii].[All]),
FILTER (
[Towar_calosc].[Id Towaru].Members,
[Towar_calosc].[Id Towaru]<>[Towar_calosc].[Id Towaru].[All])))
ON ROWS
FROM [Zyski]

Tabela 6.12. Skutek wykonania zapytania wyznaczajcego wybrane miary dla poczonych funkcj
CROSSJOIN kategorii oraz towarw z wyeliminowanymi pustymi rekordami i wzem ALL dla obu poziomw
(podwjnie przekrelone wartoci usunito)
Wartosc Zakupu

Zysk

ZyskProcentowy

Akcesoria

All

6056.27

$1,709.21

22.01%

Akcesoria

Pasek

185.2

$108.80

37.01%

...

...

...

Akcesoria

Zestaw Lux

1469.6

$272.80

15.66%

...

...

...

Zegary

Wielofunkcyjny

175.02

$98.82

36.09%

Prezentowane do tej pory wyniki mona okreli jako dwuwymiarowe, gdy na jednej
osi przedstawiane byy wartoci atrybutw, ktre mona uwaa za dziedzin funkcji,
a na drugiej miary, ktre mona interpretowa jako wartoci funkcji. Moliwe jest jednak
tworzenie zapyta zwracajcych opis struktur trjwymiarowych. W takim przypadku
obie osie reprezentuj dziedziny dwch zmiennych (atrybutw), natomiast w komrkach
zawarte s wartoci funkcji (funkcja dwch zmiennych). Prost ilustracj prowadzc
do takiego wyniku bdzie zapytanie, w ktrym opis kolumn stanowi nazwy kategorii
towarw, wierszy wojewdztw, z ktrych pochodz klienci. Natomiast komrki zawieraj
warto sprzeday, co zostao zdefiniowane dziki zastosowaniu klauzuli WHERE.
Jak wida, w zapytaniach MDX odgrywa ona nieco inn rol ni w standardowych
zapytaniach SQL. Przede wszystkim peni funkcj klauzuli wskazujcej na miar,
ktra ma by wywietlona. Wynikowy zestaw rekordw przedstawia tabela 6.13.
SELECT
[Towar_calosc].[Nazwa Kategorii].Members ON COLUMNS,
[Klienci].[Wojewdztwo].Members ON ROWS
FROM [Zyski]
WHERE [Measures].[Wartosc]

216

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.13. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towaru
dla klientw pochodzcych z rnych wojewdztw
All

Akcesoria

Biurowe

Zegary

Unknown

All

92984.44

7765.48

(null)

...

5856.49

(null)

dolnolskie

(null)

(null)

(null)

(null)

(null)

kujawsko-pomorskie

6818.15

688.96

(null)

(null)

(null)

lubelskie

2896.11

424.26

(null)

265.92

(null)

lubuskie

(null)

(null)

(null)

(null)

(null)

dzkie

35722.57

4619.57

(null)

...

2604.63

(null)

...

...

...

...

wielkopolskie

13841.01

1101.81

(null)

1254.7

(null)

zachodniopomorskie

(null)

(null)

(null)

(null)

(null)

Unknown

(null)

(null)

(null)

(null)

(null)

Nie wszystkie dane sownikowe opisujce zarwno lokalizacj klienta, jak i kategori
towarw zostay wykorzystane. Innymi sowy, nie handlowano czci kategorii, a klienci
pochodzili nie ze wszystkich wojewdztw. Zatem ponownie pojawia si problem eliminowania pustych wierszy i kolumn. Tak samo jak w poprzednich przykadach do atrybutw opisujcych obie osie zostaa zastosowana funkcja NONEMPTY( ). W wikszoci
kolejnych przykadw funkcja ta bdzie wykorzystywana od razu bez dodatkowego
komentarza. Rezultat wykonania zaprezentowanego zapytania zawiera tabela 6.14. Jak
wida, dla wojewdztwa kujawsko-pomorskiego oraz kategorii zegary moliwe jest wystpienie wartoci null, poniewa eliminacji podlegaj tylko te wiersze i kolumny, w ktrych wszystkie komrki s puste.
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON COLUMNS,
NONEMPTY([Klienci].[Wojewdztwo].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Wartosc]

Tabela 6.14. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towaru
dla klientw pochodzcych z rnych wojewdztw z eliminacj pustych wierszy i kolumn
All

Akcesoria

Zegary

All

92984.44

7765.48

...

5856.49

kujawsko-pomorskie

6818.15

688.96

(null)

lubelskie

2896.11

424.26

265.92

dzkie

35722.57

4619.57

...

2604.63

...

...

wielkopolskie

13841.01

1101.81

1254.7

Drug rol klauzuli WHERE jest definiowanie plastra, co mona rozumie jako filtrowanie. O ile pierwszy parametr tej klauzuli definiuje wywietlan miar, o tyle drugi wskazuje na wartoci, dla ktrych ma by ona wywietlana. W takim przypadku obie wielkoci
musz by umieszczone w nawiasie i rozdzielone przecinkiem. W prezentowanym

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

217

przykadzie bdzie pokazywana warto sprzeday kategorii towarw dla klientw


pochodzcych z rnych wojewdztw dokonana w roku 2003. Poniewa skorzystano
z definicji czasu kalendarzowego, wskazanie roku odbywa si przez okrelenie penej
wartoci daty razem z czasem. Wszystkie atrybuty tego wymiaru maj czas ustawiony
na T00:00:00, co oczywicie nie oznacza, e sprzeda odbywaa si o pnocy, lecz jest
tylko konsekwencj ustawie generowania tego typu wymiaru. Znak ampersand (&),
ktry poprzedza napis reprezentujcy dat, oznacza, e korzystamy z wartoci atrybutu, a nie z jego nazwy logicznej.
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON COLUMNS,
NONEMPTY([Klienci].[Wojewdztwo].Members) ON ROWS
FROM [Zyski]
WHERE ([Measures].[Wartosc], [Time].[Year].&[2003-01-01T00:00:00])

Taki zapis jest trudny w uyciu, jeli nie korzystamy z metody przecignij i upu,
dlatego rwnowanym podejciem jest zastosowanie nazw atrybutu tak, jak jest pokazane
na podgldzie przetworzonego wymiaru. Std w kolejnym przykadzie uyto napisu
[Calendar 2003], ktry reprezentuje nazw przypisan do wartoci atrybutu. W takim
przypadku znak & nie wystpuje. Poniewa rezultat wykonania obu zapyta jest dokadnie taki sam, zosta przedstawiony w jednej tabeli 6.15. Tak jak poprzednio,
w niektrych komrkach pojawiaj si wartoci null, poniewa eliminacja dotyczy tylko
tych kategorii i wojewdztw, dla ktrych niczego nie sprzedano (cay wiersz pusty,
caa kolumna pusta).
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON COLUMNS,
NONEMPTY([Klienci].[Wojewdztwo].Members) ON ROWS
FROM [Zyski]
WHERE ([Measures].[Wartosc], [Time].[Year].[Calendar 2003])

Tabela 6.15. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towaru
dla klientw pochodzcych z rnych wojewdztw w roku 2003 z eliminacj pustych wierszy i kolumn
All

Akcesoria

Zegary

All

31950.6

2472.87

...

2316.86

kujawskopomorskie

2114.89

(null)

(null)

lubelskie

1732.22

176.28

265.92

dzkie

11688.49

1805.24

1046.13

wielkopolskie

4876.85

319.83

(null)

W poprzednim przykadzie filtrowanie (definicja plastra) nie dotyczy wartoci opisujcych osie wynikowej tabeli. Oczywicie filtrowanie ograniczajce liczb wierszy lub
kolumn moe by rwnie wykonane w klauzuli WHERE. W kolejnym przykadzie
ograniczono si do wskazania tylko jednej kategorii [GPS]. Jednak kiedy umieszczamy drugi parametr w tej klauzuli, nie moe on pochodzi z tej samej hierarchii, ktr zastosowano do definiowania osi. Std definicja osi jest tworzona przez podanie atrybutu
wymiaru, a definicja plastra przez wskazanie takiego samego poziomu w hierarchii.

218

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Nie s to jednak elementy tosame. Moemy powiedzie, e pierwszy z nich reprezentuje hierarchi spaszczon do pojedynczego poziomu. Skutek wykonania tego zapytania przedstawia tabela 6.16. Naley zauway, e pojawi si rwnie element ALL,
o ile nie zostanie wyeliminowany jawnie, oznaczajcy sprzeda wszystkich prezentowanych zapytaniem kategorii podsumowanie wiersza. Poniewa wybrano tylko jeden atrybut, wartoci w obu kolumnach s takie same.
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON COLUMNS,
NONEMPTY([Klienci].[Wojewdztwo].Members) ON ROWS
FROM [Zyski]
WHERE ([Measures].[Wartosc],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[GPS])

Tabela 6.16. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towaru [GPS]
dla klientw pochodzcych z rnych wojewdztw z eliminacj pustych wierszy i kolumn
All

GPS

All

9794

9794

dzkie

5295.97

5295.97

maopolskie

431.28

431.28

pomorskie

1074.77

1074.77

...

...

wielkopolskie

1911.87

1911.87

Dla porwnania utwrzmy zapytanie, w ktrym wybr wywietlanej kategorii nastpuje


bezporednio w definicji osi. Wybrana zostaa ta sama kategoria co poprzednio, podczas
definiowania plastra. Analizujc wynikowy zestaw rekordw, przedstawiony w tabeli 6.17,
moemy zauway, e w porwnaniu z poprzednimi wynikami (tabela 6.15) nie wystpuje atrybut ALL reprezentujcy podsumowanie, co jest oczywiste, poniewa nie
ma go w definicji osi. Natomiast inaczej zachowuje si funkcja NONEMPTY, ktra nie
eliminuje wszystkich wartoci null. Przyczyn takiego zachowania jest fakt, e dla innych
kategorii istnieje warto sprzeday, a w zapytaniu nie zdefiniowano plastra ani filtru.
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].[GPS]) ON COLUMNS,
NONEMPTY([Klienci].[Wojewdztwo].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Wartosc]

Definiowanie miar ad hoc


Do tej pory w zapytaniach wykorzystywane byy tylko miary zdefiniowane podczas
ich tworzenia, zarwno podstawowe, jak i wyliczane. W zapytaniach MDX istnieje moliwo okrelenia miar wyznaczanych podczas przetwarzania zapytania oraz miar ad hoc,
ktrych sposb definiowania jest podobny do tworzenia miar obliczanych z zastosowaniem narzdzi wizualnych. Utworzenie miary ad hoc nastpuje w sekcji WITH,

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

219

Tabela 6.17. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towaru [GPS]
dla klientw pochodzcych z rnych wojewdztw z eliminacj pustych wierszy i kolumn
GPS
All

9794

kujawsko-pomorskie

(null)

lubelskie

(null)

dzkie

5295.97

maopolskie

431.28

podkarpackie

(null)

pomorskie

1074.77

lskie

1080.11

wielkopolskie

1911.87

ktra poprzedza waciwe zapytanie MDX. Definicj rozpoczyna sowo kluczowe


MEMBER, po ktrym okrelana jest nazwa kwalifikowana miary, skadajca si z nazwy grupy i nazwy zasadniczej. Po sowie kluczowym AS nastpuje waciwa definicja w postaci acucha ujtego w apostrofy. Zawiera ona poprawne wyraenie MDX,
zwracajce pojedyncz warto, skalar. W przedstawianym przykadzie miara o nazwie [ZyskProc] reprezentuje procentowy zysk ze sprzeday; jest obliczona jako stosunek
rnicy wartoci sprzeday [Wartosc] i wartoci zakupu [Wartosc Zakupu] do wartoci
zakupu. Jeli zakoczylibymy definicj miary w tym miejscu, zwracaaby ona uamek
z zakresu <0, 1>. Moliwe jest jednak uycie drugiego, nieobowizkowego parametru
FORMAT_STRING, pod ktry podstawiany jest acuch reprezentujcy sposb formatowania, tworzony na oglnych zasadach obowizujcych w produktach MS. W przykadzie
zastosowano znaki # mwi, e przed separatorem dziesitnym moe si pojawi jedna
lub wicej cyfr, jako separator zdefiniowano kropk, na skutek zastosowania maski
00 okrelono, e po separatorze musz pojawi si dokadnie dwie cyfry, oraz wskazano, e format ten bdzie reprezentowany jako procent, co oznacza niejawne pomnoenie wyniku przez 100. Tak zdefiniowana miara moe zosta uyta w zapytaniu
wystpujcym bezporednio po sekcji WITH. W przykadzie miara ta definiuje wartoci
wywietlane w komrkach tabeli, poniewa wystpuje w klauzuli WHERE. Podsumowujc, przykadowe zapytanie wyznacza zysk procentowy, okrelony jako miara ad hoc
wzgldem kategorii towarw i wojewdztwa, z ktrego pochodzili klienci. Wyeliminowano puste kolumny i wiersze. Wynikowy zestaw rekordw przedstawia tabela 6.18.
WITH
MEMBER Measures.ZyskProc AS
([Measures].[Wartosc]-[Measures].[Wartosc Zakupu])/
[Measures].[Wartosc Zakupu] , FORMAT_STRING = '#.00%'
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON COLUMNS,
NONEMPTY([Klienci].[Wojewdztwo].Members) ON ROWS
FROM [Zyski]
WHERE Measures.ZyskProc

220

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.18. Skutek wykonania zapytania wyznaczajcego zysk procentowy kategorii towarw
dla klientw pochodzcych z rnych wojewdztw
All

Akcesoria

GPS

...

Zegary

All

30.53%

28.22%

30.70%

...

36.82%

kujawsko-pomorskie

25.91%

15.71%

(null)

(null)

lubelskie

35.93%

43.01%

(null)

...

38.48%

dzkie

33.55%

28.94%

32.33%

...

43.37%

...

...

...

...

...

...

wielkopolskie

30.04%

28.01%

25.46%

29.19%

Do opisania ZyskProc zastosowane zostay miary zdefiniowane na kostce, ale poniewa licznik wyraenia jest rnic wartoci i wartoci zakupu, moe by zastpiony
przez miar kalkulowan Zysk, ktra jest wyznaczana za pomoc tej rnicy. Zapytanie realizujce tak definicj miary przedstawiono niej. Oczywicie wynik jest taki
sam jak poprzednio pokazany w tabeli 6.18. Wnioskiem wynikajcym z tego eksperymentu jest to, e miary obliczane mog by stosowane do budowania wyrae definiujcych miary ad hoc.
WITH MEMBER Measures.ZyskProc AS
[Measures].[Zysk]/
[Measures].[Wartosc Zakupu] , FORMAT_STRING = #.00%
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON COLUMNS,
NONEMPTY([Klienci].[Wojewdztwo].Members) ON ROWS
FROM [Zyski]
WHERE Measures.ZyskProc

Miary ad hoc nie pojawi si w wynikowym zbiorze, jeli do definicji osi zastosujemy
waciwo reprezentujc czonkw miar [Measures].members. Aby j wywietli, moemy poda jej nazw w opisie osi lub jako element zestawu. Rwnie uycie funkcji
ADDCALCULATEDMEMBERS( ) powoduje dodanie jej do definicji osi. Fakt ten ilustruje kolejny przykad i tabela 6.19, zawierajca jego wyniki.
WITH MEMBER Measures.ZyskProc AS
[Measures].[Zysk]/
[Measures].[Wartosc Zakupu] , FORMAT_STRING = #.00%
SELECT
ADDCALCULATEDMEMBERS(Measures.Members) ON COLUMNS,
NONEMPTY([Klienci].[Wojewdztwo].Members) ON ROWS
FROM [Zyski]

Jednym z waniejszych zada analitycznych spotykanych w praktyce jest wyznaczanie wskanikw reprezentujcych zmiany miary w czasie. Moemy w tym celu uy
szeregu waciwoci i funkcji. Pierwszym zadaniem niech bdzie porwnanie z poprzednim okresem, zgodnie z zasad przedstawion na rysunku 6.8.
Wskanik wzrostu wartoci sprzeday w porwnaniu z okresem poprzedzajcym uzyskano, stosujc w definicji miary ad hoc metod CurrentMember oraz PrevMember. Obie
wymagaj podania jako argumentu poziomu hierarchii lub atrybutu, dla ktrego bdzie

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

221

Tabela 6.19. Skutek wykonania zapytania wyznaczajcego wszystkie miary dla klientw pochodzcych
z rnych wojewdztw
Ilosc

Wartosc

Wartosc
Zakupu

Wszystkie
Transakcje
Count

Zysk

ZyskProcentowy

SredniZysk

ZyskProc

All

1181

92984.44

71234.97

402

$21,749.47

23.39%

018 z

30.53%

kujawskopomorskie

76

6818.15

5415.12

28

$1,403.03

20.58%

018 z

25.91%

lubelskie

50

2896.11

2130.56

20

$765.55

26.43%

015 z

35.93%

dzkie

457

35722.57

26747.91

157

$8,974.66

25.12%

020 z

33.55%

...

...

...

...

...

...

...

...

...

wielkopolskie

184

13841.01

10643.64

60

$3,197.37

23.10%

017 z

30.04%

Rysunek 6.8.
Ilustracja waciwoci
PrevMember dla
dwch poziomw
hierarchii

Rok

Kwarta

Miesic

2000

Sprzeda
790

Q1

120
Jan

30

Feb

40

Mar
Q2

50
200

Apr

65

May

45

Jun
Q3

90
185

Jul

55

Aug

60

Sep
Q4

70
285

Oct

80

Nov

100

Dec

105

wyznaczana warto miary, stanowicej drugi parametr. W przykadzie do oblicze


wybrano warto sprzeday Wartosc. Analizujc wyniki przedstawione w tabeli 6.20,
naley zwrci uwag na przyrost sprzeday dla pierwszego miesica, ktra jest rwna wartoci. Oznacza to, e nieistniejcy element poprzedzajcy pierwszy rekord, na
ktry wskazuje w tym przypadku metoda PrevMember, zosta zastpiony przez zero.
WITH MEMBER Measures.ZyskProc AS
[Measures].[Zysk]/
[Measures].[Wartosc Zakupu] , FORMAT_STRING = #.00%
MEMBER Measures.DoPoprzedniego AS
([Time].[Month].CurrentMember, [Measures].[Wartosc])([Time].[Month].PrevMember, [Measures].[Wartosc])
SELECT
{Measures.ZyskProc,[Measures].[Wartosc],Measures.DoPoprzedniego} ON COLUMNS,
NONEMPTY([Time].[Month].Members) ON ROWS
FROM [Zyski]

222

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.20. Skutek wykonania zapytania wyznaczajcego miary ZyskProc, Wartosc oraz wskanik
wzrostu sprzeday w kolejnych miesicach
ZyskProc

Wartosc

DoPoprzedniego

All

30.53%

92984.44

92984.44

March 2001

20.96%

2759.07

2759.07

April 2001

27.90%

3590.12

831.05

May 2001

25.46%

678.65

-2911.47

June 2001

31.76%

814.59

135.94

October 2003

47.76%

966.91

-2491.88

November 2003

28.75%

5342.15

4375.24

December 2003

28.90%

3443.4

-1898.75

January 2004

24.87%

356.64

-3086.76

February 2004

33.48%

3654.49

3297.85

March 2004

39.81%

1061.02

-2593.47

Podobne obliczenia moemy wykona, analizujc warto sprzeday dla rwnolegych


okresw. Ilustracja tego problemu dla przesunicia porwnywanych danych o rok jest
przedstawiona na rysunku 6.9. W zalenoci od wskazanego poziomu hierarchii
oznacza to porwnanie dla tych samych miesicy lub kwartaw dwch kolejnych lat.
Na najwyszym poziomie, wskazujcym rok, okres rwnolegy jest rwnowany poprzedniej wartoci atrybutu.
Rysunek 6.9.
Ilustracja funkcji
ParallelPeriod na
poziomie roku dla
trzech poziomw
hierarchii

Rok

Kwarta

Miesic

2000

Sprzeda

Jan
Feb
Mar

790
120
30
40
50

Oct

285
80

Nov

100

Dec

105
850
170
50
55

Q1

Q4

2001
Q1
Jan
Feb
Mar
Oct

65
275
90

Nov
Dec

100
85

Q4

W prezentowanym przykadzie do wyznaczenia miary Do12MiesWczesniej zastosowano metod Lag(nr), wskazujc przesunicie wstecz o dan parametrem liczb
atrybutw. Jeeli wskazywanym poziomem jest miesic, a przesunicie wynosi 12, to jest
to wskazanie tego samego miesica w poprzednim roku. Zmieniajc poziom hierarchii
i warto parametru metody, moemy uzyska ten sam efekt dla poziomu okrelajcego kwarta oraz rok. Innym podejciem jest, jak pokazano w przypadku definicji
trzeciej miary ad hoc DoRokWczesniej, zastosowanie funkcji ParallelPeriod. Pierwszym jej parametrem jest wskazanie poziomu, a drugim liczba okrelajca przesuni-

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

223

cie mierzone w jednostkach tego poziomu. Skutek wyznaczenia porwnania sprzeday


w okresach rwnolegych przedstawia tabela 6.21. Jak atwo zauway, obliczone obiema
metodami wartoci s rwne dla kadego wiersza tabeli. Jednak nie zawsze tak musi
by. Zauwamy, e w naszej firmie nie prowadzono sprzeday w pierwszych dwch
miesicach pierwszego roku jej funkcjonowania oraz e wystpoway przerwy w handlu
w innych miesicach jej dziaania. Std w tabeli faktw nie ma wartoci dla tych okresw.
Jednak wyznaczony przez nas wymiar czasu jest oparty na wygenerowanych datach
zawierajcych te brakujce miesice. Poniewa analizowane s atrybuty wymiaru, porwnywane wartoci s takie same. W przykadowej hurtowni mamy jednak wymiar
czas, ktry operuje na danych wystpujcych w tabeli Faktura, niezawierajcej danych
dla okresw, w ktrych nie prowadzono sprzeday. W takim wypadku metoda Lag(12)
bdzie przeskakiwaa wstecz o 12 jednostek, nie biorc pod uwag brakujcych miesicy. Natomiast funkcja ParalellPeriod porwnuje zawsze odpowiadajce sobie
elementy dzieci, std przerwy w pracy firmy nie spowoduj niepodanego dziaania
tej funkcji. Taki eksperyment atwo wykona, zmieniajc w prezentowanym przykadzie nazw wymiaru czasu i wskazujc waciw nazw poziomu.
WITH MEMBER Measures.ZyskProc AS
[Measures].[Zysk]/
[Measures].[Wartosc Zakupu] , FORMAT_STRING = #.00%
MEMBER Measures.Do12MiesWczesniej AS
([Time].[Month].CurrentMember, [Measures].[Wartosc])([Time].[Month].CurrentMember.Lag(12), [Measures].[Wartosc])
MEMBER Measures.DoRokWczesniej AS
([Time].[Month].CurrentMember, [Measures].[Wartosc])(PARALLELPERIOD( [Time].[Year - Quarter - Month - Date].[Year], 1 ),
[Measures].[Wartosc])
SELECT
{Measures.ZyskProc,[Measures].[Wartosc], Measures.Do12MiesWczesniej,
Measures.DoRokWczesniej} ON COLUMNS,
NONEMPTY([Time].[Month].Members) ON ROWS
FROM [Zyski]

Innym praktycznym zadaniem zwizanym z obliczeniami dotyczcymi czasu jest wyznaczanie kumulujcych si wartoci funkcji agregujcych, najczciej sum. Zmianie
moe podlega zakres, dla ktrego te obliczenia s wykonywane i po ktrego przekroczeniu proces zaczyna si od pocztku. Ilustracja zmieniajcych si poziomw
wyznaczania skumulowanych agregatw przedstawia rysunek 6.10.
Przykadowe zapytanie realizujce wyznaczenie sumy biecej dla poziomu miesicy
przedstawiono poniej. Wykorzystujemy funkcj YTD (Year to Date), ktrej pierwszy
parametr wskazuje, dla jakiej hierarchii nastpuje obliczenie, natomiast drugi wskazuje miar podlegajc sumowaniu. Poziom hierarchii, dla ktrej prowadzone s obliczenia, wynika z definicji osi. Zakres oblicze jest konsekwencj przyjtej funkcji
i jest zdefiniowany jako rok. Wyniki wykonania zapytania przedstawia tabela 6.22.
Jej analiza wykazuje, e dla pierwszego miesica, w ktrym s dane, dla kadego roku
warto sumy biecej i sumowanej wartoci jest rwna. W kolejnych miesicach
suma bieca jest powikszana o kolejne wartoci a do ostatniego miesica roku.
Aby zmieni zakres, moemy posuy si jedn z analogicznych funkcji: QTD (Quarter
to Date), MTD (Month to Date), WTD (Week to Date).

224

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.21. Skutek wykonania zapytania wyznaczajcego miary ZyskProc, Wartosc oraz wskaniki
porwnujce sprzeda w okresach odlegych o 12 miesicy i o rok
ZyskProc

Wartosc

Do12MiesWczesniej

DoRokWczesniej

All

30.53%

92984.44

92984.44

92984.44

March 2001

20.96%

2759.07

2759.07

2759.07

April 2001

27.90%

3590.12

3590.12

3590.12

December 2001

52.85%

811.65

811.65

811.65

January 2002

34.70%

936.76

936.76

936.76

February 2002

25.64%

3166.88

3166.88

3166.88

March 2002

40.32%

5691.48

2932.41

2932.41

April 2002

27.13%

1756.24

-1833.88

-1833.88

December 2002

25.46%

1499.46

687.81

687.81

January 2003

48.32%

632.78

-303.98

-303.98

February 2003

31.06%

1186.79

-1980.09

-1980.09

March 2003

38.75%

1256.99

-4434.49

-4434.49

April 2003

19.94%

28.87

-1727.37

-1727.37

Rysunek 6.10.
Ilustracja
wyznaczania sum
biecych dla dwch
poziomw hierarchii

Rok

Kwarta

Miesic

2000

Sprzeda

Jul
Aug
Sep

790
120
30
40
50
200
65
45
90
185
55
60
70

Oct
Nov
Dec

285
80
100
105

Q1
Jan
Feb
Mar
Q2
Apr
May
Jun
Q3

Q4

WITH MEMBER Measures.ZyskProc AS


[Measures].[Zysk]/
[Measures].[Wartosc Zakupu] , FORMAT_STRING = #.00%
MEMBER Measures.BiezacaSuma AS
SUM(YTD([Time].[Year - Quarter - Month - Date].CurrentMember),
[Measures].[Wartosc]) ,
FORMAT_STRING = #.00 PLN
SELECT
{Measures.ZyskProc,[Measures].[Wartosc], Measures.BiezacaSuma} ON COLUMNS,
NONEMPTY([Time].[Year - Quarter - Month - Date].[Month].Members) ON ROWS
FROM [Zyski]

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

225

Tabela 6.22. Skutek wykonania zapytania wyznaczajcego miary ZyskProc, Wartosc oraz sum biec
dla kolejnych miesicy w kadym roku
ZyskProc

Wartosc

BiezacaSuma

March 2001

20.96%

2759.07

2759.07 PLN

April 2001

27.90%

3590.12

6349.19 PLN

...

...

...

November 2001

25.88%

3634.51

18229.51 PLN

December 2001

52.85%

811.65

19041.16 PLN

January 2002

34.70%

936.76

936.76 PLN

February 2002

25.64%

3166.88

4103.64 PLN

...

...

...

...

Definiowanie ad hoc zbiorw atrybutw


Wyznaczanie podczas wykonywania zapytania nie dotyczy tylko miar. Na analogicznych zasadach moemy tworzy atrybuty wymiarw. Dla tego typu danych definicja
w sekcji WITH rozpoczyna si od sowa kluczowego SET. W przykadzie zastosowano funkcj GENERATE, ktrej pierwszym parametrem jest wskazanie na poziom hierarchii istniejcego wymiaru, drugi natomiast wskazuje, ktre jego elementy maj zosta
wywietlone. Drugim parametrem moe by zarwno definicja pojedynczego atrybutu,
jak i ich zbir. Aby to podkreli, w prezentowanym przykadzie wykorzystano nawias
klamrowy, pomimo e w tym przypadku nie musia by uyty. Zdefiniowany ad hoc wymiar ma zawiera pierwsze kwartay wszystkich lat, w ktrych prowadzono dziaalno.
Do wskazania go zastosowane zostao zoenie dwch waciwoci, CurrentMember,
wskazujcej na biecego czonka wskazanego pierwszym parametrem funkcji, oraz
Firstchild, ktry wskazuje waciwy element. Wynik przetworzenia zapytania jest
zawarty w tabeli 6.23.
WITH SET Kwartal1 AS
GENERATE([Time].[Year - Quarter - Month - Date].[Year].Members,
{[Time].[Year - Quarter - Month - Date].CurrentMember.Firstchild})
SELECT
Kwartal1 ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]

Tabela 6.23. Skutek wykonania zapytania wyznaczajcego liczb sprzedanych towarw w kategoriach
dla pierwszego kwartau kolejnych lat
Quarter 1, 2001

Quarter 1, 2002

Quarter 1, 2003

Quarter 1, 2004

All

20

131

37

68

Akcesoria

12

(null)

GPS

(null)

13

Telefony

(null)

15

(null)

Zegary

(null)

(null)

226

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Wikszo metod moe podlega skadaniu. W prezentowanym przykadzie mechanizm


ten wykorzystano w przypadku metody Firstchild, ktra zastosowana dwa razy wskazuje
pierwsze dziecko pierwszego dziecka. Poniewa wskazano na poziom roku, to zaproponowane zoenie wywietli pierwszy miesic. W wynikach zawartych w tabeli 6.24
widzimy, e dla stycznia 2001 roku wszystkie wartoci s (null), gdy wtedy jeszcze
nie prowadzono dziaalnoci, natomiast miesic ten znalaz si w rdowym wymiarze ze
wzgldu na sposb jego generowania. W zapytaniu nie zostaa zdefiniowana w klauzuli
WHERE wywietlana miara. W takim przypadku pokazywane s wartoci miary domylnej, a jeli jej nie zdefiniowano, pierwszej miary. Dla analizowanej kostki jest
ni liczba sprzedanych towarw.
WITH SET Miesiac1 AS
GENERATE([Time].[Year - Quarter - Month - Date].[Year].Members,
{[Time].[Year - Quarter - Month - Date].CurrentMember.FirstChild.FirstChild})
SELECT
Miesiac1 ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]

Tabela 6.24. Skutek wykonania zapytania wyznaczajcego liczb sprzedanych towarw w kategoriach
dla pierwszego miesica kolejnych lat
January 2001

January 2002

January 2003

January 2004

All

(null)

Akcesoria

(null)

(null)

(null)

GPS

(null)

(null)

(null)

(null)

Telefony

(null)

(null)

(null)

(null)

Zegary

(null)

(null)

(null)

Oczywicie rwnie w takim zapytaniu dopuszczalne jest jawne wskazanie wywietlanej miary, co przedstawia kolejne zapytanie, ktrego wyniki zawarto w tabeli 6.25.
WITH SET Miesiac1 AS
GENERATE([Time].[Year - Quarter - Month - Date].[Year].Members,
{[Time].[Year - Quarter - Month - Date].Currentmember.Firstchild.FirstChild})
SELECT
Miesiac1 ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Tabela 6.25. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towarw
dla pierwszego miesica kolejnych lat
January 2001

January 2002

January 2003

January 2004

All

(null)

$241.33

$206.15

$71.03

Akcesoria

(null)

(null)

(null)

$43.05

GPS

(null)

(null)

(null)

(null)

Telefony

(null)

(null)

(null)

(null)

Zegary

(null)

(null)

$73.89

(null)

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

227

Jak atwo si domyli, skoro istnieje waciwo FirstChild, powinna by rwnie


dostpna LastChild, ktra wskazuje ostatniego potomka wskazanego atrybutu. Ponadto
tak samo jak poprzednio zastosowano podwjne zoenie tej metody w celu wyznaczenia ostatniego miesica kadego roku. Analogicznie wyniki zawarte w tabeli 6.26
wskazuj, e tym razem w ostatnim miesicu 2004 roku nie prowadzono dziaalnoci.
WITH SET miesiac1 AS
GENERATE([Time].[Year - Quarter - Month - Date].[Year].members,
{[Time].[Year - Quarter - Month - Date].Currentmember.LastChild.LastChild})
SELECT
miesiac1 ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Tabela 6.26. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towarw
dla ostatniego miesica kolejnych lat
December 2001

December 2002

December 2003

December 2004

All

$280.64

$304.29

$772.07

(null)

Akcesoria

$9.33

$34.10

$147.70

(null)

GPS

(null)

(null)

$92.20

(null)

Telefony

(null)

$14.39

$35.21

(null)

Zegary

$118.67

(null)

$98.82

(null)

Zastosowanie funkcji NONEMPTY do wymiaru ad hoc definiujcego jedn z osi prowadzi tak samo jak poprzednio do wyeliminowania tych atrybutw, dla ktrych wszystkie wartoci s puste. W przykadzie posuyo nam to do wyeliminowania grudnia
2004 roku, w ktrym nie byo sprzeday, co ilustruje tabela 6.27.
WITH SET Miesiac1 AS
GENERATE([Time].[Year - Quarter - Month - Date].[Year].Members,
{[Time].[Year - Quarter - Month - Date].CurrentMember.LastChild.lastChild})
SELECT
NONEMPTY(Miesiac1) ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Tabela 6.27. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towarw
dla ostatniego miesica kolejnych lat z wyeliminowaniem pustej kolumny
December 2001

December 2002

December 2003

All

$280.64

$304.29

$772.07

Akcesoria

$9.33

$34.10

$147.70

GPS

(null)

(null)

$92.20

Telefony

(null)

$14.39

$35.21

Zegary

$118.67

(null)

$98.82

228

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Wskazywano ju na pewne konsekwencje stosowania miary czasu opartej na rzeczywistej


tabeli. Jeli tak jak w utworzonej hurtowni skorzystamy z tabeli Faktura, to wymiar
ten nie bdzie zawiera reprezentantw dla okresw, w ktrych nie prowadzono dziaalnoci. Dlatego uycie metody FirstChild powoduje pojawienie si nieprawidowych wartoci na poziomie dzieci, co przedstawiono w tabeli 6.28. Dla roku 2001
pierwszym miesicem jest miesic trzeci, w kolejnym drugi. Pojawienie si atrybutu
Unknown jest wynikiem zastosowania domylnych wartoci waciwoci wymiaru.
WITH SET Miesiac1 AS
GENERATE([Czas].[Rok_kwartal_miesiac].[Rok].Members,
{[Czas].[Rok_kwartal_miesiac].CurrentMember.Firstchild.FirstChild})
SELECT
Miesiac1 ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Tabela 6.28. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towarw
dla pierwszego miesica kolejnych lat z niepen list dat
3

Unknown

All

$478.15

$887.70

$206.15

$71.03

(null)

Akcesoria

$51.15

$38.64

(null)

$43.05

(null)

GPS

(null)

(null)

(null)

(null)

(null)

Telefony

(null)

$120.56

(null)

(null)

(null)

Zegary

(null)

$62.73

$73.89

(null)

(null)

Analogiczne rezultaty, przedstawione w tabeli 6.29, uzyskano dla waciwoci LastChild,


co wiadczy o zakoczeniu dziaalnoci w 3. miesicu ostatniego roku.
WITH SET Miesiac1 AS
GENERATE([Czas].[Rok_kwartal_miesiac].[Rok].Members,
{[Czas].[Rok_kwartal_miesiac].CurrentMember.Lastchild.LastChild})
SELECT
Miesiac1 ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Tabela 6.29. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towarw
dla ostatniego miesica kolejnych lat z niepen list dat
12

12

12

Unknown

All

$280.64

$304.29

$772.07

$302.11

(null)

Akcesoria

$9.33

$34.10

$147.70

$41.86

(null)

GPS

(null)

(null)

$92.20

$69.15

(null)

Telefony

(null)

$14.39

$35.21

(null)

(null)

Zegary

$118.67

(null)

$98.82

(null)

(null)

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

229

Wskazujc poziom roku i wybierajc w nim pierwsze dziecko, uzyskamy pierwszy


kwarta. W tym wypadku zgodnie z wynikami przedstawionymi w tabeli 6.30 mamy
poprawne wskazania, poniewa pierwszym miesicem, w ktrym prowadzono dziaalno, by marzec, a jest on elementem pierwszego kwartau.
WITH SET Kwartal1 AS
GENERATE([Czas].[Rok_kwartal_miesiac].[Rok].Members,
{[Czas].[Rok_kwartal_miesiac].CurrentMember.Firstchild})
SELECT
NONEMPTY(Kwartal1) ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Tabela 6.30. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towarw
dla pierwszego kwartau kolejnych lat z niepen list dat
1

All

$478.15

$2,466.56

$838.49

$1,289.79

Akcesoria

$51.15

$51.63

(null)

$87.99

GPS

(null)

$539.67

$133.65

$202.80

Telefony

(null)

$365.58

$173.64

(null)

Zegary

(null)

$172.35

$73.89

(null)

Wskazanie elementu potomnego moemy uzyska, stosujc metod Children(nr), w ktrej parametr oznacza numer kolejnego potomka, poczwszy od indeksu o wartoci 0.
W przytoczonym przykadzie wskazano dziecko o indeksie 0 dla poziomu rok, co oznacza
pierwszy kwarta. W wyniku jego wykonania otrzymamy dokadnie taki sam zestaw rekordw jak poprzednio (tabela 6.30).
WITH SET Kwartal1 AS
GENERATE([Czas].[Rok_kwartal_miesiac].[Rok].Members,
{[Czas].[Rok_kwartal_miesiac].CurrentMember.Children(0)})
SELECT
NONEMPTY(kwartal1) ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Dla porwnania sposobu dziaania metod niezawierajcych jawnego wskazania indeksu


potomka z metod Children(nr), w ktrej takie wskazanie wystpuje, zbudowane zostao zapytanie wybierajce ostatnie dziecko dla poziomu rok z wymiaru operujcego
bezporednio na tabeli. Analiza wynikw przedstawionych w tabeli 6.31 pokazuje, e
poniewa w ostatnim kwartale 2004 roku nie prowadzono dziaalnoci, a zakoczono
j ju w pierwszym, ostatnia kolumna wskazuje numer wanie tego kwartau.
WITH SET Kwartal1 AS
GENERATE([Czas].[Rok_kwartal_miesiac].[Rok].Members,
{[Czas].[Rok_kwartal_miesiac].CurrentMember.LastChild})
SELECT
NONEMPTY(Kwartal1) ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

230

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.31. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towarw
dla ostatniego kwartau kolejnych lat z niepen list dat
4

All

$1,037.86

Akcesoria

$149.27

$1,715.88

$2,403.50

$1,289.79

$155.20

$224.14

$87.99

GPS
...

$203.94

(null)

$255.73

$202.80

...

...

...

...

Telefony

(null)

$217.04

$267.60

(null)

Zegary

$303.51

(null)

$289.34

(null)

Jeli jednak zastosujemy metod Children(nr) ze wskazaniem na czwarte z kolei dziecko,


czyli takie, ktrego indeks ma warto 3, to nie pojawi si ju kolumna dla roku 2004,
co pokazuje tabela 6.32. Naley mie jednak wiadomo, e takie dziaanie ma sens
tylko dla poziomw, na ktrych jestemy w stanie okreli liczb atrybutw potomnych.
W przypadku pozostaych trzeba zastosowa metod FirstChild lub LastChild.
WITH SET Kwartal1 AS
GENERATE([Czas].[Rok_kwartal_miesiac].[Rok].Members,
{[Czas].[Rok_kwartal_miesiac].CurrentMember.Children(3)})
SELECT
NONEMPTY(Kwartal1) ON COLUMNS,
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Tabela 6.32. Skutek wykonania zapytania wyznaczajcego warto sprzeday kategorii towarw
dla czwartego kwartau kolejnych lat dla niepenej listy dat
4

All

$1,037.86

$1,715.88

$2,403.50

Akcesoria

$149.27

$155.20

$224.14

GPS

$203.94

(null)

$255.73

...

...

...

...

Telefony

(null)

$217.04

$267.60

Zegary

$303.51

(null)

$289.34

Zastosowanie wskazania poziomu


hierarchii do wyznaczania miar
Wskazywanie elementw potomnych lub nadrzdnych moe by rwnie zastosowane do
tworzenia miar. Na przykad jako wskanik chcemy oblicza zysk w odniesieniu do
zysku uzyskanego na poziomie rodzica. Pokamy to na przykadzie, gdzie poziomem
rodzica bdzie kategoria towaru, a dzieci to kolejne towary dla kadej kategorii. Pierwsza miara ad hoc wyznacza zysk na poziomie nadrzdnym dziki zastosowaniu metody

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

231

Parent do biecego czonka hierarchii [Kategoria_towar] opisujcej towar [Towar_


calosc]. Wyraenie to jest elementem wyraenia opisujcego kolejn miar wyznaczajc
zysk wzgldny. Oczywicie zamiast wykorzystywa pen definicj mona w wyraeniu
opisujcym ZyskProc zastosowa nazw ZyskKategorii. Wyprowadzone zostay kolejno trzy miary stanowice: mianownik, licznik oraz obliczone wyraenie wywietlone w formacie procentowym, co mona przeanalizowa w tabeli 6.33.
WITH
MEMBER Measures.ZyskKategorii AS
([Towar_calosc].[Kategoria_towar].CurrentMember.Parent,
[Measures].[Zysk])
MEMBER Measures.ZyskProc AS
([Towar_calosc].[Kategoria_towar].CurrentMember, [Measures].[Zysk])/
([Towar_calosc].[Kategoria_towar].CurrentMember.Parent, [Measures].[Zysk]),
FORMAT_STRING = 0.00%
SELECT
{Measures.ZyskKategorii, [Measures].[Zysk], Measures.ZyskProc} ON COLUMNS,
[Towar_calosc].[Kategoria_towar].[Id Towaru] ON ROWS
FROM [Zyski]

Tabela 6.33. Skutek wykonania zapytania wyznaczajcego zyski sprzeday na poziomie kategorii
oraz towarw, a take ich proporcj wyraon w procentach
ZyskKategorii

Zysk

ZyskProc

Pasek

1709.21

$108.80

6.37%

...

...

...

...

Zestaw Lux

1709.21

$272.80

15.96%

Gio 15

2300.26

$131.17

5.70%

...

...

....

...

Budzik

1576.07

$66.60

4.23%

...

...

...

...

Wielofunkcyjny

1576.07

$98.82

6.27%

Unknown

(null)

(null)

(null)

Poniewa moliwe jest skadanie metody Parent w celu wyznaczania kolejnych, wyszych poziomw w hierarchii (przesuwamy si w kierunku korzenia), zastosowane
zostao podwjne jej zoenie w celu wyznaczenia zysku procentowego, jaki wnis
kady towar wzgldem caoci sprzeday. Ilustruje to kolejne zapytanie oraz wyniki
zawarte w tabeli 6.34.
WITH
MEMBER Measures.ZyskKategorii AS
([Towar_calosc].[Kategoria_towar].CurrentMember.Parent, [Measures].[Zysk])
MEMBER Measures.ZyskProc AS
([Towar_calosc].[Kategoria_towar].CurrentMember, [Measures].[Zysk])/
([Towar_calosc].[Kategoria_towar].CurrentMember.Parent.Parent, [Measures].[Zysk]),
FORMAT_STRING = 0.00%
SELECT
{Measures.ZyskKategorii, [Measures].[Zysk], Measures.ZyskProc} ON COLUMNS,
NONEMPTY([Towar_calosc].[Kategoria_towar].[Id Towaru]) ON ROWS
FROM [Zyski]

232

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.34. Skutek wykonania zapytania wyznaczajcego zyski sprzeday na poziomie kategorii
oraz towarw, a take udzia procentowy sprzeday towaru w caoci sprzeday
ZyskKategorii

Zysk

ZyskProc

Pasek

1709.21

$108.80

0.50%

...

...

...

...

Zestaw Lux

1709.21

$272.80

1.25%

...

...

...

...

Budzik

1576.07

$66.60

0.31%

...

...

...

...

Wielofunkcyjny

1576.07

$98.82

0.45%

Poza metod Parent dostpna jest funkcja Ancestor( ), wskazujca protoplast, przodka
na dowolnym poziomie hierarchii, ktry jest okrelany drugim jej parametrem. Dla
przykadu zapytanie, ktrego wyniki zawiera tabela 6.33, zostao przeksztacone na
rwnowan posta posugujc si funkcj Ancestor( ) ze wskazaniem na poziom
[Nazwa Kategorii].
WITH
MEMBER Measures.ZyskKategorii AS
(
ANCESTOR([Towar_calosc].[Kategoria_towar].CurrentMember,
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii]),
[Measures].[Zysk])
MEMBER Measures.ZyskProc AS
([Towar_calosc].[Kategoria_towar].CurrentMember, [Measures].[Zysk])/
(
ANCESTOR([Towar_calosc].[Kategoria_towar].CURRENTMEMBER,
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii]),
[Measures].[Zysk]),
FORMAT_STRING = '0.00%'
SELECT
{Measures.ZyskKategorii, [Measures].[Zysk], Measures.ZyskProc} ON COLUMNS,
NONEMPTY([Towar_calosc].[Kategoria_towar].[Id Towaru]) ON ROWS
FROM [Zyski]

Kolejny przykad definiowania wymiaru ad hoc wykorzystuje mechanizm filtrowania


na skutek zastosowania funkcji EXCEPT( ). Pozwala ona w zestawie rekordw wskazanych pierwszym parametrem pomin atrybut lub ich zbir, ktry stanowi drugi jej
parametr. W przykadzie zastosowano j do wyeliminowania z zakresu kategorii tej,
ktra ma nazw Zegary. Wymiar ten stanowi opis wierszy i zosta uyty do wyznaczenia sumy zysku, poniewa stanowi pierwszy parametr funkcji SUM( ). Obliczona
suma stanowi jednoczenie mianownik wyraenia opisujcego procent sprzeday.
Wynikowy zestaw rekordw przedstawia tabela 6.35.
WITH
SET OproczZegarow AS
EXCEPT([Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].Members,
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary])
MEMBER Measures.ProcentSprzedazy AS
([Towar_calosc].[Kategoria_towar].CURRENTMEMBER, [Measures].[Zysk]) /
SUM([OproczZegarow], [Measures].[Zysk]),

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

233

Tabela 6.35. Skutek wykonania zapytania wyznaczajcego udzia procentowy sprzeday towaru
w caoci sprzeday z pominiciem kategorii Zegary, ktra rwnie nie jest wywietlana
Zysk

ProcentSprzedazy

Akcesoria

$1,709.21

8.47%

GPS

$2,300.26

11.40%

Muzyka

$2,128.16

10.55%

...

...

...

Telefony

$3,443.43

17.07%

FORMAT_STRING = #.00%
SELECT
{[Measures].[Zysk], Measures.ProcentSprzedazy} ON COLUMNS,
NONEMPTY([OproczZegarow]) ON ROWS
FROM [Zyski]

Gwnym zadaniem kolejnego przykadu jest przedstawienie moliwoci formatowania wynikw. Na pocztku pokazano zastosowanie funkcji NONEMPTY do definicji
wymiaru ad hoc, wykazujc, e moe by rwnie wykorzystana w tym miejscu. Miar
kalkulowan stanowi przepisana miara Wartosc. Dokonano takiego zabiegu, aby uproci
i tak do zoony zapis, ale przede wszystkim po to, by pokaza, e zmiana formatowania ju zdefiniowanej miary z poziomu MDX jest moliwa tylko w tym miejscu.
Oczywicie formatowanie moe by dokonane dla dowolnego wyraenia tak miar
definiujcego. Do tej pory wykorzystywano tylko formatowanie statyczne z uyciem
atrybutu FORMAT_STRING. Tym razem zastosowano formatowanie warunkowe dla
szeciu rodzajw definicji stylu. Typy te to:
FORMAT_STRING okrela formalny zapis, sposb prezentacji liczb,

napisw lub dat;


FORE_COLOR kolor czcionki;
BACK_COLOR kolor ta komrki;
FONT_NAME okrela nazw czcionki, ktr wypisywana jest zawarto komrki;
FONT_SIZE wielko tej czcionki;
FONT_FLAGS ustawia flag okrelajc efekty (pogrubienie, pochylenie,

podkrelenie, przekrelenie).
W celu uzyskania formatowania warunkowego dla kadego typu zastosowano funkcj
warunkow IIF( ), ktrej pierwszym argumentem jest testowane wyraenie zwracajce
warto logiczn, drugi i trzeci s wartociami, jakie zwrci funkcja w przypadku,
gdy pierwszy parametr ma warto prawda lub fasz. Do formatowania obu kolorw
zastosowano funkcj RGB( ), ktrej parametrami s poziomy kolorw podstawowych
w modelu RGB (czerwony, zielony, niebieski), kodowane przez warto z zakresu od
0 do 255. W przedstawionym przykadzie kolory czcionek zdefiniowano jako czerwony
lub ty, a kolorami ta s turkusowy lub ciemnozielony. W przypadku definiowania
rodzaju czcionki zostay zastosowane nazwy symboliczne krojw i flag. Aby zastosowa
definicje zawarte w zapytaniu, ustawiono odpowiednie waciwoci komrek w sekcji
CELL PROPERTIES na skutek uaktywnienia flag danych przez nazwy symboliczne.

234

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Niestety, w rzeczywistoci, jak wida na rysunku 6.11, udaje si uzyska tylko formatowanie postaci wyprowadzanych danych oraz definicji kolorw komrek. Pozostae
efekty, pomimo dopenienia wszystkich wymaga, nie powoduj zadeklarowanych
skutkw. Fakt ten by ju sygnalizowany podczas omawiania narzdzi graficznego
definiowania miar.
WITH
SET Towary AS NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members)
MEMBER Measures.zakup AS [Measures].[Wartosc],
FORMAT_STRING = IIF(zakup>800, '#.00', '{#.00) '),
FORE_COLOR = IIF(zakup>800,RGB(255,0,0), RGB(255,255,0)),
BACK_COLOR = IIF(zakup>800,RGB(0,255,255), RGB(0,155,0)),
FONT_FLAGS = IIF(zakup>800,MDFF_BOLD or MDFF_UNDERLINE ,MDFF_ITALIC or
MDFF_STRIKEOUT),
FONT_NAME = IIF(zakup>800,ARIAL,Times),
FONT_SIZE = IIF(zakup>800,16,10)
SELECT
Towary ON COLUMNS,
NONEMPTY([Towar_calosc].[Wojewdztwo].Members) ON ROWS
FROM Zyski
WHERE Measures.zakup
CELL PROPERTIES VALUE, FORMATTED_VALUE, CELL_ORDINAL,
FORMAT_STRING, FORE_COLOR, BACK_COLOR, FONT_FLAGS, FONT_NAME, FONT_SIZE

Rysunek 6.11.
Skutek zastosowania
formatowania
warunkowego

Wywietlanie wielu
poziomw hierarchii
Przyjrzyjmy si jeszcze raz funkcji GENERATE, ktra suya nam do wyznaczenia
potomkw dla danego poziomu hierarchii. W takim przypadku jej drugi parametr by
jednoelementowym zbiorem definiujcym poziom dzieci. Jeeli jednak zbir ten bdzie
mia dwa elementy, to skutek dziaania bdzie bardziej interesujcy. W omawianym
przykadzie pierwszym elementem zbioru { } jest czonek biecy, a drugim wskazanie na jego dzieci. Powoduje to, e po kadym atrybucie reprezentujcym poziom
nadrzdny zostan wywietlone wszystkie jego dzieci. Takie dziaanie powtarzane bdzie
do wyczerpania si wszystkich wartoci, jakie moe przyj pierwszy z atrybutw funkcji.
Jeli zbir ma wiksz liczb elementw, sytuacja powtrzyaby si rekurencyjnie dla
kadego z nich. Wynik przykadowego zapytania jest przedstawiony w tabeli 6.36.
SELECT
NONEMPTY(
GENERATE([Time].[Year - Quarter - Month - Date].[Year].Members,
{[Time].[Year - Quarter - Month - Date].CurrentMember,
[Time].[Year - Quarter - Month - Date].CurrentMember.Children})
)

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

235

Tabela 6.36. Skutek wykonania zapytania wyznaczajcego zysk dla kadej kategorii dla cyklicznie
powtarzanych poziomw lat i kwartaw
Akcesoria

GPS

...

Telefony

Zegary

Calendar 2001

$506.66

$395.56

$596.82

$580.26

Quarter 1, 2001

$51.15

(null)

(null)

(null)

Quarter 2, 2001

$143.31

$76.37

$360.64

$80.79

Quarter 3, 2001

$162.93

$115.25

$236.18

$195.96

Quarter 4, 2001

$149.27

$203.94

(null)

$303.51

Calendar 2004

$87.99

$202.80

(null)

(null)

Quarter 1, 2004

$87.99

$202.80

(null)

(null)

ON ROWS,
NONEMPTY([Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].Members) ON COLUMNS
FROM [Zyski]
WHERE ([Measures].[Zysk])

Analogicznie do funkcji ANCESTOR( ) wskazujcej protoplastw funkcja DESCENDANTS( ) opisuje dzieci dla wskazanego atrybutu i wybranego poziomu hierarchii.
W celu pokazania jej dziaania zrealizowano zapytanie rwnowane poprzedniemu z jej
zastosowaniem. Oczywicie wynikowy zestaw rekordw jest dokadnie taki sam.
SELECT
NONEMPTY(
GENERATE([Time].[Year - Quarter - Month - Date].Year.Members,
{[Time].[Year - Quarter - Month - Date].CURRENTMEMBER,
DESCENDANTS([Time].[Year - Quarter - Month - Date].CurrentMember,
[Time].[Year - Quarter - Month - Date].[Quarter])}
)) ON ROWS,
NONEMPTY([Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].Members) ON COLUMNS
FROM [Zyski]
WHERE ([Measures].[Zysk])

Poniewa bezparametrowa metoda Children nie moe by skadana wielokrotnie, to


w celu wskazania dzieci kolejnego poziomu (wnukw) lub dalszych jestemy skazani na
uywanie funkcji DESCENDANTS( ). W przytoczonym niej przykadzie w porwnaniu
z poprzednim obniony zosta wskazywany poziom, dziki czemu po atrybucie reprezentujcym rok wywietliy si wszystkie miesice. Zastosowanie funkcji NONEMPTY( )
spowodowao, e uwzgldnione zostay tylko te miesice, w ktrych prowadzona bya
dziaalno, co mona przeledzi, analizujc wyniki z tabeli 6.37.
SELECT
NONEMPTY(
GENERATE([Time].[Year - Quarter - Month - Date].Year.Members,
{[Time].[Year - Quarter - Month - Date].CurrentMember,
DESCENDANTS([Time].[Year - Quarter - Month - Date].CurrentMember,
[Time].[Year - Quarter - Month - Date].[Month])}
)) ON ROWS,
NONEMPTY([Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].Members) ON COLUMNS
FROM [Zyski]
WHERE ([Measures].[Zysk])

236

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.37. Skutek wykonania zapytania wyznaczajcego zysk dla kadej kategorii dla cyklicznie
powtarzanych poziomw lat i miesicy
Akcesoria

GPS

..

Telefony

Zegary

Calendar 2001

$506.66

$395.56

$596.82

$580.26

March 2001

$51.15

(null)

(null)

(null)

April 2001

$68.20

(null)

$326.12

$53.04

November 2001

$139.94

$193.85

(null)

$184.84

December 2001

$9.33

(null)

(null)

$118.67

Calendar 2004

$87.99

$202.80

(null)

(null)

January 2004

$43.05

(null)

(null)

(null)

February 2004

$3.08

$133.65

(null)

(null)

March 2004

$41.86

$69.15

(null)

(null)

Wyznaczanie miar jako wyrae


dla rnych elementw
i poziomw hierarchii
Kolejny przykad pokazuje moliwo definiowania wzrostu zysku midzy kolejnymi
miesicami. Do zdefiniowania drugiego parametru rnicy zastosowana zostaa waciwo PrevMember, wskazujca na poprzedni atrybut poziomu. Porwnywane s
dane z kolejnych miesicy, poniewa do opisu wierszy jawnie wskazano ten atrybut,
stosujc opisan poprzednio funkcj DESCENDANTS( ). Wyniki przetwarzania zawarte zostay w tabeli 6.38.
WITH
MEMBER Measures.[Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].PrevMember),
FORMAT_STRING = '###,###.00 Z'
SELECT
{[Measures].[Zysk], Measures.[Wzrost Zysku]} ON COLUMNS,
NONEMPTY(
DESCENDANTS([Time].[Year - Quarter - Month - Date].CurrentMember,
[Time].[Year - Quarter - Month - Date].[Month])) ON ROWS
FROM [Zyski]

Analogicznie do metody PrevMember dziaa metoda NextMember, ktra wskazuje nastpny atrybut poziomu. O ile w poprzednim przykadzie mielimy wyznaczony wzrost
zysku w odniesieniu do poprzedniego miesica, o tyle tym razem drugim argumentem
rnicy jest zysk z miesica nastpnego, co przedstawione zostao w tabeli 6.39. argonowo mwimy o rnicy wstecznej.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

237

Tabela 6.38. Skutek wykonania zapytania wyznaczajcego zysk oraz jego wzrost dla kolejnych miesicy
w stosunku do miesica poprzedniego
Zysk

Wzrost Zysku

March 2001

$478.15

478.15 Z

April 2001

$783.19

305.04 Z

May 2001

$137.73

-645.46 Z

February 2004

$916.65

845.62 Z

March 2004

$302.11

-614.54 Z

Tabela 6.39. Skutek wykonania zapytania wyznaczajcego zysk oraz jego wzrost dla kolejnych miesicy
w stosunku do miesica nastpnego
Zysk

Wzrost Zysku

March 2001

$478.15

-305.04 Z

April 2001

$783.19

645.46 Z

May 2001

$137.73

-58.60 Z

January 2004

$71.03

-845.62 Z

February 2004

$916.65

614.54 Z

March 2004

$302.11

302.11 Z

WITH
MEMBER Measures.[Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].NextMember),
FORMAT_STRING = '###,###.00 Z'
SELECT
{[Measures].[Zysk], Measures.[Wzrost Zysku]} ON COLUMNS,
NONEMPTY(
DESCENDANTS([Time].[Year - Quarter - Month - Date].CurrentMember,
[Time].[Year - Quarter - Month - Date].[Month])) ON ROWS
FROM [Zyski]

Obie metody, PrevMember i NextMember, nie pozwalaj na sterowanie odlegoci


wywietlanego czonka od tego, dla ktrego ich uyto. Zawsze jest to odstp o jeden
indeks do przodu lub do tyu. Natomiast metoda LEAD( ) zezwala na takie dziaanie przez
wskazanie odlegoci parametrem. Kiedy argument jest dodatni, przesuwamy si w kierunku nastpnych wartoci atrybutu o wskazany odstp, wartoci ujemne przenosz
nas wstecz o t odlego. Prezentowany przykad wywietla dla kolejnych wierszy
Zysk z biecego miesica oraz rnice w odniesieniu do tej samej wartoci z miesicy odlegych o 2 wstecz i do przodu. Rezultat tego zapytania przedstawia tabela 6.40.
WITH
MEMBER Measures.[do +2] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LEAD(2)),
FORMAT_STRING = '###,###.00 Z'
MEMBER Measures.[do -2] AS

238

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.40. Skutek wykonania zapytania wyznaczajcego zysk oraz jego wzrost dla kolejnych miesicy
w stosunku do miesicy odlegych o dwa wstecz i do przodu
Zysk

do +2

do -2

March 2001

$478.15

340.42 Z

478.15 Z

April 2001

$783.19

586.86 Z

783.19 Z

May 2001

$137.73

2.36 Z

-340.42 Z

June 2001

$196.33

-94.03 Z

-586.86 Z

July 2001

$135.37

-833.07 Z

-2.36 Z

August 2001

$290.36

280.27 Z

94.03 Z

September 2001

$968.44

221.31 Z

833.07 Z

...

...

...

...

November 2003

$1,192.76

1,121.73 Z

308.20 Z

December 2003

$772.07

-144.58 Z

459.55 Z

January 2004

$71.03

-231.08 Z

-1,121.73 Z

February 2004

$916.65

916.65 Z

144.58 Z

March 2004

$302.11

302.11 Z

231.08 Z

([Measures].[Zysk]) - ([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LEAD(-2)),
FORMAT_STRING = '###,###.00 Z'
SELECT
{[Measures].[Zysk], Measures.[do +2], Measures.[do -2]} ON COLUMNS,
NONEMPTY(
DESCENDANTS([Time].[Year - Quarter - Month - Date].CurrentMember,
[Time].[Year - Quarter - Month - Date].[month])) ON ROWS
FROM [Zyski]

Na podobnych zasadach moemy dokona porwnania z wartoci wystpujc w przeszoci, uywajc funkcji PARALLELPERIOD( ), dla ktrej podajemy poziom, na jakim
bdzie odbywao si przesunicie do wartoci na tym samym poziomie w hierarchii.
Dlatego jeli bdziemy porwnywali zysk dla kolejnych miesicy, jak ma to miejsce
w przykadzie, to wskazanie w tej funkcji poziomu miesica przeniesie nas do wartoci
poprzedniej. Dla poziomu kwartau wskae miesic o tym samym numerze w poprzednim
kwartale (np. czerwiec > marzec), a jeeli parametrem bdzie rok, to ten sam miesic w poprzednim roku. Skutek wykonania zapytania obliczajcego zmian zysku
w stosunku do okresw rwnolegych na tych trzech poziomach zawiera tabela 6.41.
WITH
MEMBER Measures.[Miesieczny Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
PARALLELPERIOD([Time].[Year - Quarter - Month - Date].[Month])),
FORMAT_STRING = '###,###.00 Z'
MEMBER Measures.[Kwartalny Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
PARALLELPERIOD([Time].[Year - Quarter - Month - Date].[Quarter])),
FORMAT_STRING = '###,###.00 Z'
MEMBER Measures.[Roczny Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
PARALLELPERIOD( [Time].[Year - Quarter - Month - Date].[Year])),
FORMAT_STRING = '###,###.00 Z'

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

239

Tabela 6.41. Skutek wykonania zapytania wyznaczajcego zysk oraz jego zmian dla kolejnych
miesicy w stosunku do okresw rwnolegych na poziomie miesica, kwartau i roku

March 2001

Zysk

Miesieczny
Wzrost Zysku

Kwartalny
Wzrost Zysku

Roczny
Wzrost Zysku

$478.15

478.15 Z

478.15 Z

478.15 Z

April 2001

$783.19

305.04 Z

783.19 Z

783.19 Z

May 2001

$137.73

-645.46 Z

137.73 Z

137.73 Z

June 2001

$196.33

58.60 Z

-281.82 Z

196.33 Z

...

...

...

...

December 2001

$280.64

-466.49 Z

-687.80 Z

280.64 Z

January 2002

$241.33

-39.31 Z

231.24 Z

241.33 Z

February 2002

$646.37

405.04 Z

-100.76 Z

646.37 Z

March 2002

$1,635.39

989.02 Z

1,354.75 Z

1,157.24 Z

April 2002

$374.75

-1,260.64 Z

133.42 Z

-408.44 Z

May 2002

$1,247.33

872.58 Z

600.96 Z

1,109.60 Z

June 2002

$244.76

-1,002.57 Z

-1,390.63 Z

48.43 Z

...

...

...

...

December 2002

$304.29

-606.59 Z

-287.18 Z

23.65 Z

..

March 2004

$302.11

-614.54 Z

-469.96 Z

-48.96 Z

SELECT
{[Measures].[Zysk], Measures.[Miesieczny Wzrost Zysku],
Measures.[Kwartalny Wzrost Zysku],Measures.[Roczny Wzrost Zysku]} ON COLUMNS,
NONEMPTY(
DESCENDANTS([Time].[Year - Quarter - Month - Date].CurrentMember,
[Time].[Year - Quarter - Month - Date].[month])) ON ROWS
FROM [Zyski]

Oprcz wyznaczenia porwnania midzy okresami rwnolegymi moliwe jest wykonanie go w stosunku do okresu otwierajcego, okrelonego za pomoc funkcji
OPENINGPERIOD( ), dla ktrej podajemy poziom hierarchii, na jakim wyszukiwany
bdzie atrybut o najmniejszym indeksie. W przypadku osi czasu wskazanie tego samego
poziomu, dla ktrego jest wywietlana warto, przenosi nas do elementu poprzedniego; w przykadzie zrobiono tak dla miesicy, dla kwartau pierwszy jego miesic,
w ktrym prowadzono dziaalno, oraz analogicznie dla poziomu roku. Przykadowy
zestaw rekordw pokazuje tabela 6.42.
WITH
MEMBER Measures.[Miesieczny Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
OPENINGPERIOD( [Time].[Year - Quarter - Month - Date].[Month],
[Time].[Year - Quarter - Month - Date].CurrentMember.Parent)),
FORMAT_STRING = '###,###.00 Z'
MEMBER Measures.[Kwartalny Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
OPENINGPERIOD( [Time].[Year - Quarter - Month - Date].[Quarter],

240

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.42. Skutek wykonania zapytania wyznaczajcego zysk oraz jego zmian dla kolejnych
miesicy w stosunku do pierwszych atrybutw na poziomie miesica, kwartau i roku
Zysk

Miesieczny
Wzrost Zysku

Kwartalny
Wzrost Zysku

Roczny Wzrost
Zysku

March 2001

$478.15

478.15 Z

.00 Z

478.15 Z

April 2001

$783.19

.00 Z

-334.06 Z

783.19 Z

May 2001

$137.73

-645.46 Z

-979.52 Z

137.73 Z

June 2001

$196.33

-586.86 Z

-920.92 Z

196.33 Z

...

...

...

...

December 2001

$280.64

270.55 Z

-757.22 Z

280.64 Z

January 2002

$241.33

.00 Z

-2,281.76 Z

241.33 Z

February 2002

$646.37

405.04 Z

-1,876.72 Z

646.37 Z

March 2002

$1,635.39

1,394.06 Z

-887.70 Z

1,635.39 Z

April 2002

$374.75

.00 Z

-1,492.09 Z

374.75 Z

May 2002

$1,247.33

872.58 Z

-619.51 Z

1,247.33 Z

June 2002

$244.76

-129.99 Z

-1,622.08 Z

244.76 Z

...

...

...

...

December 2002

$304.29

-196.42 Z

-1,411.59 Z

304.29 Z

...

...

...

...

March 2004

$302.11

231.08 Z

-987.68 Z

302.11 Z

[Time].[Year - Quarter - Month - Date].CurrentMember.Parent)),


FORMAT_STRING = '###,###.00 Z'
MEMBER Measures.[Roczny Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
OPENINGPERIOD( [Time].[Year - Quarter - Month - Date].[Year],
[Time].[Year - Quarter - Month - Date].CurrentMember.Parent)),
FORMAT_STRING = '###,###.00 Z'
SELECT
{[Measures].[Zysk], Measures.[Miesieczny Wzrost Zysku],
Measures.[Kwartalny Wzrost Zysku],Measures.[Roczny Wzrost Zysku]} ON COLUMNS,
NONEMPTY(
DESCENDANTS([Time].[Year - Quarter - Month - Date].CurrentMember,
[Time].[Year - Quarter - Month - Date].[Month])) ON ROWS
FROM [Zyski]

Prost analogi porwna wzgldem okresu otwierajcego jest porwnanie do okresu


zamykajcego. Wykorzystujemy w tym celu funkcj CLOSINGPERIOD( ), ktr zastosowano w kolejnym przykadzie, bdcym prostym przeksztaceniem poprzedniego skryptu. Rezultaty dziaania tego zapytania przedstawiono w tabeli 6.43. Pomimo
e wszystkie przykady funkcji i metod porwnywania wartoci midzy wartociami
odlegymi o dany dystans oraz do okresw rwnolegych, otwierajcych i zamykajcych,
dotyczyy osi czasu, mona je stosowa dla dowolnych wymiarw zawierajcych
przynajmniej jedn hierarchi. Przyczyn takiej ilustracji jest zarwno wzgldna atwo tumaczenia ich dziaania, jak i bardzo czste stosowanie w praktyce. W przypadku
innych typw wymiarw wskazania dotycz odpowiednich indeksw na poziomie
potomnym, okrelonym parametrem (rwnolege takie same, otwierajcym o najniszej wartoci, zamykajcym o najwyszej wartoci).

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

241

Tabela 6.43. Skutek wykonania zapytania wyznaczajcego zysk oraz jego zmian dla kolejnych
miesicy w stosunku do ostatnich atrybutw na poziomie miesica, kwartau i roku

Zysk

Miesieczny
Wzrost Zysku

Kwartalny
Wzrost Zysku

Roczny Wzrost
Zysku

July 2001

$135.37

-833.07 Z

-1,258.80 Z

135.37 Z

August 2001

$290.36

-678.08 Z

-1,103.81 Z

290.36 Z

September 2001

$968.44

.00 Z

-425.73 Z

968.44 Z

October 2001

$10.09

-270.55 Z

-1,027.77 Z

10.09 Z

November 2001

$747.13

466.49 Z

-290.73 Z

747.13 Z

December 2001

$280.64

.00 Z

-757.22 Z

280.64 Z

January 2002

$241.33

-1,394.06 Z

-2,281.76 Z

241.33 Z

June 2002

$244.76

.00 Z

-1,622.08 Z

244.76 Z

July 2002

$1,265.32

673.85 Z

-1,202.64 Z

1,265.32 Z

August 2002

$611.17

19.70 Z

-1,856.79 Z

611.17 Z

September 2002

$591.47

.00 Z

-1,876.49 Z

591.47 Z

October 2002

$500.71

196.42 Z

-1,215.17 Z

500.71 Z

November 2002

$910.88

606.59 Z

-805.00 Z

910.88 Z

December 2002

$304.29

.00 Z

-1,411.59 Z

304.29 Z

WITH
MEMBER Measures.[Miesieczny Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
CLOSINGPERIOD( [Time].[Year - Quarter - Month - Date].[Month],
[Time].[Year - Quarter - Month - Date].CurrentMember.Parent)),
FORMAT_STRING = '###,###.00 Z'
MEMBER Measures.[Kwartalny Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
CLOSINGPERIOD( [Time].[Year - Quarter - Month - Date].[Quarter],
[Time].[Year - Quarter - Month - Date].CurrentMember.Parent)),
FORMAT_STRING = '###,###.00 Z'
MEMBER Measures.[Roczny Wzrost Zysku] AS
([Measures].[Zysk]) - ([Measures].[Zysk],
CLOSINGPERIOD( [Time].[Year - Quarter - Month - Date].[Year],
[Time].[Year - Quarter - Month - Date].CurrentMember.Parent)),
FORMAT_STRING = '###,###.00 Z'
SELECT
{[Measures].[Zysk], Measures.[Miesieczny Wzrost Zysku],
Measures.[Kwartalny Wzrost Zysku],Measures.[Roczny Wzrost Zysku]} ON COLUMNS,
NONEMPTY(
DESCENDANTS([Time].[Year - Quarter - Month - Date].CurrentMember,
[Time].[Year - Quarter - Month - Date].[Month])) ON ROWS
FROM [Zyski]

242

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Moliwe jest rwnie wyznaczenie sumy biecej przy uyciu zoenia bardzo oglnej
funkcji PERIODSTODATE( ), ktra pozwala na wskazanie atrybutw na dowolnym
poziomie wskazywanym pierwszym parametrem, oraz funkcji SUM( ). Wynikowy zestaw rekordw przedstawia tabela 6.44. Brak zmiany pomidzy kolejnymi miesicami
wynika z faktu, e w tym okresie nie bya prowadzona sprzeda danej kategorii towaru.
Moliwe jest uycie innej spord zdefiniowanych w rodowisku funkcji agregujcych,
np. AVG( ) w celu wyznaczenia kroczcej wartoci redniej.
WITH MEMBER Measures.Zysk_YTD AS
SUM(PERIODSTODATE([Time].[Year - Quarter - Month - Date].[Year],
[Time].[Year - Quarter - Month - Date].CurrentMember),
[Measures].[Zysk]), FORMAT_STRING = #.00
SELECT
[Towar_calosc].[Nazwa Kategorii].MEMBERS
ON COLUMNS,
DESCENDANTS([Time].[Year - Quarter - Month - Date],
[Time].[Year - Quarter - Month - Date].[Month]) ON ROWS
FROM [Zyski]
WHERE Measures.Zysk_YTD

Tabela 6.44. Skutek wykonania zapytania wyznaczajcego sum biec zysku w ramach kolejnych lat
dziaalnoci firmy dla kadej kategorii towaru
All

Akcesoria

Biurowe

...

Telefony

Zegary

Unknown

January 2001

(null)

(null)

(null)

(null)

(null)

(null)

February 2001

(null)

(null)

(null)

(null)

(null)

(null)

March 2001

478.15

51.15

(null)

(null)

(null)

(null)

April 2001

1261.34

119.35

(null)

326.12

53.04

(null)

May 2001

1399.07

131.67

(null)

326.12

80.79

(null)

June 2001

1595.40

194.46

(null)

..

360.64

80.79

(null)

November 2001

3746.79

497.33

(null)

596.82

461.59

(null)

December 2001

4027.43

506.66

(null)

596.82

580.26

(null)

January 2002

241.33

(null)

(null)

(null)

(null)

(null)

February 2002

887.70

38.64

(null)

120.56

62.73

(null)

March 2002

2523.09

78.83

(null)

394.91

172.35

(null)

November 2002

8269.48

477.04

(null)

1325.83

320.13

(null)

December 2002

8573.77

511.14

(null)

1340.22

320.13

(null)

..

January 2004

71.03

43.05

(null)

(null)

(null)

(null)

February 2004

987.68

46.13

(null)

(null)

(null)

(null)

March 2004

1289.79

87.99

(null)

(null)

(null)

(null)

..

November 2004

1289.79

87.99

(null)

(null)

(null)

(null)

December 2004

1289.79

87.99

(null)

(null)

(null)

(null)

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

243

Analizujc wyniki zawarte w tabeli 6.44, zauwaamy, e wystpuj w niej wartoci


puste, poniewa dla czci zdefiniowanych kategorii nie prowadzono sprzeday oraz
nie istniej elementy nieprzypisane do adnej z kategorii Unknown. Ich eliminacji nie
moemy dokona za pomoc funkcji NOTEMPTY( ) naley zastosowa funkcj
FILTER z wyraeniem okrelajcym, e interesuj nas tylko te kolumny, dla ktrych
zysk jest rny od null. Takie dziaanie prezentuje poniszy skrypt, ktrego wyniki
zawiera tabela 6.45.
WITH MEMBER Measures.Zysk_YTD AS
SUM(PERIODSTODATE(
[Time].[Year - Quarter - Month - Date].[Year],
[Time].[Year - Quarter - Month - Date].CurrentMember),
[Measures].[Zysk]), FORMAT_STRING = '#.00'
SELECT FILTER(
[Towar_calosc].[Nazwa Kategorii].MEMBERS, Measures.Zysk<>NULL)
ON COLUMNS,
DESCENDANTS([Time].[Year - Quarter - Month - Date],
[Time].[Year - Quarter - Month - Date].[Month]) ON ROWS
FROM [Zyski]
WHERE Measures.Zysk_YTD

Tabela 6.45. Skutek wykonania zapytania wyznaczajcego sum biec zysku w ramach kolejnych lat
dziaalnoci firmy dla kadej kategorii towaru z usunitymi pustymi kolumnami
All

Akcesoria

GPS

...

Telefony

Zegary

January 2001

(null)

(null)

(null)

(null)

(null)

February 2001

(null)

(null)

(null)

(null)

(null)

March 2001

478.15

51.15

(null)

(null)

(null)

April 2001

1261.34

119.35

(null)

326.12

53.04

November 2001

3746.79

497.33

395.56

596.82

461.59

December 2001

4027.43

506.66

395.56

596.82

580.26

January 2002

241.33

(null)

(null)

(null)

(null)

February 2002

887.70

38.64

(null)

..

120.56

62.73

December 2002

8573.77

511.14

870.59

1340.22

320.13

January 2004

71.03

43.05

(null)

(null)

(null)

February 2004

987.68

46.13

133.65

(null)

(null)

December 2004

1289.79

87.99

202.80

(null)

(null)

Zamiast stosowa ogln funkcj PERIODSTATE( ) moemy uy jej wyspecjalizowanego odpowiednika. Do wyznaczenia sum biecych w okresie roku bdzie nim funkcja YTD( ) (Year to Date). Przykad jej wykorzystania jest przedstawiony niej, natomiast
wynikowy zestaw rekordw jest taki sam jak poprzednio, pokazany w tabeli 6.45.
WITH MEMBER Measures.Zysk_YTD AS
SUM(YTD( ), [Measures].[Zysk]), FORMAT_STRING = '#.00'
SELECT FILTER(

244

Hurtownie danych. Od przetwarzania analitycznego do raportowania


[Towar_calosc].[Nazwa Kategorii].MEMBERS, Measures.Zysk<>NULL)
ON COLUMNS,
DESCENDANTS([Time].[Year - Quarter - Month - Date],
[Time].[Year - Quarter - Month - Date].[Month]) ON ROWS
FROM [Zyski]
WHERE Measures.Zysk_YTD

Poniewa funkcja PERIODSTODATE( ) pozwala na wskazanie dowolnego poziomu,


dla ktrego wskazywane bd jego kolejne atrybuty, moemy wyznacza sum biec
np. dla kwartau, zmieniajc pierwszy argument jej wywoania na poziom hierarchii
Quarter. W prezentowanym przykadzie dokonano, tak jak poprzednio, eliminacji pustych kolumn, a skutek jego przetwarzania zawarto w tabeli 6.46.
WITH MEMBER Measures.Zysk_QTD AS
SUM(PERIODSTODATE([Time].[Year - Quarter - Month - Date].[Quarter],
[Time].[Year - Quarter - Month - Date].CurrentMember),
[Measures].[Zysk]), FORMAT_STRING = #.00
SELECT FILTER(
[Towar_calosc].[Nazwa Kategorii].MEMBERS, Measures.Zysk<>NULL)
ON Columns,
DESCENDANTS([Time].[Year - Quarter - Month - Date],
[Time].[Year - Quarter - Month - Date].[Month]) ON ROWS
FROM [Zyski]
WHERE Measures.Zysk_QTD

Tabela 6.46. Skutek wykonania zapytania wyznaczajcego sum biec zysku w kolejnych kwartaach
dziaalnoci firmy dla kadej kategorii towaru z usunitymi pustymi kolumnami
All

Akcesoria

GPS

...

Telefony

Zegary

January 2001

(null)

(null)

(null)

(null)

(null)

February 2001

(null)

(null)

(null)

(null)

(null)

March 2001

478.15

51.15

(null)

(null)

(null)

April 2001

783.19

68.20

(null)

326.12

53.04

May 2001

920.92

80.52

30.27

326.12

80.79

June 2001

1117.25

143.31

76.37

360.64

80.79

January 2002

241.33

(null)

(null)

(null)

(null)

February 2002

887.70

38.64

(null)

..

120.56

62.73

March 2002

2523.09

78.83

539.67

394.91

172.35

April 2002

374.75

25.16

(null)

(null)

(null)

May 2002

1622.08

122.06

145.34

132.99

73.89

June 2002

1866.84

128.22

211.54

132.99

73.89

January 2004

71.03

43.05

(null)

(null)

(null)

February 2004

987.68

46.13

133.65

(null)

(null)

March 2004

1289.79

87.99

202.80

(null)

(null)

April 2004

(null)

(null)

(null)

(null)

(null)

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

245

Rwnie dla poziomu kwartau istnieje dedykowana funkcja QTD( ) (Quarter to Date), ktra moe zastpi ogln funkcj PERIODSTATE( ). Przykad jej zastosowania
zosta przedstawiony niej, a skutek wykonania zapytania jest taki sam jak poprzedniego
i zawarty jest w tabeli 6.47. Istniej te funkcje dedykowane dla innych poziomw w hierarchii czasu: miesica MTD( ) Month to Date, tygodnia WTD( ) Week to Date.
WITH MEMBER Measures.Zysk_QTD AS
SUM(QTD( ), [Measures].[Zysk]), FORMAT_STRING = '#.00'
SELECT FILTER(
[Towar_calosc].[Nazwa Kategorii].MEMBERS, Measures.Zysk<>NULL)
ON COLUMNS,
DESCENDANTS([Time].[Year - Quarter - Month - Date],
[Time].[Year - Quarter - Month - Date].[Month]) ON ROWS
FROM [Zyski]
WHERE Measures.Zysk_QTD

Tabela 6.47. Skutek wykonania zapytania wyznaczajcego zysk w wojewdztwach w kolejnych


kwartaach dziaalnoci firmy dla kadej kategorii towaru z usunitymi pustymi kolumnami i wierszami
All

Akcesoria

GPS

...

Telefony

Zegary

kujawskopomorskie

Quarter 2, 2001

$51.65

$12.32

(null)

(null)

(null)

kujawskopomorskie

Quarter 2, 2002

$372.97

$47.12

(null)

...

$130.23

(null)

kujawskopomorskie

Quarter 3, 2002

$541.89

$34.10

(null)

...

$54.92

(null)

kujawskopomorskie

Quarter 3, 2003

$375.50

(null)

(null)

$120.56

(null)

kujawskopomorskie

Quarter 1, 2004

$61.02

(null)

(null)

...

(null)

(null)

..

dzkie

Quarter 2, 2001

$489.68

$68.20

$30.27

...

$154.16

$27.75

dzkie

Quarter 3, 2001

$882.55

$147.38

(null)

$115.62

$98.52

dzkie

Quarter 4, 2001

$403.58

$126.79

$129.5
1

...

(null)

(null)

dzkie

Quarter 1, 2002

$1,904.8
6

$38.64

$539.6
7

...

$365.58

$161.25

...

...

dzkie

Quarter 1, 2004

$454.37

$44.94

$69.15

...

(null)

(null)

maopolskie

Quarter 3, 2001

$154.97

(null)

(null)

...

(null)

$97.44

...

...

Kolejny przykad ilustruje moliwo wygenerowania krotki na hierarchiach nalecych


do rnych wymiarw, opisujcych zupenie odmienne cechy. Utworzono zapytanie
pokazujce zysk dla kadej kategorii towaru. Wiersze przedstawiaj kolejne wojewdztwa, z ktrych wywodz si klienci firmy. Kada grupa wierszy okrelajca jedno
wojewdztwo jest podzielona na kolejne kwartay, w ktrych prowadzono sprzeda.
Eliminacj pustych kolumn wykonano jak poprzednio, stosujc funkcj FILTER( ),

246

Hurtownie danych. Od przetwarzania analitycznego do raportowania

natomiast puste wiersze wyeliminowano za pomoc funkcji NONEMPTY( ). Przyczyn


powstawania pustych wierszy moe by zarwno to, e nie byo adnych klientw
wywodzcych si z wojewdztwa zawartego w sowniku, jak i to, e nie byo ich tylko
w ktrym z wywietlonych kwartaw.
SELECT
FILTER(
[Towar_calosc].[Nazwa Kategorii].MEMBERS, Measures.Zysk<>NULL)
ON COLUMNS,
NONEMPTY(CROSSJOIN(
[Klienci].[Woj_miast_klient].[Wojewdztwo].Members,
[Time].[Year - Quarter - Month - Date].[Quarter].Members)) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Filtrowanie w zapytaniach MDX


Przeledmy teraz przykad z prostym zastosowaniem filtrowania. Tak jak w poprzednich
przykadach, do opisu kolumn uyto nazw kategorii, dla ktrych bya prowadzona
sprzeda. Natomiast w przypadku wierszy zastosowano filtrowanie wojewdztw, z ktrych pochodz klienci, ograniczajc je do takich, w ktrych zysk ze sprzeday towarw przez cay czas prowadzenia dziaalnoci (wze ALL dla wymiaru czasu) przekracza warto 500. Formalnie naleaoby dokona sumowania wzgldem wymiaru,
ktrego nie wywietlono, ale jest to rwnowane wywietlanemu wzowi ALL dla
kategorii. Trzeba zauway, e wartoci zysku dla poszczeglnych kategorii nie musz przekracza wartoci progowej, jak pokazano w tabeli 6.48.
SELECT
FILTER([Towar_calosc].[Nazwa Kategorii].Members, Measures.Zysk<>NULL)
ON COLUMNS,
FILTER( [Klienci].[Woj_miast_klient].[Wojewdztwo].Members,
([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].[All])>500 ) ON ROWS
FROM [Zyski]
WHERE [Measures].[Zysk]

Tabela 6.48. Skutek wykonania zapytania wyznaczajcego zysk w wojewdztwach dla kadej kategorii
towaru z usunitymi pustymi kolumnami oraz sum zysku w caym okresie dziaania przekraczajc 500
All

Akcesoria

GPS

...

Telefony

Zegary

kujawsko-pomorskie

$1,403.03

$93.54

(null)

...

$305.71

(null)

lubelskie

$765.55

$127.60

(null)

...

$57.18

$73.89

dzkie

$8,974.66

$1,036.80

$1,293.96

...

$1,658.77

$787.94

maopolskie

$1,132.53

$11.78

$99.24

...

$130.35

$97.44

podkarpackie

$971.88

$3.66

(null)

...

$188.03

(null)

pomorskie

$2,223.19

$121.19

$268.74

...

$249.76

$84.18

lskie

$3,081.26

$73.55

$250.38

...

$272.40

$249.15

wielkopolskie

$3,197.37

$241.09

$387.94

...

$581.23

$283.47

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

247

W nastpnym przykadzie poza dwoma ju zastosowanymi filtrami, przy ktrych tworzeniu wykorzystano funkcj FILTER( ), dodano kolejny. Tym razem do jego zdefiniowania uyto klauzuli WHERE, ktrej podstawowym zadaniem jest definiowanie wywietlanej w wynikowym zestawie rekordw miary. Jeli jednak w jej definicji uyjemy
dwch parametrw ujtych w nawias zwyky, to rola pierwszego pozostaje bez zmian,
natomiast drugi stanowi tzw. definicj plastra. Innymi sowy, w wynikowym zestawie
rekordw zostan wywietlone miary dla tych komrek, dla ktrych wyraenie bdce drugim atrybutem jest prawdziwe. Moemy powiedzie, e jest to inna posta definicji filtru. W prezentowanym przykadzie do zastosowanych uprzednio ogranicze,
powodujcych, e wywietlane s niepuste kolumny oraz wartoci zysku wiksze ni
500, dodano kolejne, powodujce, e wywietlane bd tylko zyski osignite w 2003
roku. Analizujc wyniki przedstawione w tabeli 6.49, moemy zauway, e teraz istniej w wle ALL wartoci nieprzekraczajce 500. Wynika to z tego, e filtr najpierw
usun te wiersze, dla ktrych zysk w caym okresie sprzeday by od wartoci progowej mniejszy, natomiast do wywietlenia wybrano tylko zysk osignity w roku 2003,
wskazanym definicj plastra.
SELECT
FILTER([Towar_calosc].[Nazwa Kategorii].MEMBERS, Measures.Zysk<>NULL)
ON Columns,
FILTER( [Klienci].[Woj_miast_klient].[Wojewdztwo].Members,
([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].[All])>500) ON ROWS
FROM [Zyski]
WHERE ([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2003])

Tabela 6.49. Skutek wykonania zapytania wyznaczajcego zysk osignity w 2003 roku w wojewdztwach
dla kadej kategorii towaru z usunitymi pustymi kolumnami oraz sum zysku w caym okresie dziaania
przekraczajc 500
All

Akcesoria

GPS

...

Telefony

Zegary

kujawsko-pomorskie

$375.50

(null)

(null)

...

$120.56

(null)

lubelskie

$556.42

$62.79

(null)

...

$57.18

$73.89

dzkie

$2,974.87

$419.88

$429.40

...

$651.89

$352.64

maopolskie

$24.60

(null)

(null)

...

(null)

(null)

podkarpackie

$446.47

(null)

(null)

...

$173.64

(null)

pomorskie

$1,105.10

$50.24

$19.84

...

$69.73

$73.08

lskie

$1,171.49

(null)

$184.10

...

$149.08

$176.07

wielkopolskie

$1,204.03

$70.51

$197.97

...

$284.31

(null)

Analogiczne filtrowanie zastosowano w kolejnym przykadzie, tym razem biorc pod


uwag sprzeda nie dla wojewdztw, lecz miast, z ktrych pochodz klienci naszej
firmy. Wynikowy zestaw rekordw zawiera tabela 6.50.
SELECT
NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON COLUMNS,
NONEMPTY(FILTER({[Klienci].[Woj_miast_klient].[Miasto].Members},
([Measures].[Zysk], [Time].[Year].[All])>500)) ON ROWS
FROM [Zyski]
WHERE ([Measures].[Zysk], [Time].[Year].[Calendar 2003])

248

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.50. Skutek wykonania zapytania wyznaczajcego zysk osignity w 2003 roku w miastach
dla kadej kategorii towaru z usunitymi pustymi kolumnami oraz sum zysku w caym okresie dziaania
przekraczajc 500
All

Akcesoria

GPS

...

Telefony

Zegary

WOCAWEK

$375.50

(null)

(null)

...

$120.56

(null)

KUTNO

$865.16

$94.50

$191.44

...

$161.01

(null)

...

...

...

...

...

...

...

ZGIERZ

$582.68

(null)

(null)

...

$432.22

(null)

...

...

...

...

...

...

...

KNURW

$534.62

(null)

$50.45

...

(null)

$100.35

ERKW

$578.26

(null)

$89.10

...

$43.17

(null)

Posta filtru moe by bardziej skomplikowana, a przede wszystkim dotyczy rwnie


miar obliczanych ad hoc. W kolejnym przykadzie zdefiniowano prezentowan ju
poprzednio miar zysk procentowy jako stosunek zysku do wartoci zakupu. W definicji
kolumn wskazano na kategorie towarw. Natomiast w definicji wierszy przy uyciu
funkcji FILTER( ) okrelono, e wywietlone bd miasta, z ktrych pochodz klienci
takie, w ktrych przypadku osignity zysk procentowy bdzie mniejszy ni zysk
procentowy w wojewdztwie, w ktrym dane miasto jest ulokowane. Wskazanie poziomu wojewdztwa zostao wykonane za pomoc funkcji ANCESTOR( ), wybierajcej przodka biecego atrybutu na wskazanym poziomie. Porwnanie to dotyczy wza
ALL, okrelajcego wszystkie kategorie (przez indukcj rwnie wszystkie towary).
Analizujc wynikowy zestaw rekordw (tabela 6.51), moemy zaobserwowa, e
zysk procentowy dla jednej kategorii towarw jest wysoki, ale rednia dla wszystkich
jest na tyle niska, e nie przekracza redniej w wojewdztwie. Co jest szczeglnie widoczne w komrce dla miasta Dblin oraz kategorii Telefony.
WITH
MEMBER [Measures].[ZyskProcentowy] AS
([Measures].zysk) /
([Measures].[Wartosc Zakupu]), FORMAT_STRING = '#.00%'
SELECT
NONEMPTY ([Towar_calosc].[Nazwa Kategorii].Members) ON COLUMNS,
NONEMPTY(FILTER(
[Klienci].[Woj_miast_klient].[Miasto].Members,

Tabela 6.51. Skutek wykonania zapytania wyznaczajcego zysk procentowy dla kadej kategorii towaru
w miastach, w ktrych redni zysk procentowy ze wszystkich kategorii nie przekracza redniego zysku
procentowego w wojewdztwie
All

Akcesoria

GPS

...

Telefony

Zegary

WOCAWEK

21.47%

(null)

(null)

...

35.50%

(null)

DBLIN

35.47%

35.38%

(null)

...

56.48%

38.48%

...

...

...

...

...

...

...

REM

24.80%

58.16%

(null)

...

64.10%

17.13%

TUREK

23.88%

58.75%

21.97%

...

(null)

(null)

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

249

([Measures].[ZyskProcentowy],
[Time].[All]) < ([Measures].[ZyskProcentowy], [Time].[All],
ANCESTOR([Klienci].[Woj_miast_klient].CurrentMember,
[Klienci].[Woj_miast_klient].[Wojewdztwo])))) ON ROWS
FROM [Zyski]
WHERE ([Measures].[ZyskProcentowy], [Time].[All])

Aby uatwi analiz poprzedniego przykadu, przedstawiono zapytanie wywietlajce


te miasta, dla ktrych zysk procentowy ze wszystkich towarw jest wyszy od redniej w odpowiednim wojewdztwie. Wyniki tego zapytania s zawarte w tabeli 6.52
i stanowi uzupenienie poprzedniej do wszystkich rekordw. Oczywicie purysta zauway, e efekt ten osigniemy, jeli w jednym z dwch zapyta zastosujemy nierwno nieostr. Mona te powiedzie, e o ile poprzednie zapytanie okrela miasta, z ktrych klienci s najmniej aktywni, o tyle aktualne okrela miasta liderw.
Taki wskanik moe by bardzo uyteczny w praktyce biznesowej i pozwala na
jeszcze wiksze aktywizowanie klientw okrelonych miast przez zintensyfikowanie
reklamy albo powikszenie liczby placwek handlowych. Natomiast w stosunku do miast
mao aktywnych powinno to rozpocz proces naprawczy w placwkach, a w skrajnym
przypadku moe prowadzi do likwidacji sabego oddziau.
WITH
MEMBER [Measures].[ZyskProcentowy] AS
([Measures].zysk) /
([Measures].[Wartosc Zakupu]), FORMAT_STRING = '#.00%'
SELECT
NONEMPTY ([Towar_calosc].[Nazwa Kategorii].Members) ON COLUMNS,
NONEMPTY(FILTER(
[Klienci].[Woj_miast_klient].[Miasto].Members,
([Measures].[ZyskProcentowy],
[Time].[All]) > ([Measures].[ZyskProcentowy], [Time].[All],
ANCESTOR([Klienci].[Woj_miast_klient].CurrentMember,
[Klienci].[Woj_miast_klient].[Wojewdztwo])))) ON ROWS
FROM [Zyski]
WHERE ([Measures].[ZyskProcentowy], [Time].[All])

Tabela 6.52. Skutek wykonania zapytania wyznaczajcego zysk procentowy dla kadej kategorii towaru
w miastach, w ktrych redni zysk procentowy ze wszystkich kategorii jest wikszy od redniego zysku
procentowego w wojewdztwie
All

Akcesoria

GPS

...

Telefony

Zegary

KAMIE
KRAJESKI

30.16%

15.71%

(null)

...

59.85%

(null)

CHEM

36.48%

55.33%

(null)

...

43.62%

(null)

...

...

...

...

...

...

...

WRZENIA

34.60%

(null)

23.42%

...

36.06%

(null)

ERKW

37.79%

55.33%

39.08%

...

35.38%

(null)

W celu omwienia kolejnej funkcjonalnoci, moliwej do uzyskania w MDX, zrealizujmy proste zapytanie wywietlajce wszystkie miary dla wszystkich miast, z ktrych pochodz klienci naszej firmy. Aby pomin puste wiersze, czyli miasta, z ktrych nie wywodzi si aden klient, zastosowano funkcj NONEMPTY( ). Analizujc

250

Hurtownie danych. Od przetwarzania analitycznego do raportowania

wyniki przedstawione w tabeli 6.53, zauwaymy, e lista miast jest zorganizowana


w ten sposb, e w obrbie wojewdztw uoonych alfabetycznie (niewidoczne w wynikowym zestawie) lista miast jest wywietlana rwnie alfabetycznie. Wida to wyranie
w przypadku rekordw Zgierz zgodnie z alfabetem ostatnie miasto wojewdztwa
dzkiego i Brzeszcze pierwsze alfabetycznie miasto wojewdztwa maopolskiego. To samo mona powiedzie o parach rekordw: Limanowa (maopolskie) i Jarosaw (podkarpackie), Kolbuszowa (podkarpackie) i Czersk (pomorskie). Taki porzdek
rekordw wynika z zastosowania do opisu wierszy czonkw hierarchii Woj_miast_klient
o strukturze poziomw: wojewdztwo nadrzdny i miasto podrzdny.
SELECT [Measures].Members ON COLUMNS,
NONEMPTY([Klienci].[Woj_miast_klient].[Miasto].Members) ON ROWS
FROM [Zyski]

Tabela 6.53. Skutek wykonania zapytania wyznaczajcego wszystkie miary dla wszystkich miast,
z ktrych pochodz klienci
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

...

...

...

...

...

DBLIN

31

1571.24

1159.82

12

KUTNO

102

8135.73

6016.8

34

OWICZ

74

6257.75

4832.52

27

699.12

484.98

PABIANICE

47

4211.19

3109.87

12

PIOTRKW
TRYBUNALSKI

82

5969.84

4528.51

30

SIERADZ

28

3145.87

2496.79

TOMASZW
MAZOWIECKI

35

2657.11

1912.17

13

ZGIERZ

81

4645.96

3366.27

29

BRZESZCZE

53

4185.32

3231.43

19

LIMANOWA

14

1340.1

1161.46

JAROSAW

20

1696.86

1250.39

KOLBUSZOWA

30

2681.01

2155.6

12

CZERSK

478.23

353.87

GDASK

76

6500.66

5011.47

22

GDYNIA

30

2159.15

1682.79

...

...

...

...

...

ERKW

33

2824.11

2049.52

13

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

251

Wyznaczanie przedziaw
i zakresw dla wymiarw
Dla przedstawionego poprzednio zestawu miast okrelmy teraz przedzia, wskazujc
pierwszy i ostatni jego element w opisie wiersza i rozdzielajc je dwukropkiem
wybrane zostay Kutno i Czersk, znajdujce si odpowiednio w wojewdztwach dzkim i pomorskim. Wynikowy zestaw rekordw w tabeli 6.54 pokazuje, e w dalszym
cigu jest zachowany porzdek wynikajcy z nadrzdnego poziomu wojewdztw.
SELECT [Measures].Members ON COLUMNS,
NONEMPTY([Klienci].[Woj_miast_klient].[Miasto].[KUTNO]:[CZERSK]) ON ROWS
FROM [Zyski]

Tabela 6.54. Skutek wykonania zapytania wyznaczajcego wszystkie miary dla miast z przedziau
Kutno, Czersk
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

KUTNO

102

8135.73

6016.8

34

OWICZ

74

6257.75

4832.52

27

699.12

484.98

PABIANICE

47

4211.19

3109.87

12

PIOTRKW
TRYBUNALSKI

82

5969.84

4528.51

30

SIERADZ

28

3145.87

2496.79

TOMASZW
MAZOWIECKI

35

2657.11

1912.17

13

ZGIERZ

81

4645.96

3366.27

29

BRZESZCZE

53

4185.32

3231.43

19

LIMANOWA

14

1340.1

1161.46

JAROSAW

20

1696.86

1250.39

KOLBUSZOWA

30

2681.01

2155.6

12

CZERSK

478.23

353.87

Istnieje moliwo jawnego zdefiniowania sposobu sortowania wynikowego zestawu


rekordw na skutek zastosowania funkcji ORDER( ), ktrej pierwszym parametrem
jest zbir podlegajcy sortowaniu, drugi wskazuje atrybut, wedug ktrego sortowanie
nastpuje, a trzeci wskazuje sposb porzdkowania. W prezentowanym przykadzie
wykorzystano dyrektyw ASC, powodujc, e sortowanie nastpuje w kierunku narastajcych wartoci bez amania hierarchii. Oznacza to, e porzdkowanie odbywa
si w obrbie kadej wartoci nadrzdnego wza oddzielnie. Na skutek przyjtych
definicji wymiaru definiujcego klientw rezultat bez sortowania i z zastosowanym
sortowaniem w kolejnym przykadzie jest dokadnie taki sam tabela 6.55.
SELECT [Measures].Members ON COLUMNS,
NONEMPTY(
ORDER([Klienci].[Woj_miast_klient].[Miasto].[KUTNO]:[CZERSK],

252

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.55. Skutek wykonania zapytania wyznaczajcego wszystkie miary dla miast z przedziau
Kutno Czersk, posortowane malejco wzgldem miary Wartosc bez amania porzdku wynikajcego
z nadrzdnego poziomu hierarchii
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

KUTNO

102

8135.73

6016.8

34

OWICZ

74

6257.75

4832.52

27

PIOTRKW
TRYBUNALSKI

82

5969.84

4528.51

30

ZGIERZ

81

4645.96

3366.27

29

PABIANICE

47

4211.19

3109.87

12

SIERADZ

28

3145.87

2496.79

TOMASZW
MAZOWIECKI

35

2657.11

1912.17

13

699.12

484.98

CZERSK

478.23

353.87

BRZESZCZE

53

4185.32

3231.43

19

LIMANOWA

14

1340.1

1161.46

KOLBUSZOWA

30

2681.01

2155.6

12

JAROSAW

20

1696.86

1250.39

[Klienci].[Woj_miast_klient].CurrentMember.Name, ASC)
) ON ROWS
FROM [Zyski]

Oczywicie istnieje rwnie moliwo zmiany kierunku sortowania na malejcy przez


zastosowanie dyrektywy DESC. Podobnie jak w poprzednim przykadzie, takie porzdkowanie nie powoduje zamania hierarchii, co moemy zaobserwowa, analizujc wyniki
zawarte w tabeli 6.48. Aby urozmaici nieco prezentowane po kolei przykady, tym razem
o kolejnoci decyduje warto sprzeday, a nie tak jak poprzednio nazwa atrybutu.
SELECT [Measures].Members ON COLUMNS,
NONEMPTY(ORDER([Klienci].[Woj_miast_klient].[Miasto].[KUTNO]:[CZERSK],
[Measures].[Wartosc], DESC)
) ON ROWS
FROM [Zyski]

Odmiennie od zwykego SQL istniej dwie kolejne dyrektywy okrelajce sposb


sortowania, tym razem amice porzdek wynikajcy ze sposobu organizacji poziomu
nadrzdnego. Pierwsza z nich, BASC, powoduje porzdkowanie rosnce, co zostao
pokazane w poniszym przykadzie. Analizujc wyniki zawarte w tabeli 6.56, widzimy, e na kolejno wywietlania rekordw ma wpyw tylko warto sprzeday, niezalenie od wojewdztwa, w ktrym to miasto si znajduje.
SELECT [Measures].Members ON COLUMNS,
NONEMPTY(
ORDER([Klienci].[Woj_miast_klient].[Miasto].[KUTNO]:[CZERSK],
[Klienci].[Woj_miast_klient].CurrentMember.Name, BASC)
) ON ROWS
FROM [Zyski]

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

253

Tabela 6.56. Skutek wykonania zapytania wyznaczajcego wszystkie miary dla miast z przedziau
Kutno Czersk, posortowane rosnco wzgldem miary Wartosc bez uwzgldnienia porzdku
wynikajcego z nadrzdnego poziomu hierarchii
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

BRZESZCZE

53

4185.32

3231.43

19

CZERSK

478.23

353.87

JAROSAW

20

1696.86

1250.39

KOLBUSZOWA

30

2681.01

2155.6

12

KUTNO

102

8135.73

6016.8

34

LIMANOWA

14

1340.1

1161.46

OWICZ

74

6257.75

4832.52

27

699.12

484.98

PABIANICE

47

4211.19

3109.87

12

PIOTRKW
TRYBUNALSKI

82

5969.84

4528.51

30

SIERADZ

28

3145.87

2496.79

TOMASZW
MAZOWIECKI

35

2657.11

1912.17

13

ZGIERZ

81

4645.96

3366.27

29

Oczywicie trzecim wariantem stosowania wskazywanym przez dyrektyw BDESC


jest porzdkowanie malejce, amice porzdek nadrzdnego poziomu hierarchii, jak
pokazuje kolejne zapytanie oraz wynikowy zestaw rekordw w tabeli 6.57.
SELECT [Measures].Members ON COLUMNS,
NONEMPTY(ORDER([Klienci].[Woj_miast_klient].[Miasto].[KUTNO]:[CZERSK],
[Measures].[Wartosc], BDESC)
) ON ROWS
FROM [Zyski]

Funkcja ORDER pozwala na uycie czwartego parametru, ktry powoduje ograniczenie wywietlanych rekordw do okrelonej nim liczby. W prezentowanym przykadzie
ograniczono si do siedmiu miast o najwikszej wartoci sprzeday, wystpujcych
w przedziale Kutno Czersk, bez wzgldu na ich przynaleno do wojewdztwa, co
moemy zaobserwowa, analizujc wynikowy zestaw rekordw z tabeli 6.58.
SELECT [Measures].Members ON COLUMNS,
NONEMPTY(
HEAD(ORDER([Klienci].[Woj_miast_klient].[Miasto].[KUTNO]:[CZERSK],
[Measures].[Wartosc], BDESC),7)
) ON ROWS
FROM [Zyski]

254

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.57. Skutek wykonania zapytania wyznaczajcego wszystkie miary dla miast z przedziau
Kutno Czersk, posortowane malejco wzgldem miary Wartosc bez uwzgldnienia porzdku
wynikajcego z nadrzdnego poziomu hierarchii
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

KUTNO

102

8135.73

6016.8

34

OWICZ

74

6257.75

4832.52

27

PIOTRKW
TRYBUNALSKI

82

5969.84

4528.51

30

ZGIERZ

81

4645.96

3366.27

29

PABIANICE

47

4211.19

3109.87

12

BRZESZCZE

53

4185.32

3231.43

19

SIERADZ

28

3145.87

2496.79

KOLBUSZOWA

30

2681.01

2155.6

12

TOMASZW
MAZOWIECKI

35

2657.11

1912.17

13

JAROSAW

20

1696.86

1250.39

LIMANOWA

14

1340.1

1161.46

699.12

484.98

CZERSK

478.23

353.87

Tabela 6.58. Skutek wykonania zapytania wyznaczajcego wszystkie miary dla miast z przedziau
Kutno Czersk, posortowane malejco wzgldem miary Wartosc bez uwzgldnienia porzdku
wynikajcego z nadrzdnego poziomu hierarchii z ograniczeniem do siedmiu pierwszych rekordw
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

KUTNO

102

8135.73

6016.8

34

OWICZ

74

6257.75

4832.52

27

PIOTRKW
TRYBUNALSKI

82

5969.84

4528.51

30

ZGIERZ

81

4645.96

3366.27

29

PABIANICE

47

4211.19

3109.87

12

BRZESZCZE

53

4185.32

3231.43

19

SIERADZ

28

3145.87

2496.79

Podobn rol, ograniczajc liczb wywietlanych rekordw, odgrywa funkcja TOPCOUNT( ). Powoduje ona, e wywietlane s atrybuty dane pierwszym parametrem, a ich
liczba okrela drugi z parametrw. Trzeci parametr ustala miar, wzgldem ktrej malejco porzdkowane s rekordy. W prezentowanym przykadzie, ktrego skutek wykonania zawarto w tabeli 6.59, wywietlanych jest pierwszych dziesi miast, w ktrych
bya najwysza warto sprzeday.
SELECT [Measures].Members ON COLUMNS,
NONEMPTY(
TOPCOUNT(

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

255

Tabela 6.59. Skutek wykonania zapytania wyznaczajcego dziesi miast o najwikszej wartoci sprzeday

KUTNO

Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

102

8135.73

6016.8

34

KNURW

88

7666.17

6102.02

29

GDASK

76

6500.66

5011.47

22

OWICZ

74

6257.75

4832.52

27

PIOTRKW
TRYBUNALSKI

82

5969.84

4528.51

30

ZGIERZ

81

4645.96

3366.27

29

PABIANICE

47

4211.19

3109.87

12

BRZESZCZE

53

4185.32

3231.43

19

KAMIE
KRAJESKI

49

3600.02

2765.76

19

WOCAWEK

27

3218.13

2649.36

[Klienci].[Woj_miast_klient].[Miasto].Members, 10, [Measures].[Wartosc])


) ON ROWS
FROM [Zyski]

Funkcja TOPCOUNT( ) moe by wykorzystana do definiowania ad hoc zestawu rekordw, jak pokazuje kolejny przykad. Zastosowano tak sam definicj jak ta, ktra
poprzednio bezporednio okrelaa wiersze. Ten zestaw rekordw zosta nastpnie
uyty do definicji atrybutu ad hoc ze zdefiniowan wartoci miary. Obliczenie wykonano, odejmujc od cakowitej sumy (warto dla wza ALL) warto wyznaczon
funkcj SUM( ) dla wskazanego zestawu rekordw. Zarwno zestaw rekordw, jak
i zdefiniowany atrybut zostay zastosowane do okrelenia zbioru opisujcego wiersze.
Wynik wykonania zapytania przedstawia tabela 6.60.
WITH
SET TopTens AS
TOPCOUNT(
[Klienci].[Woj_miast_klient].[Miasto].members, 10, [Measures].[Wartosc])
MEMBER [Klienci].[Woj_miast_klient].[Inne Miasta] AS
([Klienci].[Woj_miast_klient].[All], Measures.CurrentMember) SUM(TopTens, Measures.CurrentMember)
SELECT [Measures].Members ON COLUMNS,
{TopTens, [Inne Miasta]} ON ROWS
FROM [Zyski]

Podobn funkcjonalno oferuje funkcja TOPPERCENT( ). Znaczenia pierwszego i trzeciego parametru pozostaj bez zmian i definiuj one atrybut wywietlany oraz atrybut,
wzgldem ktrego nastpuje porzdkowanie. Drugi parametr okrela tym razem procent cakowitej sumy atrybutu trzeciego. Wywietlone bd te wiersze, ktrych suma
trzeciego parametru, uporzdkowanego malejco, po raz pierwszy przekroczy wskazany procent. Przykadowe zapytanie powoduje wywietlenie tych miast, w ktrych
czna ilo sprzedanych towarw przekracza 50% caoci. Wynikowy zestaw rekordw jest przedstawiony w tabeli 6.61.

256

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.60. Skutek wykonania zapytania wyznaczajcego dziesi miast o najwikszej wartoci
sprzeday oraz sum sprzeday dla pozostaych
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

KUTNO

102

8135.73

6016.8

34

KNURW

88

7666.17

6102.02

29

GDASK

76

6500.66

5011.47

22

OWICZ

74

6257.75

4832.52

27

PIOTRKW
TRYBUNALSKI

82

5969.84

4528.51

30

ZGIERZ

81

4645.96

3366.27

29

PABIANICE

47

4211.19

3109.87

12

BRZESZCZE

53

4185.32

3231.43

19

KAMIE
KRAJESKI

49

3600.02

2765.76

19

WOCAWEK

27

3218.13

2649.36

Inne Miasta

502

38593.67

29620.96

172

Tabela 6.61. Skutek wykonania zapytania wyznaczajcego te miasta, w ktrych sprzedano najwicej
towarw, a ich czna liczba przekracza 50% cakowitej sprzeday
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

KUTNO

102

8135.73

6016.8

34

KNURW

88

7666.17

6102.02

29

PIOTRKW
TRYBUNALSKI

82

5969.84

4528.51

30

ZGIERZ

81

4645.96

3366.27

29

GDASK

76

6500.66

5011.47

22

OWICZ

74

6257.75

4832.52

27

BRZESZCZE

53

4185.32

3231.43

19

KAMIE
KRAJESKI

49

3600.02

2765.76

19

SELECT [Measures].Members ON COLUMNS,


TOPPERCENT(
[Klienci].[Woj_miast_klient].[Miasto].Members, 50,
[Measures].[Ilosc]) ON ROWS
FROM [Zyski]

Zarwno w definicji funkcji TOPCOUNT( ), jak i TOPPERCENT( ) trzeci z parametrw moe zosta okrelony w postaci niepenego zestawu. Definicja taka w postaci pary atrybutw okrelajcych miar i filtr jest analogiczna do prezentowanej
ju poprzednio definicji plastra. Przedstawiony przykad ma za zadanie wywietli
miary dla miast, w ktrych sprzedano najwicej towarw w roku 2004, a ich czna
liczba przekroczya 50% caoci sprzeday w tym roku. Analizujc wyniki zawarte

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

257

w tabeli 6.62, widzimy, e wywietlana liczba towarw nie jest uporzdkowana malejco. Wynika to z faktu, e wywietlane s liczby z caego okresu prowadzenia dziaalnoci, a filtrowanie dotyczy tylko wybranego roku 2004. Wynika z tego, e liczba sprzedanych towarw w 2004 roku w Gdasku jest wiksza ni w tym samym roku w Kutnie,
chocia w caym okresie sprzeday sytuacja jest odwrotna. Sprawdzenie prawdziwoci
tego stwierdzenia pozostawiam uwanemu Czytelnikowi. Rwnie liczba wyprowadzonych rekordw jest mniejsza, co jest konsekwencj ograniczenia zakresu sprzeday.
SELECT [Measures].Members ON COLUMNS,
TOPPERCENT(
[Klienci].[Woj_miast_klient].[Miasto].Members, 50,
([Measures].[Ilosc], [Time].[Year].[Calendar 2004])) ON ROWS
FROM [Zyski]

Tabela 6.62. Skutek wykonania zapytania wyznaczajcego te miasta, w ktrych w roku 2004 sprzedano
najwicej towarw, a ich czna liczba przekracza 50% cakowitej sprzeday w tym roku
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

GDASK

76

6500.66

5011.47

22

KUTNO

102

8135.73

6016.8

34

BRZESZCZE

53

4185.32

3231.43

19

Kolejne zapytanie jest rozszerzeniem poprzednich, pokazujcym, e filtrowanie moe


zosta uyte rwnie w przypadku, kiedy kolumny i wiersze s zdefiniowane przez wymiary, z ktrych jeden ograniczono funkcj TOPPERCENT( ). Natomiast warto wywietlana w komrkach jest okrelana przez zastosowanie klauzuli WHERE. Mamy
do czynienia z klasycznym przykadem tabeli przestawnej, jak pokazuje tabela 6.63.
Prostsze postaci takich struktur zostay ju omwione.
SELECT [Towar_calosc].[Nazwa Kategorii].Members ON COLUMNS,
TOPPERCENT([Klienci].[Woj_miast_klient].[Miasto].Members, 50,
[Measures].[Ilosc]) ON ROWS
FROM [Zyski]
WHERE [Measures].[Ilosc]

Tabela 6.63. Skutek wykonania zapytania wywietlajcego liczb sprzedanych towarw dla tych miast,
w ktrych sprzedano najwicej towarw, a ich czna liczba przekracza 50% cakowitej sprzeday
All

Akcesoria

Biurowe

...

Telefony

Zegary

Unknown

KUTNO

102

17

(null)

14

(null)

(null)

KNURW

88

(null)

(null)

PIOTRKW
TRYBUNALSKI

82

19

(null)

(null)

ZGIERZ

81

(null)

20

(null)

GDASK

76

12

(null)

(null)

(null)

OWICZ

74

21

(null)

...

(null)

BRZESZCZE

53

(null)

...

(null)

KAMIE
KRAJESKI

49

10

(null)

(null)

(null)

258

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Ponownie przeanalizujmy filtrowanie, tym razem z zastosowaniem funkcji TOPSUM( ).


Analogicznie do poprzednich wywietla ona atrybuty, dla ktrych, liczc od najwikszych
wartoci parametru trzeciego, czna suma przekroczy warto wskazan rodkowym
parametrem. Aby uatrakcyjni nieco przykad, zdefiniowano dwie dodatkowe miary.
Pierwsz z nich jest czna sprzeda w latach 2002 i 2003, wyznaczona za pomoc
zwykego sumowania. Druga za pomoc funkcji SUM( ) wyznacza cakowit sprzeda we
wszystkich latach dziki odwoaniu si do wza ALL definiujcego drugi parametr tej
funkcji. Wielkoci porzdkujc rekordy oraz stosowan do wyznaczenia ograniczenia cznej wartoci na poziomie 10 000 jest pierwsza ze zdefiniowanych ad hoc miar.
Zapytanie, ktrego wynik przedstawia tabela 6.64, wywietla te towary, ktrych czna warto sprzeday w latach 2002 i 2003 przekroczya warto progow.
WITH MEMBER
[Time].[Year].[2002 + 2003] AS
([Measures].[Wartosc], [Time].[Year].[Calendar 2002]) +
([Measures].[Wartosc], [Time].[Year].[Calendar 2003])
MEMBER
[Time].[Year].Total AS
SUM([Measures].[Wartosc],[Time].[Year].[All])
SELECT
{[Time].[Year].[Calendar 2002], [Time].[Year].[Calendar 2003],
[Time].[Year].[2002 + 2003], [Time].[Year].Total} ON COLUMNS,
TOPSUM([Towar_calosc].[Kategoria_towar].[Id Towaru].Members, 10000,
[Time].[Year].[2002 + 2003]) ON ROWS
FROM [Zyski]
WHERE [Measures].[Wartosc]

Tabela 6.64. Skutek wykonania zapytania wywietlajcego warto sprzedanych towarw w wybranych
latach; sprzeda w latach 2002 i 2003 bya najwiksza, a cznie przekroczya 10 000
Calendar 2002

Calendar 2003

2002 + 2003

Total

Super

1250.92

1364.64

2615.56

3070.44

Sownik Pl/An

2325.75

(null)

2325.75

3101

Zestaw

198.24

1982.4

2180.64

2180.64

Tom A1

1310.32

833.84

2144.16

2501.52

Koncerty WAM

989.46

1099.4

2088.86

2308.74

Przeanalizujmy teraz zastosowanie znanych z klasycznego SQL-a funkcji agregujcych. Naley pamita, e inaczej ni w przypadku danych relacyjnych nie dziaaj
one bezporednio na danych zapisanych w tabeli, ale obliczane s na ju wyznaczonych podsumowaniach, uzyskanych podczas przetwarzania kostek. Dlatego funkcja
AVG( ) wyznacza redni miesiczn sprzeda dla kadego roku. Stan taki uzyskano,
wskazujc funkcj DESCENDANTS( ) wzy potomne dla kadego roku na poziomie
miesicy. Funkcja COUNT( ) z tak sam definicj pierwszego parametru i uzupeniona o deklaracj EXCLUDEEMPTY zlicza wszystkie miesice, w ktrych prowadzono dziaalno. Wynik wykonania tego zapytania zawarty jest w tabeli 6.65.
WITH
MEMBER [Time].[Year - Quarter - Month - Date].[SredniaIlosc] AS
AVG(DESCENDANTS([Time].[Year - Quarter - Month - Date].[Year],
[Time].[Year - Quarter - Month - Date].[Month]))

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

259

Tabela 6.65. Skutek wykonania zapytania wywietlajcego sprzeda wszystkich towarw w kolejnych
latach dziaalnoci, redni miesiczn warto sprzedanych towarw oraz liczb miesicy, w ktrych
dziaalno bya prowadzona

All

Calendar
2001

Calendar
2002

Calendar
2003

Calendar
2004

SredniaIlosc

IleMiesiecy

225

509

379

68

31.9189189189189

37

MEMBER [Time].[Year - Quarter - Month - Date].[IleMiesiecy] AS


COUNT(DESCENDANTS([Time].[Year - Quarter - Month - Date].[Year],
[Time].[Year - Quarter - Month - Date].[Month]), EXCLUDEEMPTY)
SELECT {[Time].[Year - Quarter - Month - Date].[Year],
[[SredniaIlosc], [IleMiesiecy]} ON COLUMNS,
[Towar_calosc].[Nazwa Kategorii] ON ROWS
FROM [Zyski]
WHERE [Measures].[Ilosc]

wiczc samodzielnie, warto sprawdzi dziaanie zapytania, w ktrym definicja wiersza zostanie rozszerzona do postaci:
[Towar_calosc].[Nazwa Kategorii].Members ON ROWS

co spowoduje, e wze ALL zostanie rozbity na wszystkie kategorie dostpne w sowniku. Zyska na znaczeniu druga z obliczanych miar, ktra tym razem okreli, w ilu miesicach okresu dziaania firmy prowadzona bya sprzeda dla kadej kategorii.
Poza wbudowanymi funkcjami MDX oferuje rwnie dostp do funkcji jzyka Visual
Basic for Application. W prezentowanym przykadzie do zdefiniowania wyraenia
filtrujcego zostaa zastosowana funkcja INSTR( ), ktra zwraca numer znaku liczony
od 1, od ktrego w acuchu danym drugim parametrem funkcji znajduje si poszukiwana fraza, wskazana przez trzeci parametr. Pierwszy argument tej funkcji wskazuje,
od ktrego znaku acuch ma by przeszukiwany. Ustawiona w przykadzie warto 1
oznacza, e analizowany bdzie cay acuch. Jeli poszukiwana fraza nie bdzie
znaleziona, zwrcona zostanie warto 0. Prezentowany przykad wywietla wszystkie
miary dla miast, w ktrych nazwie pojawia si dwuznakowa fraza KA. Wynikowy zestaw rekordw przedstawia tabela 6.66. W przykadzie jawnie wskazano na pochodzenie
funkcji z Basica, stosujc prefiks VBA!; w SQL Server 2008 moe on by pominity.
SELECT
Measures.Members ON COLUMNS,
NONEMPTY(
FILTER([Klienci].[Miasto].Members,
VBA!INSTR(1, [Miasto].CurrentMember.Name,
ON ROWS
FROM [Zyski]

KA )>0))

Tabela 6.66. Skutek wykonania zapytania wywietlajcego miary dla miast, w ktrych nazwie zawarta
jest fraza KA
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

KAMIE
KRAJESKI

49

3600.02

2765.76

19

KATOWICE

26

1978.98

1416.93

260

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Zastosowanie instrukcji warunkowych


Zajmijmy si problemem eliminacji wartoci NULL. Jest to szczeglnie istotne wtedy,
kiedy mamy do czynienia z obliczaniem wyrae algebraicznych. Zamy, e chcemy oblicza relatywny wzrost zysku w kolejnych okresach, np. miesicach, i odnosi
go do wartoci z okresu poprzedniego. Jeli w biecym i poprzednim okresie zysk
mia warto NULL, to rwnie wynik takiego dziaania ma t warto. Jeli jednak
w biecym okresie warto jest rna od NULL, to na skutek wykonania dziaania
otrzymujemy warto #INF, symbolizujc nieskoczono. Formalnie, z punktu widzenia matematyki, warto ta jest nieokrelona, gdy warto NULL nie naley do
dziedziny. Mona powiedzie, e niejawnie jest traktowana jak 0, ale to rwnie nie
jest cise. Dlatego warto byoby wykry takie stany, a wynik dziaania zastpi czyteln dla odbiorcy informacj. W prezentowanym przykadzie obliczono dwie miary
kalkulowane, informujce, czy warto w poprzedniej i biecej komrce jest okrelona. W tym celu zastosowana zostaa funkcja IIF( ), przywoywana ju w omwieniu
formatowania warunkowego. Jej pierwszym parametrem, reprezentujcym testowany
warunek, jest funkcja ISEMPTY( ), ktra zwraca warto TRUE, jeli jej parametr ma
warto NULL. W przykadzie zastosowano plaster badajcy miar Zysk dla atrybutw osi czasu. Odwoanie do odpowiedniej pozycji uzyskano, wykorzystujc odpowiednio metody CurrentMember i PrevMember. Zastosowano binarne kodowanie
stanw: 1 nieokrelona, 0 rna od NULL. Miary te posuyy do sformuowania warunku dla funkcji IIF( ) w definicji trzeciej z miar. Sprawdzono, czc elementarne warunki operatorem OR, czy ktrakolwiek z nich ma warto 1. Jeli odpowied jest pozytywna, komrka WzrostZysku bya okrelona jak 0%, w przeciwnym
wypadku jako iloraz wartoci biecej do poprzedniej. W zapytaniu, ktrego skutek
dziaania zawiera tabela 6.67, wywietlono Zysk i wszystkie miary obliczane ad hoc,
chocia miary CzyPusteBiezace i CzyPustePoprzednie mogy zosta pominite. Zdecydowano si na ich wywietlenie tylko ze wzgldw informacyjnych oraz aby rezultaty byy czytelniejsze.
WITH
MEMBER Measures.[CzyPusteBiezace] AS
IIF(ISEMPTY(
([Time].[Year - Quarter - Month - Date].CurrentMember, [Measures].[Zysk])),1,0)
MEMBER Measures.[CzyPustePoprzednie] AS
IIF(ISEMPTY(
([Time].[Year - Quarter - Month - Date].PrevMember, [Measures].[Zysk])), 1, 0)
MEMBER Measures.[WzrostZysku] AS
IIF((CzyPusteBiezace=1 OR CzyPustePoprzednie=1), 0, ([Measures].[Zysk])/
([Measures].[Zysk], [Time].[Year - Quarter - Month - Date].PrevMember)),
FORMAT_STRING = '#.00%'
SELECT
{[Measures].[Zysk], [WzrostZysku] , [CzyPusteBiezace], [CzyPustePoprzednie]} ON
COLUMNS,
DESCENDANTS([Time].[Year - Quarter - Month - Date].[Year],
[Time].[Year - Quarter - Month - Date].[Month]
) ON ROWS
FROM [Zyski]

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

261

Tabela 6.67. Skutek wykonania zapytania wywietlajcego wzrost zysku w odniesieniu do poprzedniego
miesica wraz z informacj o pustych komrkach
Zysk

WzrostZysku

CzyPusteBiezace

CzyPustePoprzednie

January 2001

(null)

.00%

February 2001

(null)

.00%

March 2001

$478.15

.00%

April 2001

$783.19

163.80%

May 2001

$137.73

17.59%

February 2004

$916.65

1290.51%

March 2004

$302.11

32.96%

April 2004

(null)

.00%

Zamiast pomocniczych miar informujcych o stanie komrek moliwe jest bezporednie zastosowanie zoenia dwch funkcji IIF( ), jak pokazano w kolejnym przykadzie. Zestaw wygenerowanych rekordw jest analogiczny do zaprezentowanego
w tabeli 6.67, z tym e nie zawiera dwch ostatnich kolumn.
WITH
MEMBER Measures.[WzrostZysku] AS
IIF(ISEMPTY(
([Time].[Year - Quarter - Month IIF(ISEMPTY(
([Time].[Year - Quarter - Month ([Measures].[Zysk])/
([Measures].[Zysk], [Time].[Year FORMAT_STRING = '#.00%'
SELECT
{[Measures].[Zysk], [WzrostZysku] }
DESCENDANTS([Time].[Year - Quarter
[Time].[Year - Quarter - Month ) ON ROWS
FROM [Zyski]

Date].CurrentMember, [Measures].[Zysk])),0,
Date].PrevMember, [Measures].[Zysk])), 0,
Quarter -

Month -

Date].PrevMember))),

ON COLUMNS,
- Month - Date].[Year],
Date].[Month]

Zamiast poczenia funkcji IIF( ) i ISEMPTY( ) moemy zastosowa funkcj COALESCEEMPTY( ), ktra zapewnia podobn funkcjonalno. Jeeli pierwszy z jej atrybutw jest NULL, to zastpowany jest wartoci okrelon drugim z nich. Aby nieco
odrni biecy przykad od poprzednich, stwierdzono, e kiedy poprzedni element
bdzie pusty, zastpiony zostanie wartoci biec. Daje to efekt przedstawiony w tabeli
6.68. Moemy zaobserwowa, e jeli warto bieca i poprzednia s NULL, zysk
wzgldny ma rwnie t warto. Jeeli jednak warto t ma tylko warto poprzednia, to wzgldny wzrost zysku bdzie mia warto 100%.
WITH
MEMBER Measures.[WzrostZysku] AS
([Measures].[Zysk])/
COALESCEEMPTY(([Measures].[Zysk],
[Time].[Year - Quarter - Month [Measures].[Zysk]),

Date].PrevMember),

262

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.68. Skutek wykonania zapytania wywietlajcego wzrost zysku w odniesieniu do poprzedniego
z zastosowaniem funkcji COALESCEEMPTY( ) do zmiany wartoci NULL na inn
Zysk

WzrostZysku

January 2001

(null)

(null)

February 2001

(null)

(null)

March 2001

$478.15

100.00%

April 2001

$783.19

163.80%

May 2001

$137.73

17.59%

June 2001

$196.33

142.55%

July 2001

$135.37

68.95%

August 2001

$290.36

214.49%

September 2001

$968.44

333.53%

October 2001

$10.09

1.04%

November 2001

$747.13

7404.66%

December 2001

$280.64

37.56%

February 2004

$916.65

1290.51%

March 2004

$302.11

32.96%

April 2004

(null)

(null)

FORMAT_STRING = '#.00%'
SELECT
{[Measures].[Zysk], [WzrostZysku] } ON COLUMNS,
DESCENDANTS([Time].[Year - Quarter - Month - Date].[Year],
[Time].[Year - Quarter - Month - Date].[Month]
) ON ROWS
FROM [Zyski]

Zastosowanie funkcji agregujcych


w zapytaniach MDX
Kolejny przykad ilustruje, w jaki sposb dziaaj po stronie hurtowni danych funkcje
agregujce. W przeciwiestwie do stosowania ich w schemacie relacyjnym nie dziaaj bezporednio na wartociach, ale na ju wyznaczonych podsumowaniach po
przetworzeniu kostki. Odpowiada to zoeniu po stronie relacyjnej dziaania dwch
funkcji agregujcych, z reguy dziaajcych dla rnych poziomw grupowania. W przykadzie wyznaczono warto redni AVG z wartoci sprzeday na poziomie dzieci
wybranych wojewdztw. Czyli jest to warto uredniona we wszystkich miastach
wybranego wojewdztwa, w ktrych sprzeda bya prowadzona. Wynikowy rezultat

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

263

przetworzenia tego zapytania zawiera tabela 6.69. Warto zauway, e poniewa nie
zastosowano formatowania, w wielu wypadkach wywietlana jest nadmiarowa liczba
cyfr po przecinku.
WITH
MEMBER [Measures].[lubelskie AVG] AS
AVG({[Klienci].[Woj_miast_klient].[Wojewdztwo].[lubelskie].Children},
[Measures].[Wartosc])
MEMBER [Measures].[dzkie AVG] AS
AVG({[Klienci].[Woj_miast_klient].[Wojewdztwo].[dzkie].Children},
[Measures].[Wartosc])
MEMBER [Measures].[pomorskie AVG] AS
AVG({[Klienci].[Woj_miast_klient].[Wojewdztwo].[pomorskie].Children},
[Measures].[Wartosc])
SELECT
{([Measures].[lubelskie AVG]), ([Measures].[dzkie AVG]),
([Measures].[pomorskie AVG])} ON COLUMNS,
{([Time].[Year].[Calendar 2001]:[Time].[Year].[Calendar 2003])} ON ROWS
FROM [Zyski]

Tabela 6.69. Skutek wykonania zapytania wywietlajcego redni warto sprzeday w miastach
wybranych wojewdztw
lubelskie AVG

dzkie AVG

pomorskie AVG

Calendar 2001

402.77

1325.45833333333

650

Calendar 2002

437.84

1825.34125

872.953333333333

Calendar 2003

866.11

1669.78428571429

1607.35333333333

Funkcje agregujce mog by obliczane nie tylko dla staego zestawu rekordw, ale
i w postaci agregacji biecych, tzn. takich, gdzie do ich wyznaczenia zestaw rekordw przesuwa si, poczwszy od pierwszego elementu grupy po kolei do ostatniego.
W przedstawionym przykadzie zdefiniowano miar ad hoc wyznaczajc redni
wartoci sprzeday midzy poprzednim elementem PrevMember, biecym CurrentMember oraz nastpnym NextMember osi czasu na poziomie miesicy. Wyniki ograniczone zostay do jednej kategorii towarw Zegary. Rezultat wykonania tego zapytania przedstawia tabela 6.70. Warto zwrci uwag na wystpujce w niej przypadki
dwch kolejnych rekordw, w ktrych warto redniej nie ulega zmianie. wiadczy
to o tym, e druga z wartoci jest NULL. Dzieje si tak, poniewa puste rekordy nie s
brane pod uwag podczas wyznaczania funkcji agregujcych.
WITH MEMBER Measures.SredniaBiezaca AS
AVG({[Time].[Month].CurrentMember,
[Time].[Month].PrevMember, [Time].[Month].NextMember},
[Measures].[Wartosc]), FORMAT_STRING = '#.00 z'
SELECT
[Towar_calosc].[Nazwa Kategorii].[Zegary] ON COLUMNS,
FILTER(
[Time].[Month].Members,
[Time].[Month].CurrentMember.Value<>[Time].[Month].[All])
ON ROWS
FROM [Zyski]
WHERE Measures.SredniaBiezaca

264

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.70. Skutek wykonania zapytania wywietlajcego redni biec wartoci sprzeday
w kategorii Zegary dla poziomu miesicy osi czasu
Zegary
January 2001

(null)

February 2001

(null)

March 2001

362.68 z

April 2001

223.39 z

May 2001

223.39 z

...

December 2003

345.78 z

January 2004

273.84 z

February 2004

(null)

...

Podobny schemat przetwarzania wykorzystano do wyznaczenia redniej biecej wartoci


sprzeday dla wszystkich towarw. Nie zostaa zastosowana definicja pata w klauzuli
WHERE. Dla uatwienia analizy wynikw, ktre zawarto w tabeli 6.71, obok miary
obliczanej wyprowadzono kolumn rdow Wartosc.
WITH MEMBER Measures.SredniaBiezaca AS
AVG({[Time].[Month].CurrentMember,
[Time].[Month].PrevMember, [Time].[Month].NextMember},
[Measures].[Wartosc]), FORMAT_STRING = '#.00 z'
SELECT
{[Measures].[Wartosc], Measures.SredniaBiezaca} ON COLUMNS,
FILTER(
[Time].[Month].Members,
[Time].[Month].CurrentMember.Value<>[Time].[Month].[All])
ON ROWS
FROM [Zyski]

Tabela 6.71. Skutek wykonania zapytania wywietlajcego redni biec wartoci sprzeday
wszystkich towarw dla poziomu miesicy osi czasu
Wartosc

SredniaBiezaca

January 2001

(null)

(null)

February 2001

(null)

2759.07 z

March 2001

2759.07

3174.60 z

April 2001

3590.12

2342.61 z

May 2001

678.65

1694.45 z

February 2004

3654.49

1690.72 z

March 2004

1061.02

2357.76 z

April 2004

(null)

1061.02 z

May 2004

(null)

(null)

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

265

Zamiast ogranicza si w przypadku wyznaczania redniej biecej do metod wskazujcych poprzedniego czonka wymiaru, PrevMember, oraz nastpnego, NextMember,
wzgldem biecego, CurrentMember, moemy zastosowa funkcj LAG. Pozwala
ona na wskazanie przez parametr dowolnej odlegoci od biecego elementu. Wartoci ujemne dotycz atrybutw nastpujcych po atrybucie aktualnym, a dodatnie
po go poprzedzajcych. W przykadzie, ktrego wyniki zawiera tabela 6.72, poza do tej
pory wyznaczan centraln redni biec (PrevMember, CurrentMember, NextMember)
wyznaczono wsteczn redni biec, obliczan dla przedziau atrybutw od o dwa
poprzedzajcego do biecego. Aby uatwi analiz wynikw, wywietlona zostaa
rwnie rdowa warto sprzeday.
WITH MEMBER Measures.SredniaBiezacaLAG AS
AVG({[Time].[Month].CurrentMember.LAG(2):[Time].[Month].CurrentMember},
[Measures].[Wartosc]), FORMAT_STRING = '#.00 z'
MEMBER Measures.SredniaBiezaca AS
AVG(
{[Time].[Month].CurrentMember,[Time].[Month].PrevMember,
[Time].[Month].NextMember},
[Measures].[Wartosc]), FORMAT_STRING = '#.00 z'
SELECT
{Measures.Wartosc, Measures.SredniaBiezacaLAG, Measures.SredniaBiezaca}
ON COLUMNS,
FILTER(
[Time].[Month].Members,
[Time].[Month].CurrentMember.Value<>[Time].[Month].[All])
ON ROWS
FROM [Zyski]
WHERE [Towar_calosc].[Nazwa Kategorii].[Zegary]

Tabela 6.72. Skutek wykonania zapytania wywietlajcego porwnanie wstecznej i centralnej redniej
biecej wartoci sprzeday wszystkich towarw dla poziomu miesicy osi czasu
Wartosc

SredniaBiezacaLAG

SredniaBiezaca

January 2001

(null)

(null)

(null)

February 2001

(null)

(null)

(null)

March 2001

(null)

(null)

362.68 z

April 2001

362.68

362.68 z

223.39 z

May 2001

84.1

223.39 z

223.39 z

...

...

...

...

November 2003

417.72

357.32 z

329.49 z

December 2003

273.84

329.49 z

345.78 z

January 2004

(null)

345.78 z

273.84 z

February 2004

(null)

273.84 z

(null)

March 2004

(null)

(null)

(null)

...

...

...

...

Poniewa do wyznaczenia redniej biecej moe by uyty rny zakres atrybutw,


a take rne moe by ich umiejscowienie wzgldem wartoci biecej, w kolejnym
przykadzie przedstawiono kilka moliwoci. Wykorzystano gwnie funkcj LAG

266

Hurtownie danych. Od przetwarzania analitycznego do raportowania

z rnymi wartociami parametru okrelajcego przesunicie. Ponadto przez : wskazano przedzia wartoci. Wyniki otrzymane z przetworzenia tego zapytania zawarto
w tabeli 6.73 oraz zilustrowano na rysunku 6.12. Analiza przebiegw pozwala na
sformuowanie dwch wnioskw. Po pierwsze, przesunicie okna wzgldem wartoci
biecej analogicznie przesuwa wykres wynikowy. Po drugie, wzrost szerokoci okna
powoduje spaszczenie przebiegu zmiennoci, co moe by wykorzystywane do wykrywania trendu zmian.
WITH
MEMBER Measures.SredniaBiezaca AS
AVG({[Time].[Month].CURRENTMEMBER,[Time].[Month].PREVMEMBER,
[Time].[Month].NEXTMEMBER},
[Measures].[Wartosc]), FORMAT_STRING = '#.00'
MEMBER Measures.SredniaBiezacaLAG2 AS
AVG({[Time].[Month].CURRENTMEMBER.LAG(2):[Time].[Month].CURRENTMEMBER},
[Measures].[Wartosc]), FORMAT_STRING = '#.00'
MEMBER Measures.[SredniaBiezacaLAG-2] AS
AVG({[Time].[Month].CURRENTMEMBER:[Time].[Month].CURRENTMEMBER.LAG(-2)},
[Measures].[Wartosc]), FORMAT_STRING = '#.00'
MEMBER Measures.[SredniaBiezacaLAG-2+2] AS
AVG({[Time].[Month].CURRENTMEMBER.LAG(2):[Time].[Month].CURRENTMEMBER.LAG(-2)},
[Measures].[Wartosc]), FORMAT_STRING = '#.00'
MEMBER Measures.SredniaBiezacaLAG5 AS
AVG({[Time].[Month].CURRENTMEMBER.LAG(5):[Time].[Month].CURRENTMEMBER},
[Measures].[Wartosc]), FORMAT_STRING = '#.00'
MEMBER Measures.[SredniaBiezacaLAG-5+5] AS

Tabela 6.73. Skutek wykonania zapytania wywietlajcego porwnanie rnych rodzajw redniej
biecej wartoci sprzeday wszystkich towarw dla poziomu miesicy osi czasu
Wartosc

SredniaBiezacaLAG2

SredniaBiezacaLAG-2

SredniaBiezacaLAG-2+2

SredniaBiezacaLAG5

SredniaBiezacaLAG-5+5

January 2001

(null)

(null)

(null)

(null)

(null)

223.39

February 2001

(null)

(null)

362.68

362.68

(null)

223.39

March 2001

(null)

(null)

223.39

223.39

(null)

267.11

April 2001

362.68

362.68

223.39

223.39

362.68

299.31

May 2001

84.1

223.39

84.10

223.39

223.39

299.31

June 2001

(null)

223.39

354.56

267.11

223.39

413.13

January 2004

(null)

345.78

(null)

345.78

346.69

346.69

February 2004

(null)

273.84

(null)

273.84

329.49

329.49

March 2004

(null)

(null)

(null)

(null)

329.49

329.49

April 2004

(null)

(null)

(null)

(null)

345.78

345.78

May 2004

(null)

(null)

(null)

(null)

273.84

273.84

June 2004

(null)

(null)

(null)

(null)

(null)

(null)

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL


Rysunek 6.12.
Wykresy zmiennoci
dla rnych typw
redniej biecej
w porwnaniu
z przebiegiem
oryginalnym
pola Wartosc

267

1000
Srednie Biezace
Wartosc
LAG2
LAG-2
LAG-2+2
LAG5
LAG-5+5

800

600

400

200

May 2004

December 2003

July 2003

February 2003

September 2002

April 2002

November 2001

June 2001

January 2001

AVG({[Time].[Month].CURRENTMEMBER.LAG(5):[Time].[Month].CURRENTMEMBER.LAG(-5)},
[Measures].[Wartosc]), FORMAT_STRING = '#.00'
SELECT
{Measures.Wartosc, Measures.SredniaBiezacaLAG2,
Measures.[SredniaBiezacaLAG-2], Measures.[SredniaBiezacaLAG-2+2],
Measures.SredniaBiezacaLAG5, Measures.[SredniaBiezacaLAG-5+5]} ON COLUMNS,
FILTER(
[Time].[Month].members,
[Time].[Month].CURRENTMEMBER.value<>[Time].[Month].[All])
ON ROWS
FROM [Zyski]
WHERE [Towar_calosc].[Nazwa Kategorii].[Zegary]

Definiowanie zoonej struktury


dla wymiaru czasu
Kolejnym wanym elementem jest definiowanie krotek. Poprzednio realizowalimy to
zadanie, opierajc si na atrybutach zdefiniowanych ju wymiarw. Teraz zdefiniujemy
je jako wymiary ad hoc. Co prawda zawieraj one definicje rwnowane rdowym,
ale pozwalaj na bardziej plastyczne posugiwanie si operatorem CROSSJOIN, co

268

Hurtownie danych. Od przetwarzania analitycznego do raportowania

pokazuje przykad, ktrego wyniki zawiera tabela 6.74. Wyznaczono dwie krotki,
pierwsz na atrybutach reprezentujcych rok i kwarta, a drug czc wynik dziaania pierwszej z atrybutem miesica. Aby nie powiela pozycji ALL reprezentujcej
korze w definicji kadego atrybutu, pominito t warto, stosujc funkcj FILTER.
WITH
SET CzasR AS [Time].[Year].Members
SET CzasQ AS [Time].[Quarter].Members
SET CzasM AS [Time].[Month].Members
SELECT
Measures.Wartosc ON COLUMNS,
CROSSJOIN(
CROSSJOIN(
FILTER(CzasR, CzasR.CurrentMember.Value<>[Time].[Year].[All]),
FILTER(CzasQ, CzasQ.CurrentMember.Value<>[Time].[Quarter].[All]) ),
FILTER(CzasM, CzasM.CurrentMember.Value<>[Time].[Month].[All])) ON ROWS
FROM [Zyski]

Tabela 6.74. Skutek wykonania zapytania wywietlajcego warto sprzeday dla wyznaczonych
funkcjami CROSSJOIN poziomw roku, kwartau i miesica
Warto
Calendar 2001

Quarter 1, 2001

January 2001

(null)

Calendar 2001

Quarter 1, 2001

February 2001

(null)

Calendar 2001

Quarter 1, 2001

March 2001

2759.07

Calendar 2001

Quarter 2, 2001

April 2001

3590.12

Calendar 2001

Quarter 2, 2001

May 2001

678.65

Calendar 2001

Quarter 2, 2001

June 2001

814.59

Calendar 2001

Quarter 3, 2001

July 2001

546.98

Calendar 2001

Quarter 3, 2001

August 2001

1283.31

Calendar 2001

Quarter 3, 2001

September 2001

4853.73

Calendar 2001

Quarter 4, 2001

October 2001

68.55

Calendar 2001

Quarter 4, 2001

November 2001

3634.51

Calendar 2001

Quarter 4, 2001

December 2001

811.65

Calendar 2002

Quarter 1, 2002

January 2002

936.76

Calendar 2004

Quarter 1, 2004

January 2004

356.64

Calendar 2004

Quarter 1, 2004

February 2004

3654.49

Calendar 2004

Quarter 1, 2004

March 2004

1061.02

Calendar 2004

Quarter 2, 2004

April 2004

(null)

Przedstawione powyej postpowanie atwo rozcign na kolejne poziomy, co pokazuje nastpny przykad, w ktrym dodany zosta poziom dnia miesica. Poniewa
w przykadowym schemacie relacyjnym nie ma danych dla zbyt wielu dat (sprzeda
miaa miejsce do okazjonalnie, w niewielu dniach), w wynikowym zestawie rekordw,

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

269

pokazanym w tabeli 6.75, pojawia si bardzo dua liczba wartoci NULL. W rzeczywistych danych dla hurtowni taka sytuacja bdzie pojawiaa si niezwykle rzadko.
WITH
SET CzasR AS [Time].[Year].Members
SET CzasQ AS [Time].[Quarter].Members
SET CzasM AS [Time].[Month].Members
SET CzasD AS [Time].[Day Of Month].Members
SELECT
Measures.Wartosc ON COLUMNS ,
CROSSJOIN(
CROSSJOIN(
CROSSJOIN(
FILTER(CzasR, CzasR.CurrentMember.Value<>[Time].[Year].[All]),
FILTER(CzasQ, CzasQ.CurrentMember.Value<>[Time].[Quarter].[All]) ),
FILTER(CzasM, CzasM.CurrentMember.Value<>[Time].[Month].[All])),
FILTER(CzasD, CzasD.CurrentMember.Value<>[Time].[Day Of Month].[All])) ON ROWS
FROM [Zyski]

Tabela 6.75. Skutek wykonania zapytania wywietlajcego warto sprzeday dla wyznaczonych
funkcjami CROSSJOIN poziomw roku, kwartau, miesica i dnia
Wartosc
Calendar 2001

Quarter 1, 2001

January 2001

Day 1

(null)

Calendar 2001

Quarter 1, 2001

January 2001

Day 2

(null)

..

Calendar 2001

Quarter 1, 2001

March 2001

Day 17

2383.44

Calendar 2001

Quarter 1, 2001

March 2001

Day 23

375.63

Calendar 2001

Quarter 2, 2001

April 2001

Day 14

438.33

Calendar 2001

Quarter 2, 2001

April 2001

Day 18

1969.39

Calendar 2001

Quarter 2, 2001

April 2001

Day 19

(null)

Calendar 2001

Quarter 2, 2001

April 2001

Day 20

1182.4

Takie samo postpowanie moe dotyczy kadej osi wynikowego zestawu rekordw.
W kolejnym przykadzie do pokazanego ju trzykrotnego uycia funkcji CROSSJOIN
dla atrybutw czasu w osi opisujcej wiersze zostaa dodana krotka opisujca kategorie i towary w osi kolumn. Tak jak poprzednio, wyeliminowano atrybuty reprezentujce korzenie kadego poziomu. Dodatkowo wyeliminowano krotki z pustymi miarami
w obu osiach, stosujc funkcj NONEMPTY. Poniewa wynikowy zestaw rekordw
by mimo to bardzo rozlegy i trudny do rozsdnego przedstawienia, zrezygnowano
z tabeli ilustrujcej zestaw wynikowy uwany Czytelnik atwo bdzie mg samodzielnie go wygenerowa.
WITH
SET CzasR AS [Time].[Year].Members
SET CzasQ AS [Time].[Quarter].Members

270

Hurtownie danych. Od przetwarzania analitycznego do raportowania


SET CzasM AS [Time].[Month].Members
SET CzasD AS [Time].[Day Of Month].Members
SET Kategoria AS [Towar_calosc].[Nazwa Kategorii].Members
SET Towar AS [Towar_calosc].[Id Towaru].Members
SELECT
NONEMPTY(CROSSJOIN(
FILTER(Kategoria, Kategoria.CurrentMember.Value<>
[Towar_calosc].[Nazwa Kategorii].[All]),
FILTER(Towar, Towar.CurrentMember.Value<>[Towar_calosc].[Id Towaru].[All])))
ON COLUMNS ,
NONEMPTY(
CROSSJOIN(
CROSSJOIN(
CROSSJOIN(
FILTER(CzasR, CzasR.CurrentMember.Value<>[Time].[Year].[All]),
FILTER(CzasQ, CzasQ.CurrentMember.Value<>[Time].[Quarter].[All]) ),
FILTER(CzasM, CzasM.CurrentMember.Value<>[Time].[Month].[All])),
FILTER(CzasD, CzasDd.CurrentMember.Value<>[Time].[Day Of Month].[All]))) ON ROWS
FROM [Zyski]

Definiowanie operacji
na zbiorach atrybutw
Moliwe jest utworzenie zbioru atrybutw przez umieszczenie ich listy w nawiasie
klamrowym. W prezentowanym przykadzie, ktrego wynikowy zestaw rekordw
zawiera tabela 6.76, jako elementw uyto dzieci w trzech wybranych wojewdztwach. Oznacza to, e w opisie kolumn poka si wszystkie miasta z tych wojewdztw,
ktre s zawarte w tabeli sownikowej. Uycie funkcji NONEMPTY( ) spowoduje, e
lista ta zostanie ograniczona tylko do tych, w ktrych siedzib maj przedsibiorstwa,
ktrych towary kiedykolwiek sprzedano.
SELECT
{[Time].[Year].Members} ON COLUMNS,
NONEMPTY(
{[Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo].[lskie].Children,
[Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo].[dzkie].Children,
[Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo].[pomorskie].Children
})
ON ROWS
FROM [Zyski]
WHERE [Measures].[Wartosc]

Rwnowanym podejciem do definiowania zbioru jest zastpienie stosowanego poprzednio nawiasu klamrowego funkcj UNION( ), jak pokazuje kolejny przykad.
Atrybuty tej funkcji moe stanowi dowolnej liczebnoci lista atrybutw. Wynikowy
zestaw rekordw jest taki sam jak poprzednio (tabela 6.71).
SELECT
{[Time].[Year].Members} ON COLUMNS,
NONEMPTY(
UNION(

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

271

Tabela 6.76. Skutek wykonania zapytania wywietlajcego warto sprzeday wedug miast, z ktrych
pochodz producenci, dla trzech wybranych wojewdztw
All

Calendar 2001 Calendar 2002 Calendar 2003 Calendar 2004

BIELSKO-BIAA

16677.98 2238.72

9360.29

4721.61

357.36

KNURW

6592.86

1380.33

2734.23

1946.82

531.48

KUTNO

21735.09 4431.99

8558.59

7766.93

977.58

OWICZ

3858.2

643.11

1582.86

1026.24

605.99

15575.5

2198.33

5258.06

6646.27

1472.84

ZDUSKA WOLA 11982.5

4303.28

3435.33

3892.37

351.52

ZGIERZ

8691.34

1533.42

2665.43

3845.61

646.88

KPICE

2042.04

359.01

1563.36

119.67

(null)

KWIDZYN

5474.06

1837.49

1662.4

1845.67

128.5

[Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo].[lskie].Children,
[Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo].[dzkie].Children,
[Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo].[pomorskie].Children
))
ON ROWS
FROM [Zyski]
WHERE [Measures].[Wartosc]

W nastpnej czci zostanie przytoczonych kilka przykadw ilustrujcych rne elementy skadniowe MDX, do luno ze sob zwizane. Pierwszy z nich przedstawia zastosowanie miary obliczanej ad hoc jako elementu filtrowania. Miara wyznacza rnic sprzeday pomidzy rokiem 2004 a 2003. Dwuetapowe filtrowanie (zoenie dwch
funkcji FILTER( )) najpierw wybiera te rekordy, dla ktrych sprzeda w roku 2004
bya wiksza ni w roku 2003, a w kolejnym etapie wybierane s te z nich, w ktrych
rnica sprzeday jest wiksza ni 50. Formalnie rzecz ujmujc, drugi filtr powinien
zastpi zoenie dwch, co warto sprawdzi praktycznie. Cao zostaa posortowana
malejco, zgodnie z wartoci sprzeday, nie amic, ze wzgldu na uycie dyrektywy
DESC, porzdku wymuszonego nadrzdnym poziomem hierarchii. Warto sprawdzi,
jak zmian wniesie zastosowanie dyrektywy BDESC. Wynikowy zestaw rekordw
przedstawia tabela 6.77.
WITH MEMBER
[Time].[Year].[2004 - 2003] AS
([Time].[Year].[Calendar 2004], [Measures].[Wartosc])([Time].[Year].[Calendar 2003], [Measures].[Wartosc])
SELECT
{[Time].[Year].[Calendar 2003], [Time].[Year].[Calendar 2004],
[Time].[Year].[2004 - 2003]} ON COLUMNS,
ORDER(FILTER(FILTER([Towar_calosc].[Kategoria_towar].[Id Towaru].Members,
([Time].[Year].[Calendar 2004], [Measures].[Wartosc])>
(
[Time].[Year].[Calendar 2003], [Measures].[Wartosc])),
([Time].[Year].[2004 - 2003], [Measures].[Wartosc])>50),
[Time].[Year].[2004 - 2003], DESC) ON ROWS
FROM [Zyski]
WHERE ([Measures].[Wartosc],
[Klienci].[Id Klienta].[All], [Towar_calosc].[Id Towaru].[All],
[Osoby_hierarchia].[Id Osoby].[All])

272

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.77. Skutek wykonania zapytania wywietlajcego warto sprzeday tych towarw, ktrych
sprzeda w roku 2004 bya o 50 wiksza ni w roku 2003
Calendar 2003

Calendar 2004

2004 2003

Parawan

(null)

118.5

118.5

gadet

(null)

51.1

51.1

Gra +7

(null)

209

209

Arkusz

227.46

303.28

75.82

Podobnie jak poprzednio, zostaa zdefiniowana miara ad hoc, ktra tym razem oblicza
sum sprzeday w latach od 2001 do 2004. Poza tym wyznaczono zbir pomocniczy,
ktry dziki zastosowaniu funkcji TOPCOUNT( ) wyznacza dziesiciu (drugi parametr) najlepszych klientw pod wzgldem wartoci sprzeday w okresie wyznaczonym miar obliczan. Na skutek zastosowania funkcji FILTER( ) zosta usunity element
ALL reprezentujcy korze. Dwie pozostae miary korzystaj z definicji zbioru jako
parametru. Pierwsza z nich oblicza czn sum sprzeday dla najlepszych klientw,
a druga ich udzia procentowy w stosunku do cakowitej sprzeday. W przykadzie wywietlono rekordy reprezentujce kadego klienta z dziesitki najlepszych, podsumowanie
oraz udzia procentowy caej tej grupy. Wynik rozbito na lata (tabela 6.78), ale dodano rwnowane kolumny: ALL oraz [2001 do 2004]. Takie postpowanie jest uzasadnione chci sprawdzenia poprawnoci rozwizania. Moliwe jest jednak wykonanie
zgodnie z przedstawionym schematem podsumowania dla zakresu wszego ni cay
okres sprzeday, zmieniajc jedynie okres sumowanych lat w definicji pierwszej miary.
WITH
MEMBER [Time].[Year].[2001 do 2004] AS
([Time].[Year].[Calendar 2001], [Measures].[Wartosc]) +
([Time].[Year].[Calendar 2002], [Measures].[Wartosc]) +
([Time].[Year].[Calendar 2003], [Measures].[Wartosc]) +
([Time].[Year].[Calendar 2004], [Measures].[Wartosc])
MEMBER [Klienci].[Id Klienta].[Suma ALL] AS
([Klienci].[Id Klienta].[All], [Measures].[Wartosc])
SET [10 najlepszych] AS
TOPCOUNT(
FILTER([Klienci].[Id Klienta].Members,
[Klienci].[Id Klienta]<>[Klienci].[Id Klienta].[ALL])
,10,
([Time].[Year].[2001 do 2004], Measures.Wartosc))
MEMBER [Klienci].[Id Klienta].[Suma 10] AS
SUM([10 najlepszych], [Measures].[Wartosc])
MEMBER [Klienci].[Id Klienta].[Udzial %] AS
[Klienci].[Id Klienta].[Suma 10]/
[Klienci].[Id Klienta].[Suma ALL], FORMAT_STRING='0,00%'
SELECT
{[Time].[Year].Members, [Time].[Year].[2001 do 2004]} ON COLUMNS,
{[10 najlepszych],
[Klienci].[Id Klienta].[Suma 10],
[Klienci].[Id Klienta].[Suma ALL],
[Klienci].[Id Klienta].[Udzial %]}
ON ROWS
FROM [Zyski]
WHERE Measures.Wartosc

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

273

Tabela 6.78. Skutek wykonania zapytania wywietlajcego warto sprzeday dla dziesiciu najlepszych
klientw, sum i udzia procentowy dla tej grupy z rozbiciem na lata oraz dla caego okresu dziaalnoci
All

Calendar
2001

Calendar
2002

Calendar
2003

Calendar
2004

2001
do 2004

Bucior

3748.65

(null)

1292.25

2456.4

(null)

3748.65

Macho

3598.65

2383.44

1215.21

(null)

(null)

3598.65

Dorynek

2824.11

814.59

(null)

2009.52

(null)

2824.11

Machaa

2609.01

(null)

(null)

1198.41

1410.6

2609.01

Kdzierski

2561.55

274.64

605.1

1681.81

(null)

2561.55

Konkol

2474.68

(null)

2474.68

(null)

(null)

2474.68

Winiewski

2365.43

650

589.04

1126.39

(null)

2365.43

Graczykowski

2346.68

(null)

1103.24

1243.44

(null)

2346.68

Wolski

1969.39

1969.39

(null)

(null)

(null)

1969.39

Mory

1963.47

(null)

381.87

1581.6

(null)

1963.47

Suma 10

26461.62

6092.06

7661.39

11297.57

1410.6

26461.62

Suma ALL

92984.44

19041.16

36920.53

31950.6

5072.15

92984.44

Udzial %

028%

032%

021%

035%

028%

028%

Funkcje analityczne
i statystyczne w MDX
W rozdziale powiconym przetwarzaniu analitycznemu duo miejsca powicono
rnym funkcjom tego typu. Rwnie po stronie hurtowni mamy do liczn reprezentacj narzdzi do prowadzenia takiego przetwarzania. Do najwaniejszych miar
moemy zaliczy: korelacj opisujc wartociami z przedziau <-1, 1> zaleno liniow
zmian dwch atrybutw oraz kowariancj mierzc wariancj dla rozkadu wzgldem
dwch zmiennych. Formaln posta matematyczn wzorw opisujcych te wielkoci
zawiera tabela 6.79. Operujemy na zbiorach wartoci indeksowanych symbolami i oraz j,
o liczebnoci n, k lub l. Kreska nad symbolem okrela warto redni tej wielkoci.
Zastosowanie tych trzech funkcji w analizie kostki przedstawia kolejny przykad. Wszystkie one wymagaj podania w pierwszym parametrze zbioru atrybutw reprezentujcego
zakres ich wyznaczania. Natomiast drugi i trzeci parametr reprezentuj miary, dla ktrych
s obliczane, co odpowiada zmiennej x oraz y w przytoczonych poprzednio wzorach.
Poniewa funkcje s symetryczne, kolejno wymienienia miar na licie parametrw
nie odgrywa istotnej roli. W przykadzie, ktrego wynikowy zbir rekordw zawiera
tabela 6.80, wyznaczono wszystkie omawiane funkcje dla liczby sprzedanych towarw oraz zysku procentowego, jaki przyniosy firmie. Zestaw wynikowy ograniczono
do tych wierszy, w ktrych kowariancja jest wiksza ni 0. Symbol 1.#INF oznacza,
e warto mianownika bya 0, co z kolei oznacza, e wariancja przynajmniej jednej
zmiennej jest 0. Natomiast symbol -1.#IND oznacza, e warto mianownika nie zostaa wyznaczona, co z kolei oznacza, e wariancja jednej zmiennej jest ujemna.

274

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.79. Definicje korelacji i kowariancji


Nazwa

Wyraenie

(xi x ) (yi y )
n

rxy =

Korelacja

i =1

(xi x ) (yi y )
n

i =1

i =1

Kowariancja populacji

cxy =

1 l k
1 k
1 l

xi xi y j y j

kl j =1 i=1
k i =1
l j =1

Kowariancja prbki

cxy =

k
l
1 l k
(xi y j ) 1 xi y j

kl j =1 i=1
kl i=1 j =1

Tabela 6.80. Skutek wykonania zapytania wywietlajcego kowariancje populacji i prbki oraz korelacji
pomidzy iloci a zyskiem procentowym towarw, dla ktrych kowariancja populacji jest wiksza ni zero
Covar

CovarN

Arkusz

4.44089209850063E-16

4.44089209850063E-16 4.98688236793325E-08

Chemia

1.11022302462516E-16

2.22044604925031E-16 1.#INF

Czajnik

1.11022302462516E-16

2.22044604925031E-16 2.98023223876953E-08

FARMINGTON Gra

1.11022302462516E-16

1.11022302462516E-16 -1.#IND

Gra +16

1.11022302462516E-16

1.11022302462516E-16 4.2146848510894E-08

Kukuka

1.11022302462516E-16

2.22044604925031E-16 3.90203994934545E-08

Ramka

5.55111512312578E-17

1.11022302462516E-16 1.#INF

Statyw AX

5.55111512312578E-17

1.#INF

Super

2.22044604925031E-16

1.#INF

Uchwyt

2.22044604925031E-16

1.#INF

WITH
MEMBER [Measures].[Covar] AS
'COVARIANCE([Klienci].[Woj_miast_klient].[Miasto].Members,
[Measures].[Ilosc], [Measures].[ZyskProcentowy])'
MEMBER [Measures].[CovarN] AS
'COVARIANCEN([Klienci].[Woj_miast_klient].[Miasto].Members,
[Measures].[Ilosc], [Measures].[ZyskProcentowy])'
MEMBER [Measures].[Corel] AS
'CORRELATION([Klienci].[Woj_miast_klient].[Miasto].Members,
[Measures].[Ilosc], [Measures].[ZyskProcentowy])'
SELECT {[Measures].[Covar], [Measures].[CovarN],
[Measures].[Corel]} ON COLUMNS,
FILTER([Towar_calosc].[Id Towaru].Members,
[Measures].[Covar]>0) ON ROWS
FROM [Zyski]

Corel

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

275

Przytoczmy teraz kilka przykadw zwizanych z metodami zdefiniowanymi dla rnych typw atrybutw. Pierwszym bdzie Level, zwracajcy wszystkie atrybuty z tego
samego poziomu, na ktrym jest umieszczony obiekt, na rzecz ktrego dziaa. W prezentowanym przykadzie posuy nam on do wskazania wszystkich elementw z poziomu kwartaw wystpujcych na osi czasu. Wyniki wykonania tego przykadu zawiera tabela 6.81. Naley zwrci uwag, e zamiast uytego w zapytaniu elementu
[Quarter 1, 2001] mona wskaza dowolny inny, np. [Quarter 3, 2002], otrzymujc
dokadnie taki sam rezultat.
SELECT Wartosc ON COLUMNS,
[Time].[Year - Quarter - Month ON ROWS
FROM [Zyski]

Date].[Quarter].[Quarter 1, 2001].Level

Tabela 6.81. Skutek wykonania zapytania wywietlajcego warto sprzeday dla wszystkich atrybutw
z poziomu kwarta osi czasu
Wartosc
Quarter 1, 2001

2759.07

Quarter 2, 2001

5083.36

Quarter 3, 2001

6684.02

Quarter 4, 2001

4514.71

Quarter 1, 2004

5072.15

Quarter 2, 2004

(null)

Quarter 3, 2004

(null)

Quarter 4, 2004

(null)

Zastpienie metody Level w zapytaniu metod Hierarchy spowoduje zwrcenie tej


hierarchii, do ktrej naley obiekt, na rzecz ktrego ona dziaa, co przedstawia przykad oraz tabela 6.82.
SELECT Wartosc ON COLUMNS,
[Time].[Year - Quarter - Month ON ROWS
FROM [Zyski]

Date].[Quarter].[Quarter 1, 2001].Hierarchy

Tabela 6.82. Skutek wykonania zapytania wywietlajcego hierarchi, do ktrej naley poziom kwarta
Wartosc
All

92984.44

Poniewa metoda Hierarchy zastosowana w poprzednim zapytaniu zwraca obiekt reprezentujcy hierarchi zawierajc wskazany element, to dodanie do niej metody
Members spowoduje wywietlenie wszystkich czonkw hierarchii wystpujcych na
kadym zdefiniowanym w niej poziomie. Analizujc wyniki przedstawione w tabeli 6.83,
moemy zauway, e zbir zosta uporzdkowany, poczwszy od poziomu korzenia
ALL, i schodzi sukcesywnie w gb struktury, a do poziomu wierszy. Przedstawiony
przykad ilustruje moliwo wielokrotnego skadania metod, pod warunkiem e
zwracaj one obiekt waciwego typu dla metody bdcej jej nastpnikiem.

276

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.83. Skutek wykonania zapytania wywietlajcego wszystkich czonkw hierarchii


reprezentowanej przez wybranego czonka
Wartosc
All

92984.44

Calendar 2001

19041.16

Quarter 1, 2001

2759.07

January 2001

(null)

February 2001

(null)

March 2001

2759.07

Quarter 2, 2001

5083.36

April 2001

3590.12

May 2001

678.65

June 2001

814.59

Quarter 3, 2001

6684.02

Calendar 2004

5072.15

Quarter 1, 2004

5072.15

January 2004

356.64

February 2004

3654.49

March 2004

1061.02

Quarter 2, 2004

(null)

April 2004

(null)

SELECT Wartosc ON COLUMNS,


[Time].[Year - Quarter - Month 2001].Hierarchy.Members
ON ROWS
FROM [Zyski]

Date].[Quarter].[Quarter 1,

Metoda Siblings pozwala na wywietlenie atrybutw, ktre s rodzestwem dla wskazanego czonka. Oznacza to elementy znajdujce si na tym samym poziomie hierarchii,
ktre posiadaj takiego samego rodzica ten sam wze nadrzdny. Przykad powoduje wywietlenie rodzestwa dla wza [Quarter 1, 2001], czyli inaczej wszystkie
kwartay 2001 roku. Wynikowy zestaw rekordw zawiera tabela 6.84. Zmiana atrybutu
na inny kwarta tego roku nie przyniesie zmiany rezultatu.
SELECT Wartosc ON COLUMNS,
[Time].[Year - Quarter - Month ON ROWS
FROM [Zyski]

Date].[Quarter].[Quarter 1, 2001].Siblings

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

277

Tabela 6.84. Skutek wykonania zapytania wywietlajcego warto sprzeday dla rodzestwa wza
reprezentujcego pierwszy kwarta 2001 roku
Wartosc
Quarter 1, 2001

2759.07

Quarter 2, 2001

5083.36

Quarter 3, 2001

6684.02

Quarter 4, 2001

4514.71

Kolejny przykad pokazuje zastosowanie zczenia metody Level wskazujcej na poziom, do ktrego naley atrybut, z metod Members wybierajc wszystkich czonkw
tego poziomu, co zostao przedstawione w tabeli 6.85. Zmiana atrybutu na inny rok
nie spowoduje zmiany wyniku. Jeli wskazalibymy poziom, na ktrym jest wicej
ni jeden rodzic, np. kwarta, wywietlone zostayby wszystkie kwartay bez wzgldu
na rok, do ktrego nale. Inaczej mwic, Level wskazuje na cay poziom, abstrahujc od przynalenoci jego elementw do rnych wzw poziomu nadrzdnego.
SELECT [Time].[Year - Quarter 2002].Level.Members
ON COLUMNS,
[Measures].[Wartosc] ON ROWS
FROM Zyski

Month -

Date].[Year].[Calendar

Tabela 6.85. Skutek wykonania zapytania wywietlajcego wszystkich czonkw poziomu wskazanego
przez atrybut

Wartosc

Calendar 2001

Calendar 2002

Calendar 2003

Calendar 2004

19041.16

36920.53

31950.6

5072.15

Innym prostym przykadem zastosowania metody Level jest jej zczenie z metod Name,
co powoduje wywietlenie nazwy poziomu tabela 6.86. Moe si wydawa, e jest
to zadanie czysto akademickie, bo nazwa poziomu jest zawarta w wywoaniu, ale moe
by ono przydatne podczas budowania kocwek klienckich w jzykach wyszego rzdu.
WITH
MEMBER Measures.Nazwa AS
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Biurowe].Level.Name
SELECT Measures.Nazwa ON COLUMNS
FROM Zyski

Tabela 6.86. Skutek wykonania zapytania wywietlajcego nazw wskazanego poziomu


Nazwa
Nazwa Kategorii

Podobna do poprzedniej jest jednoparametrowa metoda Levels, wywietlajca czonkw hierarchii na poziomie, ktry jest dany indeksem. Numerowanie rozpoczyna si
od wartoci 0, ktra wskazuje korze ALL, a koczy si na wartoci odpowiadajcej
najwikszemu zagniedeniu licie.
SELECT [Time].[Year - Quarter [Measures].[Wartosc] ON ROWS
FROM Zyski

Month -

Date].Levels(1) ON COLUMNS,

278

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Innym sposobem (metoda przeciona) wskazania poziomu jest podanie w postaci acucha znakw jego nazwy. Oba przedstawione zapytania wskazuj na ten sam stopie
zagniedenia, odpowiadajcy latom, w ktrych prowadzono sprzeda, dlatego w obu
przypadkach wynikowy zestaw rekordw jest zawarty w tabeli 6.87.
SELECT [Time].[Year - Quarter - Month [Measures].[Wartosc] ON ROWS
FROM Zyski

Date].Levels('Year') ON COLUMNS,

Tabela 6.87. Skutek wykonania zapytania wywietlajcego warto sprzeday na poziomie lat
w hierarchii reprezentujcej czas

Wartosc

Calendar 2001

Calendar 2002

Calendar 2003

Calendar 2004

19041.16

36920.53

31950.6

5072.15

Podsumowanie wiadomoci
o zapytaniach wybierajcych MDX
Ten do syntetyczny przegld metod jzyka MDX i sposobu ich stosowania w zapytaniach nie wyczerpuje wszystkich moliwoci, ktrych jest zdecydowanie wicej.
W tabeli 6.88 przedstawione zostay wszystkie dostpne w tym jzyku metody dla
wszystkich typw atrybutw. W dokumentacji MS SQL nie jest stosowany podzia na
metody i funkcje, poniewa idea ich dziaania jest wsplna. Rni si tym, e metoda dziaa na rzecz wskazanego atrybutu (wywoanie po kropce separujcej), natomiast
funkcja dziaa dla parametrw okrelonych na licie (tabela 6.89). Ta rnica wydaje si
do formalna, ale ze wzgldu na rozbienoci w sposobie wywoania oraz problemy
z opracowaniem jednolitego, skrtowego sposobu prezentowania obu typw zdecydowaem si na wprowadzenie tego podziau. Napisy o postaci: Czonek, Poziom,
Hierarchia, Krotka, Zbir, Wymiar s skrtami wyrae MDX opisujcych obiekt tego
typu. Pozostae nazwy s rzeczywistymi nazwami metod. W przypadku wielu metod
moliwe jest stosowanie ich dla atrybutw kilku typw, co jest uwzgldnione w tabeli, np.
metoda Hierarchy moe by uyta na rzecz czonka lub poziomu.
Tabela 6.88. Metody jzyka MDX
Metoda

Opis

Czonek.Hierarchy
Poziom.Hierarchy

Zwraca hierarchi, ktra zawiera wskazanego czonka lub wskazany


poziom.

Hierarchia.Dimension
Poziom.Dimension
Czonek.Dimension

Zwraca wymiar, ktry zawiera wskazan hierarchi, wskazany poziom


lub wskazanego czonka.

Dimensions(Liczba)
Dimensions(Nazwa)

Zwraca hierarchi wskazan liczb lub nazw.

Czonek.Level

Zwraca poziom czonka.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

279

Tabela 6.88. Metody jzyka MDX cig dalszy


Metoda

Opis

Hierarchia.Levels (numer)
Hierarchia.Levels (nazwa)

Zwraca poziom, ktrego numer lub nazwa wystpuj w ramach


wymiaru lub hierarchii.

Hierarchia.CurrentMember

Zwraca biecego czonka w ramach atrybutu, wymiaru lub hierarchii


podczas iteracji.

Czonek.DataMember

Zwraca wygenerowanego przez system czonka, ktry jest skojarzony


z czonkiem niestanowicym licia w wymiarze. Uywana gwnie
w poleceniu
UPDATE [ CUBE ] Cube_Name ...

Hierarchia.DefaultMember

Zwraca domylnego czonka wymiaru.

Czonek.FirstChild

Zwraca pierwszego potomka dla wskazanego poziomu.

Czonek.FirstSibling

Zwraca pierwszego potomka dla wskazanego poziomu rodzica.

Krotka.Item( Index )

Zwraca czonka wskazanej krotki.

Czonek.Lag(Index)

Zwraca czonka, ktry jest na pozycji poprzedzajcej wskazanego


czonka o warto dan parametrem wzdu definicji wymiaru.

Czonek.LastChild

Zwraca ostatniego potomka dla wskazanego poziomu.

Czonek.LastSibling

Zwraca ostatniego potomka dla wskazanego poziomu rodzica.

Czonek.Lead(Index)

Zwraca czonka, ktry jest na pozycji nastpujcej po wskazanym


czonku o warto dan parametrem wzdu definicji wymiaru.

Czonek.NextMember

Zwraca nastpnego czonka wzgldem tego, ktry zosta wskazany.

Czonek.Parent

Zwraca rodzica wskazanego czonka.

Czonek.PrevMember

Zwraca poprzedniego czonka wzgldem tego, ktry zosta wskazany.

Czonek.UnknownMember
Hierarchia.UnknownMember

Zwraca reprezentacje pustego, nieznanego czonka, skojarzonego


z poziomem hierarchii lub czonkiem.

Dimensions.Count

Zwraca liczb wymiarw (hierarchii) dla danej kostki, wliczajc


w to hierarchi miar.

Hierarchia.Levels.Count

Zwraca liczb poziomw dla danej hierarchii.

Krotka.Count

Zwraca liczb wymiarw dla danej krotki.

Poziom.Ordinal

Zwraca indeks poziomu wartoci rozpoczynaj si od 0.

Czonek[.Value]

Zwraca warto wskazanej miary. Brak waciwoci Value nie zmienia


dziaania.

Hierarchia.AllMembers
Poziom.AllMembers

Zwraca zbir zawierajcy wszystkich czonkw, rwnie obliczanych


dla danej hierarchii lub poziomu.

Czonek.Children

Zwraca podrzdne wierzchoki grafu (dzieci) dla wskazanego czonka.

Zbir.CurrentOrdinal

Zwraca numer aktualnej iteracji w przetwarzaniu iteracyjnym.

Hierarchia.Members
Poziom.Members

Zwraca zbir czonkw wskazanego wymiaru, hierarchii lub poziomu.

Czonek.Siblings

Zwraca rodzestwo wskazanego czonka cznie z tym czonkiem.

280

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.88. Metody jzyka MDX cig dalszy


Metoda

Opis

Wymiar.Name
Hierarchia.Name
Poziom.Name
Czonek.Name

Zwraca nazw wskazanego wymiaru, hierarchii, poziomu lub czonka.

Czonek.Properties
(Waciwo [, TYPED])

Zwraca warto waciwoci wskazanego czonka. Domylnie


jest konwertowana na posta znakow. W przypadku opcji TYPED
zwracana jest w postaci zgodnej z oryginalnym typem.

Wymiar.UniqueName
Hierarchia.UniqueName
Poziom.UniqueName

Zwraca unikaln nazw wskazanego wymiaru, hierarchii, poziomu


lub czonka.

Czonek.UniqueName
This

Zwraca biec podkostk.

Zbir.Current

Zwraca biec krotk ze zbioru wskazanego podczas iteracji.

Zbir.Item(Indeks)
Zbir.Item(acuch1
[, acuch2,...n])

Zwraca okrelon parametrem krotk ze wskazanego zbioru.

Przez analogi do prezentowanych poprzednio metod jzyka MDX przedstawione zostay w tabeli 6.89 funkcje. Tym razem obiekty hurtowni s elementami listy ich parametrw. Poza stosowanymi poprzednio skrtami Czonek, Poziom, Hierarchia, Krotka,
Zbir, Wymiar, ktre wskazuj wyraenie definiujce obiekt waciwego typu, zastosowanych zostao kilka dodatkowych. Starano si, aby ich opis by czytelny bez dodatkowego wyjanienia, np. Wyraenie jest skrtem wyraenia algebraicznego, Indeks
jest kolejnym numerem obiektu danego typu, etc. Liczby wystpujce na kocu nazw
okrelaj kolejny obiekt danego typu na licie parametrw. Jeli ostatni z nich ma na
kocu nazwy liter n, oznacza to, e nie okrelono grnego ograniczenia liczby parametrw tego typu.
Tabela 6.89. Funkcje jzyka MDX
Funkcja

Opis

SetToArray (Zbir1 [,
Zbir2,...n ] [, Liczba ])

Konwertuje zbir lub wiele zbiorw na tabel, ktr mona


zastosowa w funkcji zdefiniowanej przez uytkownika.
Liczba wskazuje sposb adresowania komrek, domylnie
CROSSJOIN.

IsAncestor(Czonek1, Czonek2)

Zwraca True, kiedy wskazany czonek jest przodkiem (antenatem)


innego wskazanego czonka.

IsEmpty(Warto)

Zwraca True, kiedy wyraenie zwraca pust komrk.

IsGeneration(Czonek, Generacja)

Zwraca True, kiedy wskazany czonek jest elementem wskazanej


generacji.

IsLeaf(Czonek)

Zwraca True, kiedy wskazany czonek jest liciem (wze


kocowy drzewa).

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

281

Tabela 6.89. Funkcje jzyka MDX cig dalszy


Funkcja

Opis

IsSibling(Czonek1, Czonek2)

Zwraca True, kiedy wskazany czonek jest rodzestwem drugiego


z czonkw.

Ancestor(Czonek, Poziom)
Ancestor(Czonek, Odlego)

Zwraca przodka na wskazanym poziomie lub we wskazanej


odlegoci.

ClosingPeriod([Poziom [,
Czonek]])

Zwraca ostatni element spord rodzestwa dla potomkw


na wskazanym poziomie.

Cousin(Czonek, Potomek)

Zwraca dziecko na tej samej wzgldnej pozycji wzgldem rodzica


jak wskazany atrybut potomny.

LinkMember(Czonek,
Hierarchia)

Zwraca czonka rwnowanego do wskazanego czonka w hierarchii.

Members(Nazwa)

Zwraca czonka wskazanego acuchem.

OpeningPeriod([Poziom [,
Czonek]])

Zwraca pierwszy element spord rodzestwa dla potomkw


na wskazanym poziomie.

ParallelPeriod([Poziom [,
Indeks [, Czonek]]])

Zwraca element spord rodzestwa o tym samym wzgldnym


pooeniu wzgldem rodzica w porwnaniu ze wskazanym
parametrem.

StrToMember(Nazwa
[,CONSTRAINED] )

Zwraca czonka opisanego wyraeniem MDX danym w postaci


acucha.

ValidMeasure(Krotka)

Zwraca poprawn miar w wirtualnej kostce przez wymuszenie


nieadekwatnoci wymiaru w stosunku do jego korzenia.

Aggregate(Zbir [, Liczba ])

Zwraca warto skalarn wyznaczon przez agregacj


ktrejkolwiek miary lub wyraenia nad okrelonym zestawem
atrybutw.

Avg(Zbir [, Liczba])

Zwraca warto redni wyznaczon dla miary lub wyraenia


nad okrelonym zestawem atrybutw.

CalculationCurrentPass()

Zwraca warto biecego indeksu przejcia wskazujcego aktualnie


wyznaczane elementy zapytania, w zalenoci od kontekstu (maa
uyteczno praktyczna).

CalculationPassValue (Liczba,
Indeks [, ABSOLUTE |
RELATIVE [, ALL]])
CalculationPassValue (acuch,
Indeks [, ABSOLUTE |
RELATIVE [, ALL]])
CoalesceEmpty(Wyraenie1 [,
Wyraenie2,...n] )

Zwraca warto wyznaczon we wskazanej indeksem iteracji:


ABSOLUTE okrela bezwzgldny numer iteracji,
rozpoczynajc od zera;
RELATIVE wzgldny, rozpoczynajc od akcji
uruchamiajcej obliczenie wyraenia;
ALL wskazuje, e pozostae parametry s puste, z wyjtkiem
wyliczanego wyraenia.

W przypadku gdy pierwszy parametr jest pusty, zwraca warto


drugiego; jeli jest niepusty zwraca ten parametr.

CoalesceEmpty(acuch1 [,
acuch2,...n] )
Correlation(Zbir, Liczba_y [,
Liczba_x ] )

Zwraca wspczynnik korelacji dwch list danych parametrami


wywoania nad zdefiniowanym zbiorem.

282

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.89. Funkcje jzyka MDX cig dalszy


Funkcja

Opis

Count(Zbir [,
(EXCLUDEEMPTY |
INCLUDEEMPTY)])

Zwraca liczb elementw dla danego zbioru.

Lub
Zbir.Count
Covariance(Zbir, Liczba_y [,
Liczba_x])

Zwraca wspczynnik kowariancji populacji dwch list danych


parametrami wywoania nad zdefiniowanym zbiorem.

CovarianceN(Zbir, Liczba_y [,
Liczba_x])

Zwraca wspczynnik kowariancji prbki dwch list danych


parametrami wywoania nad zdefiniowanym zbiorem.

DistinctCount(Zbir)

Zwraca liczb niepustych krotek dla danego zbioru.

IIf(Warunek, Wyraenie1 [HINT


<Flagi>], Wyraenie2 [HINT
<Flagi>]) [HINT <flagi>]

Dla warunku prawdziwego zwraca Wyraenie1; dla faszywego


Wyraenie2, o ile zostao zdefiniowane.

<Flagi> ::= <Flaga>


[<Flaga>]
<Flaga> ::= EAGER | STRICT
| LAZY

Flagi maj wpyw na wydajno przetwarzania:


EAGER powoduje, e wyraenie przetwarzane jest
dla caego podpoziomu funkcji IIF.
STRICT powoduje, e wyraenie jest wyznaczone
w wynikowej subprzestrzeni zgodnie z warunkiem.
LAZY powoduje, e wyraenie jest przetwarzane dla kadej
z komrek.
EAGER i STRICT wzajemnie si wykluczaj, mog by uyte
w tej samej funkcji IIF, ale dla rnych wyrae.

LinRegIntercept (Zbir,
Wyraenie_y [, Wyraenie_x])

Oblicza przesunicie liniowej funkcji regresji, y = ax + b,


dla zakresu wskazanego przez zbir.

LinRegPoint (Pooenie_x,
Zbir, Wyraenie_y [,
Wyraenie_x])

Oblicza warto liniowej funkcji regresji, y = ax + b, we


wskazanym punkcie.

LinRegR2(Zbir, Wyraenie_y [,
Wyraenie_x])

Oblicza wspczynnik determinacji R2 liniowej funkcji regresji,


y = ax + b, dla zakresu wskazanego przez zbir.
Warto R2 zawiera si w przedziale <0,1> i informuje, jaka cz
zaobserwowanej w prbie cakowitej zmiennoci y zostaa wyjaniona
regresj liniow wzgldem x i jest proporcjonalna do wariancji.

LinRegSlope (Zbir,
Wyraenie_y [, Wyraenie_x])

Oblicza wspczynnik kierunkowy liniowej funkcji regresji,


y = ax + b, dla zakresu wskazanego przez zbir.

LinRegVariance (Zbir,
Wyraenie_y [, Wyraenie_x])

Oblicza wariancje pomidzy rzeczywistymi wartociami oraz


wyznaczonymi na podstawie liniowej funkcji regresji, y = ax + b,
dla zakresu wskazanego przez zbir.

LookupCube(Kostka,
Wyraenie)

Zwraca warto wyraenia MDX dla wskazanej kostki w tej samej


hurtowni.

LookupCube(Kostka, acuch)
Max(Zbir [, Wyraenie])

Zwraca warto maksymaln wyznaczon dla miary lub wyraenia


nad okrelonym zestawem atrybutw.

Median(Zbir [, Wyraenie])

Zwraca warto mediany wyznaczonej dla miary lub wyraenia


nad okrelonym zestawem atrybutw.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

283

Tabela 6.89. Funkcje jzyka MDX cig dalszy


Funkcja

Opis

Min(Zbir [, Wyraenie])

Zwraca warto minimaln wyznaczon dla miary lub wyraenia


nad okrelonym zestawem atrybutw.

Poziom.Ordinal

Zwraca indeks poziomu wartoci rozpoczynaj si od 0.

Predict(ModelZgbiania,
Wyraenie)

Zwraca warto przewidywan we wskazanym modelu


(nieomawiane w ksice, poniewa dotyczy rozszerzenia DMX).

Rank(Krotka, Zbir [,
Wyraenie])

Zwraca warto rangi krotki w zbiorze. Jeli wyraenie zostao


uyte, warto rangi jest skutkiem dziaania tego wyraenia.

RollupChildren (Czonek,
Operator)

Zwraca warto uzyskiwan na podstawie zawijania zestawu


na poziomie wskazanego dziecka z zastosowaniem wybranego
operatora jednoargumentowego.
+ suma = suma + dziecko
- suma = suma - dziecko
* suma = suma * dziecko
/ suma = suma / dziecko
% suma = (suma / dziecko) * 100
~ dziecko nie jest uywane do operacji, a warto jego atrybutu
jest pomijana.

StDev(Zbir [, Wyraenie])

Alias dla funkcji StdDev().

StDevP(Zbir [, Wyraenie])

Alias dla funkcji StdDevP().

Stdev(Zbir [, Wyraenie])

Oblicza odchylenie standardowe prbki dla wyraenia w zakresie


zdefiniowanym przez zbir.

StdevP(Zbir [, Wyraenie])

Oblicza odchylenie standardowe populacji dla wyraenia


w zakresie zdefiniowanym przez zbir.

StrToValue('MDX'
[,CONSTRAINED])

Wyznacza wyraenie MDX zawarte w zmiennej acuchowej.


Jeli uyto CONSTRAINED, zapytanie musi zwraca skalar,
ale jest odporniejsze na ataki typu wstrzyknicie kodu (injection).
Jeli nie MDX, moe zwraca bardziej zoony wynik.

Sum(Zbir [, Wyraenie])

Zwraca sum wyznaczon dla miary lub wyraenia nad


okrelonym zestawem atrybutw.

Czonek[.Value]

Zwraca warto wskazanej miary. Brak waciwoci Value


nie zmienia dziaania.

Var (Zbir [, Wyraenie])

Oblicza wariancje prbki dla wyraenia w zakresie


zdefiniowanym przez zbir.

Variance (Zbir [, Wyraenie])

Alias dla funkcji Var().

VarianceP (Zbir [, Wyraenie])

Alias dla funkcji VarP().

VarP (Zbir [, Wyraenie])

Oblicza wariancje populacji dla wyraenia w zakresie


zdefiniowanym przez zbir.

AddCalculatedMembers(Zbir)

Generuje wszystkie miary obliczane doczone do danej grupy (zbioru).

Ancestors(Czonek, Poziom)

Zwraca nadrzdny wierzchoek grafu (antenat) dla wybranego


czonka na wskazanym poziomie lub odlegoci.

Ancestors(Czonek, Odlego)

284

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.89. Funkcje jzyka MDX cig dalszy


Funkcja

Opis

Ascendants(Czonek)

Zwraca nadrzdny wierzchoek grafu (przodek) dla wybranego


czonka wraz z tym czonkiem.

Axis(Liczba)

Definiuje wywietlan o.

BottomCount (Zbir, Ilo [,


Wyraenie])

Sortuje zbir w porzdku malejcym i wywietla okrelon liczb


krotek, poczwszy od wskazanego miejsca (o ile zdefiniowano).

BottomPercent (Zbir, Ilo,


Wyraenie)

Sortuje zbir w porzdku malejcym i wywietla tak liczb krotek,


dla ktrej skumulowana suma jest mniejsza ni wskazany procent.

BottomSum (Zbir, Ilo,


Wyraenie)

Sortuje zbir w porzdku malejcym i wywietla tak liczb


krotek, dla ktrej skumulowana suma jest mniejsza ni wskazana
warto.

Crossjoin(Zbir1, Zbir2 [,...n] )

Zwraca produkt kartezjaski wskazanych zbiorw.

Lub
Zbir1 * Zbir2 [* ...n]
Descendants(Czonek [, Poziom
[, Flaga]])
Descendants(Czonek [,
Odlego [, Flaga]])
Descendants(Zbir [, Poziom [,
Flaga]])
Descendants(Zbir [, Odlego
[, Flaga]])

Zwraca podrzdne wierzchoki grafu (potomkw) na okrelonym


poziomie lub we wskazanej odlegoci, opcjonalnie wczajc
lub nie poziomy porednie.
Flaga moe przyj jedn z wymienionych wartoci:
SELF zwraca tylko potomkw.
AFTER zwraca potomkw, poczwszy od wszystkich lici,
a koczc na wskazanym poziomie lub wskazanej odlegoci.
BEFORE zwraca potomkw z przedziau od wskazanego
poziomu lub odlegoci, koczc na wskazanym czonku.
Zestaw wynikowy zawiera czonka, ale nie zawiera czonkw
wskazanych przez odlego lub poziom (przedzia
jednostronnie otwarty).
BEFORE_AND_AFTER zwraca potomkw, poczwszy
od wszystkich lici, koczc na wskazanym poziomie lub
wskazanej odlegoci. Zestaw wynikowy zawiera czonka, ale
nie zawiera czonkw wskazanych przez odlego lub poziom
(przedzia jednostronnie otwarty).
SELF_AND_AFTER zwraca potomkw ze wskazanego
poziomu lub wskazanej odlegoci wszystkie licie tego
poziomu.
SELF_AND_BEFORE zwraca potomkw z przedziau
od wskazanego poziomu lub wskazanej odlegoci, koczc
na wskazanym czonku. Zestaw wynikowy zawiera czonka,
a take czonkw wskazanych przez odlego lub poziom
(przedzia obustronnie zamknity).
SELF_BEFORE_AFTER zwraca potomkw, poczwszy
od wszystkich lici, koczc na wskazanym poziomie lub
wskazanej odlegoci. Zestaw wynikowy zawiera czonka,
ale nie zawiera czonkw wskazanych przez odlego
lub poziom (przedzia jednostronnie otwarty).
LEAVES zwraca licie potomkw na wskazanym poziomie
lub wskazanej odlegoci.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

285

Tabela 6.89. Funkcje jzyka MDX cig dalszy


Funkcja

Opis

Distinct(Zbir)

Zwraca zbir, z ktrego zostay usunite powtrzenia krotek.

DrilldownLevel(Zbir [,
Poziom])

Zgbia wskazany zbir o jeden poziom niej lub (opcjonalnie)


od wskazanego poziomu o jeden niej.

DrilldownLevel(Zbir [,
,Wskanik}])
DrilldownLevelBottom(Zbir,
Ilo [, [Poziom][, Wyraenie])

Zgbia, rozpoczynajc od najmniejszych wartoci, od poziomu


wskazanego do poziomu o jeden niszego.

DrilldownLevelTop(Zbir, Ilo
[, [ Poziom][, Wyraenie])

Zgbia, rozpoczynajc od najwikszych wartoci, od poziomu


wskazanego do poziomu o jeden niszego.

DrilldownMember(Zbir1,
Zbir2 [, RECURSIVE])

Zgbia tych czonkw wskazanego zbioru, ktrzy istniej


w drugim zbiorze; dla opcji RECURSIVE porwnaniu podlegaj
take poziomy potomne.

DrilldownMemberBottom(Zbir
1, Zbir2, Ilo [, [Wyraenie ][,
RECURSIVE]])

Zgbia czonkw wskazanego zbioru, ktrzy istniej w drugim


zbiorze, poczynajc od najmniejszych wartoci i ograniczajc
liczb do okrelonego limitu; dla opcji RECURSIVE porwnaniu
podlegaj take poziomy potomne.

DrilldownMemberTop(Zbir1,
Zbir2, Ilo [, [Wyraenie][,
RECURSIVE]])

Zgbia czonkw wskazanego zbioru, ktrzy istniej w drugim


zbiorze, poczynajc od najwikszych wartoci i ograniczajc
liczb do okrelonego limitu; dla opcji RECURSIVE porwnaniu
podlegaj take poziomy potomne.

DrillupLevel(Zbir [, Poziom])

Zgbia tych czonkw, ktrzy znajduj si powyej wskazanego


poziomu.

DrillupMember(Zbir1, Zbir2)

Zgbia tych czonkw wskazanego zbioru, ktrzy nie s


przodkami, a zostali wskazani w drugim zbiorze.

Except(Zbir1, Zbir2 [, ALL])

Zwraca rnic dwch zbiorw opcjonalnie (ALL), pozostawiajc


duplikaty wystpujce w zestawie wynikowym.

Exists(Zbir1, Zbir2 [, Miary])

Zwraca zbir atrybutw, ktre wystpuj we wskazanych


krotkach.

Extract(Zbir, Hierarchia1 [,
Hierarchia2, ...n] )

Zwraca krotki wybrane z atrybutw wymiaru.

Filter(Zbir, Warunek)

Zwraca odfiltrowany zestaw elementw zbioru, dla ktrego


warunek jest prawdziwy.

Generate( Zbir1, (Zbir2 [, ALL])) Dla kadego atrybutu pierwszego zbioru generuje skojarzony
zestaw atrybutw dany drugim parametrem. W przypadku
Generate(acuch1, (
parametrw w postaci acucha wykonuje wyraenie dane
Wyraenie [, Ograniczenie]))
drugim parametrem. Dla ALL duplikaty zostaj zachowane.
Head(Zbir [, Ilo])

Zwraca okrelon drugim parametrem liczb pierwszych


elementw zbioru.

Hierarchize(Zbir [, POST])

Porzdkuje elementy zbioru w hierarchii. Dla opcji POST


uporzdkowanie nastpuje w kierunku narastajcych wartoci;
jeli jej nie podano, zachowany zostaje porzdek wymuszony
przez przyporzdkowanie do rodzica; dla tego samego wza
nadrzdnego zachowany jest porzdek naturalny.

286

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.89. Funkcje jzyka MDX cig dalszy


Funkcja

Opis

Intersect(Zbir1, Zbir2 [,
ALL])

Zwraca cz wspln dwch zbiorw, opcjonalnie pozostawiajc


duplikaty.

LastPeriods(Ilo [, Czonek])

Zwraca zdefiniowan liczb ilo atrybutw, poczwszy od


wskazanego parametrem, idc w kierunku kolejnych. W innej
notacji przedzia moe by okrelony przez znak : oddzielajcy
pocztkowy i kocowy element.

Mtd([Czonek])

Zwraca rodzestwo czonka na poziomie miesicy w wymiarze


czasu, poczwszy od pierwszego, koczc na wskazanym. Jest
skrtem nazwy Month to date i stanowi posta szczegow oglnej
funkcji PeriodsToDate.

NameToSet(Nazwa)

Zwraca zbir, ktrego czonek jest opisany w postaci znakowej.

NonEmptyCrossjoin(Zbir1 [,
Zbir2, ...] [, Ilo])

Zwraca produkt kartezjaski wskazanych zbiorw, eliminujc


puste krotki.

Order(Zbir, Wyraenie

Porzdkuje wskazany zbir, zachowujc (ASC | DESC) lub nie


(BASC | BDESC) porzdek wynikajcy z wzw nadrzdnych.

[, { ASC | DESC | BASC |


BDESC}])
Order(Zbir, acuch
[, { ASC | DESC | BASC |
BDESC}])
PeriodsToDate([Poziom [,
Czonek]])

Zwraca rodzestwo czonka na wskazanym poziomie w wymiarze


czasu, poczwszy od pierwszego, koczc na wskazanym.

Qtd([Czonek])

Zwraca rodzestwo czonka na poziomie kwartau w wymiarze


czasu, poczwszy od pierwszego, koczc na wskazanym. Jest
skrtem nazwy Quarter to date i stanowi posta szczegow
oglnej funkcji PeriodsToDate.

StripCalculatedMembers(Zbir)

Zwraca wygenerowany zbir z pominiciem wskazanego czonka.

StrToSet(acuch [,
CONSTRAINED])

Zwraca zbir zdefiniowany cigiem znakw zawierajcym


poprawne wyraenie MDX; zastosowanie CONSTRAINED
wymusza ujmowanie definicji zbioru w nawias klamrowy { }.

Subset(Zbir, Pocztek [, Ilo])

Zwraca podzbir krotek we wskazanym zbiorze, poczwszy od


wskazanej drugim parametrem do koca, lub wskazan ich liczb.

Tail(Zbir [, Ilo])

Zwraca podzbir krotek we wskazanym zbiorze, poczwszy


od koca, lub okrelon ich liczb.

ToggleDrillState(Zbir1, Zbir2
[, RECURSIVE])

Przecza tryb zgbiania dla kadego czonka drugiego zbioru,


ktry wystpuje w pierwszym zbiorze; dla opcji RECURSIVE
przeczeniu podlegaj rwnie poziomy potomne.

TopCount(Zbir, Ilo [,
Wyraenie])

Zwraca okrelon liczb najwikszych elementw zbioru,


poczwszy od wskazanego miejsca (o ile zdefiniowano).

TopPercent(Zbir, Procent,
Wyraenie)

Zwraca zestaw najwikszych elementw zbioru, ktrych skumulowana


suma jest rwna okrelonemu procentowi caoci lub wiksza.

TopSum(Zbir, Warto,
Wyraenie)

Zwraca zestaw najwikszych elementw zbioru, ktrych


skumulowana suma jest rwna okrelonej wartoci lub wiksza.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

287

Tabela 6.89. Funkcje jzyka MDX cig dalszy


Funkcja

Opis

Union(Zbir1, Zbir2 [,...n][,


ALL])

Zwraca sum co najmniej dwch zbiorw, opcjonalnie


pozostawiajc duplikaty; moe by zastpiony operatorem + lub
zastosowaniem nawiasu klamrowego { } do ujcia listy zbiorw.

lub
Zbir1 + Zbir2 [+...n]
lub
{ Zbir1, Zbir2 [,...n]}
Unorder(Zbir)

Usuwa wszystkie wymuszone sposoby sortowania dla zbioru.

VisualTotals(Zbir [, Wzorzec])

Zwraca zbir wygenerowany przez dynamiczne podsumowania


wartoci dla dzieci, opcjonalnie pozwala zdefiniowa wzorzec
nazwy dziecka.

Wtd([Czonek])

Zwraca rodzestwo czonka na poziomie tygodnia w wymiarze


czasu, poczwszy od pierwszego, koczc na wskazanym. Jest
skrtem nazwy Week to date i stanowi posta szczegow oglnej
funkcji PeriodsToDate.

Ytd([Czonek])

Zwraca rodzestwo czonka na poziomie roku w wymiarze czasu,


poczwszy od pierwszego, koczc na wskazanym. Jest skrtem
nazwy Year to date i stanowi posta szczegow oglnej funkcji
PeriodsToDate.

MemberToStr(Czonek)

Zwraca w postaci acucha wyraenie MDX.

SetToStr(Zbir)

Zwraca acuch odpowiadajcy wskazanemu zbiorowi.

TupleToStr(Zbir)

Zwraca acuch odpowiadajcy wskazanej krotce.

UserName [( )]

Zwraca nazw serwera oraz uytkownika wynikajce z biecego


poczenia.

Leaves([Wymiar])

Zwraca zbir czonkw, ktrzy stanowi licie danego wymiaru.

Root ()

Zwraca krotk skadajc si z elementu najwyszego w hierarchii


(ALL) dla kostki, wymiaru lub krotki.

Root(Wymiar)
Root(Krotka)
StrToTuple (Krotka [,
CONSTRAINED])

Zwraca krotk zapisan jako zmienna znakowa.

Error([Komunikat])

Ustawia bd wykonania; opcjonalnie pozwala na wyszczeglnienie


komunikatu.

Tworzenie i testowanie nietrwaych


struktur wielowymiarowych
Jak mona byo si przekona, zarwno na podstawie prezentowanych przykadw,
jak i przedstawionych poprzednio wykazw funkcji i metod, liczba potencjalnych
sposobw analizy struktur wielowymiarowych jest bardzo dua, a jej ograniczenie
stanowi w zasadzie tylko wyobrania i umiejtnoci programisty. Jednak to tylko
fragment tego, co oferuje rozszerzenie MDX. Drug, by moe nawet istotniejsz grup s

288

Hurtownie danych. Od przetwarzania analitycznego do raportowania

zapytania tworzce obiekty hurtowni. Poza jednym wyjtkiem, ktry przedstawi pniej, nie s to obiekty trwae, zapisywane w strukturze po stronie aplikacji Analysis
Services, lecz obiekty tymczasowe, ktrych czas ycia jest ograniczony do czasu ycia sesji, w ktrej zostay utworzone. Moliwe jest ich jawne usunicie przed zamkniciem sesji za pomoc polecenia DROP. Mamy tu do czynienia ze swoist klas
zapyta DDL (Data Definition Language), ale dotyczc tylko aktywnego poczenia.
Pierwszym przykadem takiego obiektu jest podkostka, definiowana jako podzbir
istniejcej po stronie hurtowni i przetworzonej struktury wielowymiarowej. Do jej
utworzenia stosujemy polecenie CREATE SUBCUBE, po ktrym nastpuje wskazanie
na kostk, z ktrej bdziemy wycina fragment. Po sowie kluczowym AS nastpuje
definicja zawartoci, ktra stanowi dowolne, poprawne skadniowo zapytanie wybierajce MDX. W przeciwiestwie do prezentowanych dotd moe ono zawiera definicj wicej ni dwch osi. W przedstawianym przykadzie podkostka kostki Zyski
bdzie miaa trzy wymiary. W przypadku wikszej liczby wymiarw atwiej jest stosowa numery ni odpowiadajce im nazwy symboliczne. Pamita przy tym naley,
e numeracja musi zaczyna si od 0 i nie moe mie przerw. Pierwszy wymiar zdefiniowanego obiektu stanowi trzy wybrane kategorie towarw, drugi dwa wojewdztwa,
z ktrych pochodz klienci, a trzeci ogranicza o czasu do lat 2002 i 2003. Miar natomiast bdzie warto sprzeday, co okrela klauzula WHERE. Jelibymy chcieli
uy szerszego zestawu miar, musiayby one stanowi definicj kolejnej osi.
CREATE SUBCUBE [Zyski] AS
SELECT {[Towar_calosc].[Nazwa Kategorii].[Akcesoria],
[Towar_calosc].[Nazwa Kategorii].[Muzyka],
[Towar_calosc].[Nazwa Kategorii].[Zegary]} ON 0,
{[Klienci].[Wojewdztwo].[dzkie],
[Klienci].[Wojewdztwo].[podkarpackie]} ON 1 ,
{[Time].[Year].[Calendar 2002],[Time].[Year].[Calendar 2003]} ON 2
FROM [Zyski]

Moemy tak utworzon struktur odpytywa za pomoc zapyta wybierajcych. Jednak teraz wraca stara zasada, e moliwe jest zdefiniowanie w zapytaniu wybierajcym tylko dwch wymiarw. Pierwszy przykad wywietla miar dla czonkw osi
kategorii towarw oraz wojewdztw.
SELECT [Towar_calosc].[Nazwa Kategorii].Members ON 0,
[Klienci].[Wojewdztwo].Members ON 1
FROM [Zyski]
WHERE [Measures].[Zysk]

Moliwe jest wykorzystanie w zapytaniu dowolnej kombinacji wymiarw zdefiniowanych w podkostce. Std nastpny przykad wywietlajcy warto sprzeday poszczeglnych kategorii w kolejnych latach. Analizujc wyniki przetworzenia tego zapytania, zawarte w tabeli 6.90, moemy stwierdzi, e pomimo i zapytanie dotyczy
obiektu o nazwie takiej samej jak kostka wyjciowa, zawieraj one teraz tylko te atrybuty wymiaru, ktre wskazano w definicji podobiektu trzy kategorie towaru i dwa
lata. Z oryginalnej definicji kostki pozostao formatowanie miary, poniewa nie
zmieniono go jawnie podczas definiowania struktury.
SELECT [Towar_calosc].[Nazwa Kategorii].Members ON 0,
[Time].[Year].Members ON 1
FROM [Zyski]
WHERE [Measures].[Zysk]

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

289

Tabela 6.90. Skutek wykonania zapytania wybierajcego z podkostki warto sprzeday kategorii
towarw w latach
All

Akcesoria

Muzyka

Zegary

All

$2,272.37

$653.15

$957.55

$661.67

Calendar 2002

$1,031.25

$233.27

$488.95

$309.03

Calendar 2003

$1,241.12

$419.88

$468.60

$352.64

Gdyby prezentowane poprzednio zapytania zostay wykonane w innej sesji ni ta, w ktrej utworzono podkostk, zwrcone zostayby wszystkie obiekty zdefiniowane po stronie
Analysis Services. W przypadku ostatniego zapytania oznacza to wszystkie kategorie
i wszystkie lata, w ktrych prowadzono dziaalno.
Jeeli chcemy w tej samej sesji ponownie zdefiniowa subkostk dla obiektu o nazwie
Zyski, naley pamita, e zawiera on ju tylko te elementy, ktre zostay okrelone w definicji poprzedniej podkostki o tej samej nazwie. Mechanizm ten moe by praktycznie wykorzystywany podczas rekurencyjnego ograniczania, filtrowania interesujcego
nas zbioru wyjciowego. Taki obiekt moe by usunity poleceniem DROP.
DROP SUBCUBE Zyski

Polecenie to usuwa jedn definicj podkostki. Poniewa kada podkostka jest podkostk
ju istniejcej, aby usun wszystkie definicje i doj do struktury wyjciowej, polecenie
DROP musi by wykonywane n-krotnie. Nie mona usuwa nieistniejcej podkostki.
Polecenie DROP nie usuwa utrwalonego po stronie hurtowni obiektu rdowego.
W kolejnych przykadach bdzie stosowany zabieg formalny pozwalajcy na sprawniejsze ich przedstawianie. Prezentowane bd skrypty rozpoczynajce si od polecenia DROP usuwajcego obiekt, nastpny fragment bdzie dotyczy tworzenia omawianego obiektu, a na koniec zostanie pokazane (gdzie to bdzie moliwe) zapytanie
sprawdzajce skutek dziaania skryptu. Nie jest to jednak skrypt sensu stricte. Naley
pamita, e w oknie zapyta MDX moe zosta jednoczenie wykonane tylko jedno
polecenie. Dlatego w praktyce naley albo je wpisywa oddzielnie, a nastpnie wykonywa, albo napisawszy cay kod, zaznacza pojedyncze fragmenty i rwnie sukcesywnie je uruchamia.
Kolejny fragment kodu jest pierwsz ilustracj takiego podejcia, dlatego zawiera nieznacznie tylko zmienion definicje poprzednio pokazywanej podkostki. Modyfikacja polega na dodaniu do definicji pierwszego wymiaru opcji NON VISUAL, ktra powoduje, e podsumowania w wle ALL dotycz wszystkich, rwnie niewymienionych
w definicji wzw wzw niewidocznych. Jest to pokazane w tabeli 6.91, gdzie suma sprzeday jawnie wymienionych kategorii towarw jest zdecydowanie mniejsza
ni warto w wierszu ALL. To samo moemy powiedzie o sumie sprzeday z dwch lat
oraz kolumnie ALL. Warto porwna wyniki zawarte w tabelach 6.90 i 6.91.
DROP SUBCUBE Zyski
CREATE SUBCUBE [Zyski] AS
NON VISUAL(SELECT {[Towar_calosc].[Nazwa Kategorii].[Akcesoria],
[Towar_calosc].[Nazwa Kategorii].[Muzyka],
[Towar_calosc].[Nazwa Kategorii].[Zegary]} ON 0,

290

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.91. Skutek wykonania zapytania wybierajcego z podkostki warto sprzeday kategorii
towarw w latach z zastosowaniem funkcji NON VISUAL
All

Akcesoria

Muzyka

Zegary

All

$21,749.47

$1,709.21

$2,128.16

$1,576.07

Calendar 2002

$8,573.77

$511.14

$764.22

$320.13

Calendar 2003

$7,858.48

$603.42

$839.60

$675.68

{[Klienci].[Wojewdztwo].[dzkie],
[Klienci].[Wojewdztwo].[podkarpackie] } ON 1 ,
{[Time].[Year].[Calendar 2002],[Time].[Year].[Calendar 2003]} ON 2
FROM [Zyski])
SELECT [Towar_calosc].[Nazwa Kategorii].Members ON 0,
[Time].[Year].Members ON 1
FROM [Zyski]
WHERE [Measures].[Zysk]

Podobnie jak podkostk moemy utworzy kostk sesyjn SESSION CUBE. Rnica
midzy tymi obiektami polega na tym, e o ile podkostka nadpisuje w ramach sesji
definicj obiektu rdowego, o tyle kostka sesyjna stanowi odrbny obiekt. Innymi sowy, po utworzeniu kostki sesyjnej moemy odwoywa si zarwno do niej, jak i obiektu
rdowego, ktry nie ulega modyfikacji. W prezentowanym przykadzie utworzono
nieco bardziej rozbudowan struktur wielowymiarow Zyski_ses, opart na kostce
Zyski. Do definicji zostay wybrane dwie miary: [Wartosc] oraz [Wartosc Zakupu].
Na podstawie wymiarw istniejcych w obiekcie rdowym utworzono trzy wymiary:
[Time], [Klienci] i [Towar_calosc]. Dla wymiaru czas przepisano cztery atrybuty okrelajce poziomy lat, kwartaw, miesicy i dat. Nie zostaa dla niego przepisana hierarchia. Dla wymiaru reprezentujcego klientw wybrano dwa atrybuty: wojewdztwo
i miasto, przy czym pierwszy z nich dodatkowo wyznacza grup. Uycie parametru
HIDDEN wskazuje, e dla wza ALL wyznaczane bd sumy tylko atrybutw niewchodzcych w skad definicji grup, co jest widoczne w tabeli 6.92, przedstawiajcej wyniki
przetworzenia przykadowego zapytania wybierajcego dane z kostki sesyjnej. Definicja poziomu o nazwie Strefa zawiera dwie grupy atrybutw: [wojewodztwa_Grp_1]
i [wojewodztwa_Grp_2]. W skad kadego z nich wchodz wybrane wojewdztwa:
w pierwszej lubelskie i dzkie, a w drugiej podkarpackie, lskie i wielkopolskie. Trzeci
wymiar stanowi atrybuty definiujce towar, kategori i producenta wraz z jego lokalizacj. Do definicji przepisano utworzon po stronie hurtowni hierarchi [Kategoria_
towar]. Przykadowe zapytanie do tej struktury wybiera warto sprzeday dla utworzonych grup oraz podsumowanie dla pozostaych miast wze ALL.
DROP SESSION CUBE [Zyski_ses]
CREATE SESSION CUBE [Zyski_ses]
FROM [Zyski]
(MEASURE [Zyski].[Wartosc],
MEASURE [Zyski].[Wartosc Zakupu],
DIMENSION [Zyski].[Time].[Year],
DIMENSION [Zyski].[Time].[Quarter],
DIMENSION [Zyski].[Time].[Month],
DIMENSION [Zyski].[Time].[Date],

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

291

Tabela 6.92. Skutek wykonania zapytania wybierajcego z kostki sesyjnej warto sprzeday w grupach
wojewdztw oraz w wojewdztwach nienalecych do tych grup wiersz ALL
Wartosc
All

21845.09

wojewodztwa_Grp_1

38618.68

wojewodztwa_Grp_2

32520.67

DIMENSION [Zyski].[Klienci].[Wojewdztwo]
HIDDEN AS Grupa1,
DIMENSION [Zyski].[Klienci].[Miasto],
DIMENSION [Zyski].[Klienci].[Wojewdztwo]
NOT_RELATED_TO_FACTS FROM Grupa1
(LEVEL [Strefa] GROUPING,
LEVEL [Wojewdztwo],
GROUP [Strefa].[wojewodztwa_Grp_1]
(MEMBER [Klienci].[Wojewdztwo].[lubelskie],
MEMBER [Klienci].[Wojewdztwo].[dzkie]),
GROUP [Strefa].[wojewodztwa_Grp_2]
(MEMBER [Klienci].[Wojewdztwo].[podkarpackie],
MEMBER [Klienci].[Wojewdztwo].[lskie],
MEMBER [Klienci].[Wojewdztwo].[wielkopolskie])
),
DIMENSION [Zyski].[Towar_calosc].[Wojewdztwo],
DIMENSION [Zyski].[Towar_calosc].[Miasto],
DIMENSION [Zyski].[Towar_calosc].[Nazwa Producenta],
DIMENSION [Zyski].[Towar_calosc].[Nazwa Kategorii],
DIMENSION [Zyski].[Towar_calosc].[Id Towaru],
DIMENSION [Zyski].[Towar_calosc].[Kategoria_towar]
)
SELECT [Klienci].[Wojewdztwo].Strefa.Members ON 1,
[Measures].[Wartosc]ON 0
FROM [Zyski_ses]

Aby bardziej przybliy skutek definiowania grup w kostce sesyjnej, przedstawiono


kolejny przykad, ktrego rezultaty zawiera tabela 6.93. Wywietla on warto sprzeday dla wszystkich czonkw hierarchii zawierajcej utworzone grupy. Do jej wskazania wykorzystano grup [wojewodztwa_Grp_1]. W kolumnach zostay wywietlone
towary nalece do kategorii Zegary. W obu przypadkach ograniczono si do elementw,
ktre zawieraj przynajmniej jedn niepust warto. Analizujc wyniki, warto zwrci uwag na dwa wiersze o nazwie ALL. Pierwszy podsumowuje wartoci na poziomie
wymiaru, czyli wyznacza sum dla wszystkich atrybutw. Drugi, zwizany z grup,
wyznacza sum dla wojewdztw nienalecych do adnej z grup. Dla tak okrojonego
zestawu rekordw atwo zweryfikowa przedstawione zaoenia.
SELECT
NONEMPTY(
[Klienci].[wojewdztwo].strefa.[wojewodztwa_Grp_1].Hierarchy.Members)
ON 1,
NONEMPTY([Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].Zegary.Children)
ON 0
FROM [Zyski_ses]
WHERE [Measures].[Wartosc]

292

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.93. Skutek wykonania zapytania wybierajcego z kostki sesyjnej warto sprzeday
wybranych towarw dla czonkw hierarchii, w ktrej zdefiniowano grupy
Budzik

Budzik Mech.

...

Wielofunkcyjny

All

201.84

35.5

...

273.84

All

33.64

(null)

...

(null)

kujawsko-pomorskie

(null)

(null)

...

(null)

maopolskie

(null)

(null)

...

(null)

pomorskie

33.64

(null)

...

(null)

wojewodztwa_Grp_1

84.1

35.5

...

273.84

lubelskie

(null)

(null)

...

(null)

dzkie

84.1

35.5

...

273.84

wojewodztwa_Grp_2

84.1

(null)

...

(null)

podkarpackie

(null)

(null)

...

(null)

lskie

(null)

(null)

...

(null)

wielkopolskie

84.1

(null)

...

(null)

Aby przeanalizowa kolejn funkcjonalno, przypomnijmy sobie, jaka bya warto


sprzeday we wszystkich latach prowadzenia dziaalnoci dla poszczeglnych kategorii towarw (tabela 6.94). Uwanemu Czytelnikowi nie umkno zapewne, e odpytywana jest nieprzedstawiona dotd kostka o nazwie Zyski_s. Powstaa ona przez skopiowanie kostki Zyski i usunicie z niej wymiaru o nazwie Czas, opartego na
perspektywie utworzonej po stronie schematu relacyjnego. Zabieg taki by konieczny,
poniewa przedstawione poniej modyfikowanie kostki dla podwjnej reprezentacji tego
samego wymiaru czsto prowadzi do niekoczcej si rekurencji, co powoduje powstanie
bdu i przerwanie przetwarzania; moe rwnie prowadzi do zablokowania sesji.
SELECT NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON 0,
[Time].[Year].Members ON 1
FROM [Zyski_s]
WHERE [Measures].[Zysk]

Tabela 6.94. Skutek wykonania zapytania wybierajcego warto sprzeday we wszystkich latach
prowadzenia sprzeday dla kategorii towarw
All

Akcesoria

...

Telefony

Zegary

All

92984.44

7765.48

...

10928.25

5856.49

Calendar 2001

19041.16

2395.47

...

1828.31

2386.15

Calendar 2002

36920.53

2579.46

...

4330.16

1153.48

Calendar 2003

31950.6

2472.87

...

4769.78

2316.86

Calendar 2004

5072.15

317.68

...

(null)

(null)

Jak wida, warto sprzeday zegarw w roku 2004 wyniosa NULL. Dokonajmy teraz modyfikacji kostki za pomoc polecenia UPDATE CUBE w ten sposb, e komrce tej zostanie przypisana warto 200, co przedstawia kolejny przykad.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

293

UPDATE CUBE [Zyski_s]


SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=200

Ponowne wykonanie zapytania wybierajcego przekonuje nas, e zmiana ta zostaa


przeprowadzona pomylnie, co ilustruje tabela 6.95. Naley pamita, e zmiany te,
tak samo jak w przypadku podkostek, nie s utrwalane po stronie hurtowni i trwaj do
momentu zakoczenia sesji.
Tabela 6.95. Skutek wykonania zapytania wybierajcego warto sprzeday we wszystkich latach
prowadzenia sprzeday dla kategorii towarw po dokonaniu modyfikacji zawartoci kostki
All

Akcesoria

...

Telefony

Zegary

All

93184.44

7765.48

...

10928.25

6056.49

Calendar 2001

19041.16

2395.47

...

1828.31

2386.15

Calendar 2002

36920.53

2579.46

...

4330.16

1153.48

Calendar 2003

31950.6

2472.87

...

4769.78

2316.86

Calendar 2004

5272.15

317.68

...

(null)

200

Modyfikacji danych moemy dokonywa nie tylko wzgldem fizycznie zapisanej


struktury, ale rwnie w stosunku do obiektu tymczasowego, jakim jest podkostka.
Prowadzi to do pewnych ciekawych waciwoci. Dla przypomnienia pokazana zostaa struktura tego obiektu, ktry ze rda przepisuje trzy wymiary. Pierwszy zawiera trzy wybrane kategorie towarw, drugi dwa wojewdztwa, z ktrych pochodz
klienci, a trzeci dwa lata z okresu prowadzenia dziaalnoci. Zapytanie wybierajce
wywietla warto sprzeday dla kategorii w tych latach, co ilustruje tabela 6.96.
CREATE SUBCUBE [Zyski_s] AS
SELECT {[Towar_calosc].[Nazwa Kategorii].[Akcesoria],
[Towar_calosc].[Nazwa Kategorii].[Muzyka],
[Towar_calosc].[Nazwa Kategorii].[Zegary]} ON 0,
{[Klienci].[Wojewdztwo].[dzkie],
[Klienci].[Wojewdztwo].[podkarpackie]} ON 1 ,
{[Time].[Year].[Calendar 2002],[Time].[Year].[Calendar 2003]} ON 2
FROM [Zyski_s]
SELECT NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON 0,
[Time].[Year].Members ON 1
FROM [Zyski_s]
WHERE [Measures].[Wartosc]

Tabela 6.96. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii w latach
dla zdefiniowanej podkostki
All

Akcesoria

Muzyka

Zegary

All

14779.56

5052.33

6256.89

3470.34

Calendar 2002

6643.08

2579.46

2910.14

1153.48

Calendar 2003

8136.48

2472.87

3346.75

2316.86

294

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Dokonajmy teraz modyfikacji danych, ktre nie s zawarte w definicji podkostki, a mianowicie przypiszmy wartoci sprzeday telefonw w roku 2004 warto 200. Jak atwo
zauway, w definicji obiektu, dla ktrego wykonujemy modyfikacj, nie wystpuje
ani wybrana kategoria, ani rok. Pomimo to zapytanie przetwarzane jest z powodzeniem.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Telefony],
[Measures].[Wartosc])=200
SELECT NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON 0,
[Time].[Year].Members ON 1
FROM [Zyski_s]
WHERE [Measures].[Wartosc]

Oczywicie przy ponownym odpytaniu podkostki nie widzimy adnych zmian, a skutek
jest dokadnie taki sam jak pokazano w tabeli 6.96. Dopiero kiedy usuniemy definicj
podkostki poleceniem DROP SUBCUBE i ponowimy zapytanie wybierajce, wprowadzona zmiana wartoci zostanie wywietlona, co pokazuje tabela 6.97. Mona zatem stwierdzi, e modyfikacja zawartoci jest prowadzona na obiekcie rdowym,
a tylko zapytania wybierajce odnosz si do podstruktury. Dziaanie to jest analogiczne do modyfikowania danych w strukturze relacyjnej za porednictwem perspektywy, dla ktrej nie zdefiniowano walidacji klauzuli WHERE.
DROP SUBCUBE [Zyski_s]
SELECT NONEMPTY([Towar_calosc].[Nazwa Kategorii].Members) ON 0,
[Time].[Year].Members ON 1
FROM [Zyski_s]
WHERE [Measures].[Wartosc]

Tabela 6.97. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii w latach
po usuniciu zdefiniowanej podkostki
All

Akcesoria

...

Telefony

Zegary

All

93184.44

7765.48

...

11128.25

5856.49

Calendar 2001

19041.16

2395.47

...

1828.31

2386.15

Calendar 2002

36920.53

2579.46

...

4330.16

1153.48

Calendar 2003

31950.6

2472.87

...

4769.78

2316.86

Calendar 2004

5272.15

317.68

...

200

(null)

Obserwacja skutkw modyfikacji zawartoci kostki tylko na poziomie wza, w ktrym dokonano zmiany, jest jednak mao interesujca. O wiele ciekawsze jest to, co
dzieje si z t wartoci na poziomie wzw potomnych. Dlatego w zapytaniu wybierajcym przedstawiono wartoci sprzeday kategorii Zegary oraz wszystkich jej elementw potomnych, zarwno na poziomie lat prowadzenia dziaalnoci, jak i we
wszystkich kwartaach roku 2004 (tabela 6.98).
SELECT {[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary].Children} ON 0,
{[Time].[Year - Quarter - Month - Date].[Year].Members,

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

295

Tabela 6.98. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci z rozbiciem roku 2004 na kwartay
Zegary

Budzik

Budzik Mech.

Wielofunkcyjny

Calendar 2001

2386.15

168.2

(null)

...

(null)

Calendar 2002

1153.48

33.64

35.5

...

(null)

Calendar 2003

2316.86

(null)

(null)

...

273.84

Calendar 2004

(null)

(null)

(null)

...

(null)

Quarter 1, 2004

(null)

(null)

(null)

...

(null)

Quarter 2, 2004

(null)

(null)

(null)

...

(null)

Quarter 3, 2004

(null)

(null)

(null)

...

(null)

Quarter 4, 2004

(null)

(null)

(null)

...

(null)

[Time].[Year - Quarter - Month FROM [Zyski_s]


WHERE [Measures].[Wartosc]

Date].[Year].[Calendar 2004].Children} ON 1

Jak wida w caym roku, a co za tym idzie, we wszystkich kwartaach tego roku warto sprzeday zegarw bya NULL. Dokonajmy teraz modyfikacji kostki w taki sposb, e wymuszona bdzie warto sprzeday zegarw w 2004 roku i przypisana jej
zostanie warto 1000. Obserwujc skutki wykonania zapytania wybierajcego przedstawione w tabeli 6.99, moemy zauway, e dla caego roku i caej kategorii warto
jest zgodna z ustawion zapytaniem modyfikujcym. Natomiast na poziomie wzw
pochodnych, zarwno towarw, jak i kwartaw, wartoci zostay rozdystrybuowane
rwnomiernie w taki sposb, aby ich suma liczona tak wierszami, jak i kolumnami
bya zgodna z ustawion sprzeda cakowit. Mona powiedzie, e warto komrki
pochodnej jest ilorazem wartoci wza nadrzdnego przez liczb czonkw poziomu
podrzdnego, posiadajcych tego rodzica, dla ktrego dokonano zmiany. Z premedytacj
nie dokonano formatowania wynikw, aby pokaza, e pomimo to wartoci w wzach potomnych mog si nieznacznie rni. Wynika to z zaokrgle w reprezentacji
zmiennoprzecinkowej liczb oraz chci zachowania zgodnoci sumy cakowitej i sum
czciowych. Analizujc zmiany dla kwartaw, moemy dodatkowo stwierdzi, e najmniejsze wartoci ustawiane s dla trzeciego i czwartego kwartau, poniewa w latach
poprzednich sprzeda w nich bya mniejsza ni w pocztkowych kwartaach roku,
jednak te dysproporcje nie s znaczce.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=1000
SELECT {[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary].Children} ON 0,
{[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004].Children} ON 1
FROM [Zyski_s]
WHERE [Measures].[Wartosc]

296

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.99. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci, z rozbiciem roku 2004 na kwartay,
po modyfikacji wartoci sprzeday zegarw w roku 2004
Zegary

Budzik

Budzik Mech.

...

Wielofunkcyjny

Calendar
2001

2386.15

168.2

(null)

...

(null)

Calendar
2002

1153.48

33.64

35.5

...

(null)

Calendar
2003

2316.86

(null)

(null)

...

273.84

Calendar
2004

1000

124.999999999999 124.999999999924 ...

124.999999999999

Quarter 1, 248.633879781344 31.0792349726776 31.0792349726025 ...


2004

31.0792349726776

Quarter 2, 248.633879781419 31.0792349726776 31.0792349726776 ...


2004

31.0792349726776

Quarter 3, 251.366120218578 31.4207650273225 31.4207650273225 ...


2004

31.4207650273225

Quarter 4, 251.366120218578 31.4207650273225 31.4207650273225 ...


2004

31.4207650273225

Jeeli zastosujemy formatowanie wartoci, jak pokazano w kolejnym zapytaniu, otrzymamy czytelniejszy obraz zmian, z pominiciem rnic pochodzcych od zaokrgle,
co prezentuje tabela 6.100. Moemy si jednak w tym przypadku spodziewa nieznacznych rnic przy wyznaczaniu sumy cakowitej oraz sum czciowych.
WITH MEMBER Measures.Wart AS Wartosc, FORMAT_STRING='#.000'
SELECT {[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary].children} ON 0,
{[Time].[Year - Quarter - Month - Date].[Year].members,
[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004].children} ON 1
FROM [Zyski_s]
WHERE [Measures].[wart]

Tabela 6.100. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci, z rozbiciem roku 2004 na kwartay,
po modyfikacji wartoci sprzeday zegarw w roku 2004 oraz po wprowadzeniu formatowania
wywietlanych wynikw
Zegary

Budzik

Budzik Mech.

Wielofunkcyjny

Calendar 2001

2386.150

168.200

(null)

(null)

Calendar 2002

1153.480

33.640

35.500

(null)

Calendar 2003

2316.860

(null)

(null)

273.840

Calendar 2004

1000.000

125.000

125.000

125.000

Quarter 1, 2004

248.634

31.079

31.079

31.079

Quarter 2, 2004

248.634

31.079

31.079

31.079

Quarter 3, 2004

251.366

31.421

31.421

31.421

Quarter 4, 2004

251.366

31.421

31.421

31.421

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

297

Dystrybucj ustawionej dla wza nadrzdnego wartoci na wzy potomne moemy sterowa, uywajc czterech dyrektyw. Pierwsz z nich jest USE_EQUAL_ALLOCATION,
jak pokazuje kolejny przykad. Dokonujc takiej modyfikacji i odpytujc zmodyfikowan struktur, zauwaymy, e skutek jest dokadnie taki sam jak w przypadku jej
braku (tabela 6.100). wiadczy to o tym, e jest to stan domylny modyfikacji danych
w kostce.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=1000
USE_EQUAL_ALLOCATION

Kolejn dyrektyw sterujc dystrybucj na wzy potomne jest USE_EQUAL_


INCREMENT. Jeeli jednak dokonamy takiej modyfikacji zapytania, a nastpnie
obejrzymy wyniki, to stwierdzimy, e w dalszym cigu mamy do czynienia z tymi
samymi wartociami, co moe budzi niepokj, czy poprawnie wskazalimy opcj domyln. Przyczyn takiego stanu rzeczy jest fakt, e modyfikowana komrka rodzica
miaa warto wyjciow NULL, czyli nie miaa starej wartoci. Dokadniejszy opis
dziaania dyrektyw jest zawarty w tabeli 6.101. Jednak moe si zdarzy, e osoba
sprawdzajca dziaanie tego skryptu stwierdzi, e otrzymaa zupenie inne rezultaty.
Stanie si tak, kiedy zapytanie to bdzie wykonywane w tej samej sesji co zapytanie
poprzednie. wiadczy to o tym, e modyfikacje s trwae w ramach jednej sesji, a kada
kolejna odnosi si do ju zmodyfikowanej zawartoci kostki. Wielokrotne wykonywanie zapytania z dyrektyw USE_EQUAL_ALLOCATION nie bdzie powodowao
zmian rezultatu, co atwo uzasadni, analizujc opis tej dyrektywy oraz wzr opisujcy zawarto komrek dzieci zawarty w tabeli 6.101.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=1000
USE_EQUAL_INCREMENT
WHERE [Measures].[wart]

Przeanalizujmy teraz skutek zastosowania dyrektywy USE_WEIGHTED_ALLOCATION


w przypadku ustawienia wartoci sprzeday zegarw na 1000. Pozostajemy przy roku
2004, dla ktrego wartoci pocztkowe s NULL. W pierwszym przypadku ustawmy
wag na 0. Skutek odpytania kostki po modyfikacji jest zawarty w tabeli 6.102. Poniewa
zapytanie wybierajce byo ju prezentowane poprzednio, nie zostao uwzgldnione
w skrypcie. Analizujc wyniki, zauwaamy, e dla takiej modyfikacji ca warto
rodzica przej ten wze, w ktrym zanotowano w poprzednich latach najmniejsz
sprzeda. Pozostae komrki maj ustawion warto 0.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=1000
USE_WEIGHTED_ALLOCATION BY 0.

298

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.101. Dyrektywy sterujce dystrybucj wartoci na wzy potomne w zapytaniu UPDATE CUBE
Dyrektywa

Opis

USE_EQUAL_ALLOCATION

Nowa warto przypisana do komrki rodzica jest dzielona


rwnomiernie midzy wszystkie dzieci (akcja domylna):
Warto_Potomka = Nowa_Warto_Rodzica/Ilo_Dzieci.

USE_EQUAL_INCREMENT

Nowa warto dla dziecka stanowi star warto powikszon


o zmian wartoci dla rodzica podzielon przez ilo dzieci:
Warto_Potomka = Stara_Warto_Potomka + (Nowa_
Warto_Rodzica Stara_Warto_Rodzica) /Ilo_Dzieci.

USE_WEIGHTED_ALLOCATION

Nowa warto rodzica jest dzielona pomidzy komrki dzieci


za pomoc wagi opisanej wyraeniem, ktre musi zwraca
warto z przedziau <0, 1>:

USE_WEIGHTED_INCREMENT

Nowa warto dla dziecka stanowi star warto powikszon


o zmian wartoci dla rodzica pomnoon przez wag, ktra
musi zwraca warto z przedziau <0, 1>:

Warto_Potomka = Nowa_Warto_Rodzica * FunkcjaWagi.

Warto_Potomka = Stara_Warto_Potomka + (Nowa_


Warto_Rodzica Stara_Warto_Rodzica) * FunkcjaWagi.
Tabela 6.102. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci, z rozbiciem roku 2004 na kwartay,
po modyfikacji wartoci sprzeday zegarw w roku 2004, w przypadku zastosowania USE_WEIGHTED_
ALLOCATION BY 0
Zegary

Budzik

Budzik Mech.

...

Wielofunkcyjny

Calendar 2001

2386.150

168.200

(null)

...

(null)

Calendar 2002

1153.480

33.640

35.500

...

(null)

Calendar 2003

2316.860

(null)

(null)

...

273.840

Calendar 2004

1000.000

.000

1000.000

...

.000

Quarter 1, 2004

1000.000

.000

1000.000

...

.000

Quarter 2, 2004

.000

.000

.000

.000

.000

Quarter 3, 2004

.000

.000

.000

.000

.000

Quarter 4, 2004

.000

.000

.000

.000

.000

Jeeli nieznacznie podniesiemy warto wagi w dyrektywie USE_WEIGHTED_


ALLOCATION BY do wartoci 0.0001, otrzymamy bardziej rwnomierny rozkad
wartoci w komrkach potomnych ni poprzednio (tabela 6.103). Jednak w dalszym
cigu najwiksze wartoci zostan przepisane do komrki reprezentujcej towar, ktrego sprzeda w latach poprzednich bya najmniejsza.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=1000
USE_WEIGHTED_ALLOCATION BY 0.0001

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

299

Tabela 6.103. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci, z rozbiciem roku 2004 na kwartay,
po modyfikacji wartoci sprzeday zegarw w roku 2004, w przypadku zastosowania USE_WEIGHTED_
ALLOCATION BY 0.0001
Zegary

Budzik

Budzik Mech.

...

Wielofunkcyjny

Calendar 2001

2386.150

168.200

(null)

(null)

Calendar 2002

1153.480

33.640

35.500

(null)

Calendar 2003

2316.860

(null)

(null)

273.840

Calendar 2004

1000.000

36.600

743.800

36.600

Quarter 1, 2004

780.000

9.100

716.300

9.100

Quarter 2, 2004

72.800

9.100

9.100

9.100

Quarter 3, 2004

73.600

9.200

9.200

9.200

Quarter 4, 2004

73.600

9.200

9.200

9.200

Jeeli wag alokacji podniesiemy do wartoci 0.00035, to otrzymamy wreszcie taki


efekt, gdzie towary o wyszej sprzeday osiganej w przeszoci maj wiksz warto
wynikajc z prognozowanej dystrybucji (tabela 6.104). Dalsze zwikszanie wartoci
mnonika powoduje, e najmniejsze wartoci przechodz do zakresu liczb ujemnych,
tak aby zrwnoway sum czn.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=1000
USE_WEIGHTED_ALLOCATION BY 0.00035

Tabela 6.104. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci, z rozbiciem roku 2004 na kwartay,
po modyfikacji wartoci sprzeday zegarw w roku 2004, w przypadku zastosowania
USE_WEIGHTED_ALLOCATION BY 0.00035
Zegary

Budzik

Budzik Mech.

...

Wielofunkcyjny

Calendar 2001

2386.150

168.200

(null)

...

(null)

Calendar 2002

1153.480

33.640

35.500

...

(null)

Calendar 2003

2316.860

(null)

(null)

...

273.840

Calendar 2004

1000.000

128.100

103.300

...

128.100

Quarter 1, 2004

230.000

31.850

7.050

...

31.850

Quarter 2, 2004

254.800

31.850

31.850

...

31.850

Quarter 3, 2004

257.600

32.200

32.200

...

32.200

Quarter 4, 2004

257.600

32.200

32.200

...

32.200

Do tej pory byy analizowane przypadki, w ktrych stosowano statyczn warto wagi. Jednake waga moe by rwnie zdefiniowana za pomoc bardziej skomplikowanych wyrae MDX. W prezentowanym przykadzie warto wagi jest zalena od
wartoci, ktra pojawia si dla towaru w rwnolegym okresie poprzedniego roku.

300

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Kiedy w poprzednim roku warto w tym samym kwartale bya pusta, to waga zostaa
ustalona na 0. W przeciwnym razie sprawdzane jest, czy sprzeda w tym kwartale jest pusta, jeli jest to prawda, waga jest ustalana na warto 0.5. Jeeli jednoczenie w obu rwnolegych kwartaach biecego i poprzedzajcego roku warto sprzeday jest rna
od NULL, waga jest ilorazem sprzeday w kwartale roku biecego do wartoci w tym
samym kwartale roku poprzedniego. Obserwujc wyniki prezentowane w tabeli 6.105,
zauwaymy, e wikszo wartoci pozostaje pusta, poniewa wartoci w roku biecym byy NULL, ale w czci, kiedy rwnolegy kwarta zawiera rwnie wartoci
NULL, warto zostaa ustalona na poow wymuszonej wartoci w wle rodzica.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=1000
USE_WEIGHTED_ALLOCATION BY
IIF(ISEMPTY(
(ParallelPeriod([Time].[Year - Quarter - Month - Date].[Year], 1,
[Time].[Year - Quarter - Month - Date].CurrentMember),
[Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc])), 0,
IIF(ISEMPTY(
([Time].[Year - Quarter - Month - Date].Currentmember,
([Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc]))), 0.5,
(ParallelPeriod([Time].[Year - Quarter - Month - Date].[Year], 1,
[Time].[Year - Quarter - Month - Date].CurrentMember),
([Towar_calosc].[Kategoria_towar].Currentmember,
[Measures].[Wartosc]))
/
([Time].[Year - Quarter - Month - Date].CurrentMember,
([Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc])
)))

Tabela 6.105. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci, z rozbiciem roku 2004 na kwartay,
po modyfikacji wartoci sprzeday zegarw w roku 2004, w przypadku zastosowania USE_WEIGHTED_
ALLOCATION BY z wartoci wagi zalen od sprzeday w rwnolegym kwartale roku poprzedniego
Zegary

Budzik

Budzik Mech.

...

Wielofunkcyjny

Calendar 2001

2386.150

168.200

(null)

...

(null)

Calendar 2002

1153.480

33.640

35.500

...

(null)

Calendar 2003

2316.860

(null)

(null)

...

273.840

Calendar 2004

1000.000

.000

500.000

...

.000

Quarter 1, 2004

1000.000

.000

500.000

...

.000

Quarter 2, 2004

.000

.000

.000

...

.000

Quarter 3, 2004

.000

.000

.000

...

.000

Quarter 4, 2004

.000

.000

.000

...

.000

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

301

Oczywicie modyfikowanie komrki, ktra miaa oryginaln warto rwn NULL,


jest atwiejsze do analizy, jednak nie w peni pokazuje sposb dziaania rnych dyrektyw alokacji danych w komrkach nadrzdnych. Aby przybliy oryginaln zawarto komrek, wywietlmy sprzeda we wszystkich latach, przy czym rok 2003
rozbijemy na kwartay. Wynik wykonania poniszego zapytania zawiera tabela 6.106.
WITH MEMBER
MEASURES.Wart AS Wartosc, FORMAT_STRING='#.000'
SELECT {[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary].Children} ON 0,
{[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2001],
[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2002],
[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2003],
[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2003].Children,
[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2004]} ON 1
FROM [Zyski_s]
WHERE [Measures].[Wart]

Tabela 6.106. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci z rozbiciem roku 2003 na kwartay
Zegary

Budzik

Budzik Mech.

Wielofunkcyjny

Calendar 2001

2386.150

168.200

(null)

...

(null)

Calendar 2002

1153.480

33.640

35.500

...

(null)

Calendar 2003

2316.860

(null)

(null)

...

273.840

Quarter 1, 2003

265.920

(null)

(null)

...

(null)

Quarter 2, 2003

664.200

(null)

(null)

...

(null)

Quarter 3, 2003

398.270

(null)

(null)

...

(null)

Quarter 4, 2003

988.470

(null)

(null)

...

273.840

Calendar 2004

(null)

(null)

(null)

...

(null)

Podobnie jak poprzednio, zmodyfikujmy warto sprzeday zegarw, tym razem jednak w roku 2003. Zamiast rdowej wartoci 2316.86 wstawmy do tego wza 4000.
Zastosujemy przy tym dyrektyw waonej alokacji USE_WEIGHTED_ALLOCATION BY
ze sta wartoci wagi 0.00035. Dla wyjciowej wartoci NULL bya to maksymalna
sensowna warto wagi. Jeli nastpnie powtrzymy zapytanie wybierajce, to otrzymamy wyniki pokazane w tabeli 6.107. Tym razem dystrybucja wartoci nie jest ju
tak rwnomierna jak dla roku 2004.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2003],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=4000
USE_WEIGHTED_ALLOCATION BY 0.00035

302

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.107. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci, z rozbiciem roku 2003 na kwartay,
po modyfikacji wartoci sprzeday zegarw w roku 2003, w przypadku zastosowania USE_WEIGHTED_
ALLOCATION BY 0.00035
Zegary

Budzik

Budzik Mech.

...

Wielofunkcyjny

Calendar 2001

2386.150

168.200

(null)

...

(null)

Calendar 2002

1153.480

33.640

35.500

...

(null)

Calendar 2003

4000.000

511.000

423.000

...

511.000

Quarter 1, 2003

920.000

126.000

38.000

...

126.000

Quarter 2, 2003

1019.200

127.400

127.400

...

127.400

Quarter 3, 2003

1030.400

128.800

128.800

...

128.800

Quarter 4, 2003

1030.400

128.800

128.800

...

128.800

Calendar 2004

(null)

(null)

(null)

...

(null)

Tak samo jak poprzednio moemy wykona modyfikacj wartoci dla roku 2003 ze
zmienn wartoci wagi, zalen od wartoci w tym samym kwartale roku poprzedniego. Zastosowane zostao takie samo jak poprzednio wyraenie MDX, a wyniki zebrano w tabeli 6.108.
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2003],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=4000
USE_WEIGHTED_INCREMENT BY
IIF(ISEMPTY(
(ParallelPeriod([Time].[Year - Quarter - Month - Date].[Year], 1,
[Time].[Year - Quarter - Month - Date].CurrentMember),
[Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc])), 0,
IIF(ISEMPTY(
([Time].[Year - Quarter - Month - Date].Currentmember,
([Towar_calosc].[Kategoria_towar].Currentmember,
[Measures].[Wartosc]))), 0.0,
(ParallelPeriod([Time].[Year - Quarter - Month - Date].[Year], 1,
[Time].[Year - Quarter - Month - Date].CurrentMember) ,
([Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc]))
/
([Time].[Year - Quarter - Month - Date].CurrentMember,
([Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc])
)))

Zachcam Czytelnikw do eksperymentw z modyfikacj zawartoci kostki. Warto


sprawdzi skutek modyfikacji dla rnych kategorii i lat oraz sprbowa zmodyfikowa wyraenie wyznaczajce wagi. Najprostszym rozwizaniem jest zmiana statycznych wartoci w funkcji IIF oraz zmodyfikowanie wyraenia przez odwoanie si do
wartoci sprzed dwch lat i roku.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

303

Tabela 6.108. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci, z rozbiciem roku 2003 na kwartay,
po modyfikacji wartoci sprzeday zegarw w roku 2003, w przypadku zastosowania USE_WEIGHTED_
ALLOCATION BY z wartoci wagi zalen od sprzeday w rwnolegym kwartale roku poprzedniego
Zegary

Budzik

Budzik Mech.

...

Wielofunkcyjny

Calendar 2001

2386.150

168.200

(null)

...

(null)

Calendar 2002

1153.480

33.640

35.500

...

(null)

Calendar 2003

4000.000

.000

1683.140

...

273.840

Quarter 1, 2003

1949.060

.000

1683.140

...

.000

Quarter 2, 2003

664.200

.000

.000

...

.000

Quarter 3, 2003

398.270

.000

.000

...

.000

Quarter 4, 2003

988.470

.000

.000

...

273.840

Calendar 2004

(null)

(null)

(null)

...

(null)

W prezentowanych przykadach operowalimy na kostce rdowej, ale moliwe jest


stosowanie modyfikacji z rnymi dyrektywami okrelajcymi dystrybucj na wartoci potomne oraz ze zoonymi funkcjami wag dla obiektw sesyjnych, np. podkostki.
Takie postpowanie pokazuje kolejny skrypt, w ktrym w okreleniu podkostki ograniczono definicje wymiarw, a nastpnie dokonano modyfikacji wartoci sprzeday.
Skutek sprawdzajcego zapytania wybierajcego zawiera tabela 6.109.
CREATE SUBCUBE [Zyski_s] AS
SELECT {[Towar_calosc].[Nazwa Kategorii].[Akcesoria],
[Towar_calosc].[Nazwa Kategorii].[Muzyka],
[Towar_calosc].[Nazwa Kategorii].[Zegary]} ON 0,
{[Time].[Year].[Calendar 2002],[Time].[Year].[Calendar 2003]} ON 1
FROM [Zyski_s]
UPDATE CUBE [Zyski_s]
SET
([Time].[Year - Quarter - Month - Date].[Year].[Calendar 2003],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Measures].[Wartosc])=4000
USE_WEIGHTED_INCREMENT BY
IIF(ISEMPTY(
(ParallelPeriod([Time].[Year - Quarter - Month - Date].[Year], 1,
[Time].[Year - Quarter - Month - Date].CurrentMember),
[Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc])), 0,
IIF(ISEMPTY(([Time].[Year - Quarter - Month - Date].CurrentMember,
([Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc]))), 0.0,
(ParallelPeriod([Time].[Year - Quarter - Month - Date].[Year], 1,
[Time].[Year - Quarter - Month - Date].CurrentMember),
([Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc]))
/
([Time].[Year - Quarter - Month - Date].Currentmember,
([Towar_calosc].[Kategoria_towar].Currentmember,
[Measures].[Wartosc])
)))

304

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.109. Skutek wykonania zapytania wybierajcego warto sprzeday dla kategorii zegary
i wszystkich towarw tej grupy w latach prowadzenia dziaalnoci, z rozbiciem roku 2003 na kwartay,
po modyfikacji wartoci sprzeday zegarw w roku 2003 dla podkostki, w przypadku zastosowania
dyrektywy USE_WEIGHTED_ALLOCATION BY z wartoci wagi zalen od sprzeday w rwnolegym
kwartale roku poprzedniego
Zegary

Budzik

Budzik Mech.

...

Wielofunkcyjny

Calendar 2002

1153.480

33.640

35.500

...

(null)

Calendar 2003

4000.000

.000

1683.140

...

273.840

Quarter 1, 2003

1949.060

.000

1683.140

...

.000

Quarter 2, 2003

664.200

.000

.000

...

.000

Quarter 3, 2003

398.270

.000

.000

...

.000

Quarter 4, 2003

988.470

.000

.000

...

273.840

WITH MEMBER
MEASURES.Wart AS Wartosc, FORMAT_STRING='#.000'
SELECT {[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary],
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary].Children} ON 0,
{[Time].[Year - Quarter - Month - Date].[Year].Members,
[Time].[Year - Quarter - Month - Date].[Year].[Calendar 2003].Children
} ON 1
FROM [Zyski_s]
WHERE [Measures].[Wart]

Naley pamita, e w przypadku podkostki moliwe jest modyfikowanie danych wystpujcych w obiekcie rdowym, ktre nie s widoczne w definicji SUBCUBE.
Dopiero usunicie definicji podkostki pozwala na ich przegldanie. Podczas modyfikowania moliwe jest rwnie siganie do niewidocznych danych, np. w definiowaniu wag wyraeniami MDX.
Aby uatwi Czytelnikowi analiz poprzednich zoonych przykadw, na zakoczenie zostanie przytoczone zapytanie testujce wartoci wag, ktre moe by wykorzystywane do testowania wasnych rozwiza. Jest to proste przeksztacenie wyraenia
uywanego poprzednio do wyznaczania wag, ze zmodyfikowanymi wartociami staych dla przypadkw wystpowania pustych komrek. Wyniki otrzymane na skutek
uycia tego zapytania zawiera tabela 6.110.
WITH MEMBER
MEASURES.xxx as
IIF(ISEMPTY(
(ParallelPeriod([Time].[Year - Quarter - Month - Date].[Year], 1,
[Time].[Year - Quarter - Month - Date].CurrentMember),
[Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc])), 0,
IIF(ISEMPTY(
([Time].[Year - Quarter - Month - Date].Currentmember,
[Towar_calosc].[Kategoria_towar].Currentmember,
[Measures].[Wartosc])), -1,
(ParallelPeriod([Time].[Year - Quarter - Month - Date].[Year], 1,
[Time].[Year - Quarter - Month - Date].CurrentMember),
[Towar_calosc].[Kategoria_towar].CurrentMember,
[Measures].[Wartosc])/

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

305

Tabela 6.110. Skutek wykonania zapytania wybierajcego warto wag wyznaczanych wyraeniem
MDX zalenym od sprzeday w poprzednim roku
Budzik

Budzik Mech.

...

Wielofunkcyjny

All

...

Calendar 2001

...

Calendar 2002

...

Calendar 2003

-1

-1

...

Calendar 2004

...

-1

([Time].[Year - Quarter - Month - Date].CurrentMember,


[Towar_calosc].[Kategoria_towar].Currentmember,
[Measures].[wartosc])))
SELECT [Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[zegary].Children ON 0,
[Time].[Year].Members ON 1
FROM Zyski_s
WHERE Measures.xxx

Modyfikowanie zawartoci kostki ma bardzo due znaczenie praktyczne. Moe stanowi


wany element analizy pozwalajcy na predykcj wartoci sprzeday w przyszoci,
w zalenoci od rnych czynnikw wystpujcych w przeszoci, niekoniecznie bezporednio zwizanych z ekstrapolowan wartoci. Moliwe jest np. przewidywanie,
w jaki sposb wzrost nakadw na reklam wpynie na zmian dochodw firmy, na
podstawie analizy takiej zalenoci wystpujcej w przeszoci. Moliwe jest rwnie
badanie, co si zmieni, kiedy powikszy si lub zmniejszy biece wydatki. Potencjalnych rodzajw tego typu analiz jest oczywicie o wiele wicej.
Oprcz danych zawartych w kostce moliwe jest rwnie modyfikowanie pewnych
jej waciwoci. Oczywicie tak samo jak poprzednio zmiany te s aktywne co najwyej do koca sesji, w ktrej ich dokonano. Aby to zilustrowa, wykonajmy zapytanie
wywietlajce w kolumnie domylny atrybut dla wymiaru opisujcego towary na poziomie kategorii. Jak pokazuje tabela 6.111, atrybutem tym jest wze korzenia ALL.
SELECT [Towar_calosc].[Kategoria_towar].DefaultMember ON 0
FROM [Zyski_s]

Tabela 6.111. Skutek wykonania zapytania wybierajcego warto domylnej miary dla domylnego
atrybutu na poziomie kategorii towaru
All
1181

Domylny element moe zosta zmieniony na skutek wykonania zapytania ALTER


CUBE. W przedstawionym przykadzie dla poziomu kategorii towaru ustawiono go
na kategori zegary. Ponowne odpytanie kostki potwierdza skutek dziaania tej modyfikacji, co jest widoczne w tabeli 6.112.
ALTER CUBE [Zyski_s]
UPDATE DIMENSION [Towar_calosc].[Kategoria_towar],
DEFAULT_MEMBER =
[Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].[Zegary]
SELECT [Towar_calosc].[Kategoria_towar].DefaultMember ON 0
FROM [Zyski_s]

306

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.112. Skutek wykonania zapytania wybierajcego warto domylnej miary dla ustanowionego
nowego domylnego atrybutu na poziomie kategorii towaru
Zegary
71

Dla kadego zapytania wybierajcego, w tym rwnie przedstawionego w kolejnym


przykadzie, ktrego wyniki zawiera tabela 6.113, domyln miar jest ilo. Wynika
to z faktu, e wystpuje jako pierwsza na licie miar, a nie dokonano jawnie ustanowienia innej miary domylnej nie ustawiono odpowiedniej waciwoci w definicji
kostki po stronie hurtowni danych.
SELECT
[Time].[Year].Members ON 0
FROM [Zyski_s]

Tabela 6.113. Skutek wykonania zapytania wybierajcego warto domylnej miary w kolejnych latach
prowadzenia dziaalnoci
All

Calendar 2001

Calendar 2002

Calendar 2003

Calendar 2004

1181

225

509

379

68

Podobnie jak poprzednio dla wymiaru, moliwe jest dokonanie zmiany domylnej miary
na czas trwania sesji za pomoc zapytania ALTER CUBE. Przykad ilustruje ustawienie tej waciwoci na zysk, co potwierdzaj zawarte w tabeli 6.114 wyniki wykonania zapytania wybierajcego.
ALTER CUBE [Zyski_s] UPDATE DIMENSION
Measures, DEFAULT_MEMBER=[Measures].[Zysk]
SELECT
[Time].[Year].Members ON 0
FROM [Zyski_s]

Tabela 6.114. Skutek wykonania zapytania wybierajcego warto ustalonej dla sesji domylnej miary
w kolejnych latach prowadzenia dziaalnoci
All

Calendar 2001

Calendar 2002

Calendar 2003

Calendar 2004

$21,749.47

$4,027.43

$8,573.77

$7,858.48

$1,289.79

Kolejn moliwoci jest utworzenie nowego czonka Member. W przeciwiestwie do


definiowanego ad hoc, ktry moe by uyty tylko w zapytaniu, w ktrym zosta zdefiniowany, obiekt sesyjny moe by wykorzystywany wielokrotnie w sesji. Czas jego
ycia jest zdeterminowany czasem trwania sesji, w ktrej go utworzono. Kady element
tej klasy moe by rwnie usunity rcznie za pomoc polecenia DROP. Utworzenie
czonka poleceniem CREATE MEMBER wymaga podania jego nazwy kwalifikowanej, uwzgldniajcej przynaleno do atrybutu miary, wymiaru lub hierarchii. Po
sowie kluczowym AS nastpuje jego definicja za pomoc wyraenia MDX o strukturze takiej samej jak w przypadku definicji ad hoc. Moliwe jest ustanowienie formatu
oraz flagi widzialnoci (w stanie domylnym widzialny). W przykadzie zdefiniowano
nowy element jako sum wartoci dla wszystkich kategorii towaru. W sprawdzajcym

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

307

zapytaniu wybierajcym element ten stanowi jeden z dwch atrybutw definiujcych


zbir opisujcy wiersze. Analiza wynikw przedstawionych w tabeli 6.115 pokazuje,
e wynik wyznaczenia takiego czonka jest rwnoznaczny z wartoci wza nadrzdnego ALL.
DROP MEMBER
[Zyski_s].[Towar_calosc].[Kategoria_towar].[Podsumowanie]
CREATE MEMBER
[Zyski_s].[Towar_calosc].[Kategoria_towar].[Podsumowanie]
AS
Sum([Towar_calosc].[Kategoria_towar].Members,
[Measures].[Wartosc]),
FORMAT_STRING = '0.00',
VISIBLE = 1
SELECT
[Time].[Year].Members ON 0,
NONEMPTY(
{[Towar_calosc].[Kategoria_towar].Podsumowanie,
[Towar_calosc].[Kategoria_towar].Members}) ON 1
FROM Zyski_s
WHERE Measures.Wartosc

Tabela 6.115. Skutek wykonania zapytania wybierajcego warto utworzonego dla sesji atrybutu
dla kategorii towarw w kolejnych latach prowadzenia dziaalnoci
All

Calendar 2001

Calendar 2002 Calendar 2003 Calendar 2004

Podsumowanie

92984.44

19041.16

36920.53

31950.60

5072.15

All

92984.44

19041.16

36920.53

31950.6

5072.15

Akcesoria

7765.48

2395.47

2579.46

2472.87

317.68

Pasek

294

44.1

161.7

88.2

(null)

Podstawka

250.29

(null)

250.29

(null)

(null)

Wielofunkcyjny

273.84

(null)

(null)

273.84

(null)

Przykadw definicji czonkw sesyjnych mona przytoczy wiele. W kolejnym


przykadzie pokazano, e moliwe jest uywanie w wyraeniu MDX instrukcji warunkowej CASE. Zilustrowana zostaa zasada zastpowania wartoci pustej NULL inn wartoci (przydatne, jeli jest ona elementem jakiego bardziej rozbudowanego
wyraenia, szczeglnie gdy jest jego mianownikiem). W ilustracji wartoci puste zostay zastpione poprzedzajc je wartoci niepust. Obliczenia prowadzone s podczas wywietlania kolejnych wierszy w przypadku kilku kolejno wystpujcych po
sobie pustych komrek. W rezultacie takiej operacji wszystkie one bd miay takie
same wartoci, rwne ostatniej niepustej komrce, co pokazuje tabela 6.116.
CREATE MEMBER [Zyski_s].[Measures].[NiePuste]
AS
CASE
WHEN NOT ISEMPTY([Measures].[Zysk])
THEN [Measures].[zysk]
ELSE ([Time].[Year - Quarter - Month - Date].PrevMember)
END

308

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.116. Skutek wykonania zapytania wybierajcego warto utworzonego dla sesji atrybutu
w kolejnych kwartaach prowadzenia dziaalnoci
Zysk

NiePuste

Quarter 1, 2001

$478.15

478.15

Quarter 1, 2004

$1,289.79

1289.79

Quarter 2, 2004

(null)

1289.79

Quarter 3, 2004

(null)

1289.79

Quarter 4, 2004

(null)

1289.79

SELECT
[Time].[Year - Quarter {zysk, NiePuste} ON 0
FROM [Zyski_s]

Month -

Date].[Quarter].Members ON 1,

Kolejny przykad to wyznaczenie ilorazu zysku do zysku redniego. Skutek wykonania zapytania sprawdzajcego przedstawia tabela 6.117. Odpowied na pytanie, dlaczego przy braku formatowania otrzymano wartoci cakowite pomimo zastosowania
dzielenia, zostawiam uwanemu Czytelnikowi. Innymi sowy, chodzi tu o to, co naprawd przedstawia element Wsp.
DROP MEMBER [Zyski].Measures.Wsp
CREATE MEMBER
[Zyski].Measures.Wsp AS
'[Measures].[Zysk]/[Measures].[SredniZysk]',
SOLVE_ORDER=5, SCOPE_ISOLATION=CUBE

Tabela 6.117. Skutek wykonania zapytania wybierajcego warto utworzonego dla sesji atrybutu dla
kategorii towarw w kolejnych latach prowadzenia dziaalnoci
All

Calendar 2001

Calendar 2002 Calendar 2003

Calendar 2004

Akcesoria

156

43

60

47

GPS

96

20

36

34

Muzyka

82

33

31

Opakowania

39

18

16

Oprogramowanie

192

33

103

39

17

Optyka

74

28

28

Ozdoby

97

18

51

19

Podrczniki

128

21

64

39

Pomoce

42

30

(null)

RTV

78

17

38

19

Telefony

126

17

55

54

(null)

Zegary

71

33

15

23

(null)

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

309

SELECT
NONEMPTY([Towar_calosc].[Kategoria_towar].[Nazwa Kategorii].Members) ON ROWS,
[Time].[Year].Members ON COLUMNS
FROM [Zyski]
WHERE Measures.Wsp

Bardzo podobna jest idea tworzenia sesyjnego zbioru atrybutw. Jego kwalifikowana
nazwa skada si z nazwy kostki i czci zasadniczej. Stosujemy polecenie CREATE
SET, w ktrym po sowie kluczowym AS, w apostrofach, okrelana jest definicja elementw zbioru, ujta w nawiasy klamrowe. Moliwe jest rwnie zastosowanie funkcji NameToSet( ). W prezentowanym przykadzie definicj zbioru stanowi cztery arbitralnie wybrane kategorie towaru. Utworzony element zosta wykorzystany do opisu
wierszy w sprawdzajcym zapytaniu wybierajcym; skutek jego wykonania jest pokazany w tabeli 6.118.
DROP SET [Zyski].Wybrane
CREATE SET [Zyski].Wybrane AS
'{[Towar_calosc].[Nazwa Kategorii].[Akcesoria],
[Towar_calosc].[Nazwa Kategorii].[Muzyka],
[Towar_calosc].[Nazwa Kategorii].[Telefony],
[Towar_calosc].[Nazwa Kategorii].[Zegary]}'
SELECT
Measures.Members ON COLUMNS,
Wybrane ON Rows
FROM [Zyski]

Tabela 6.118. Skutek wykonania zapytania wybierajcego miary dla utworzonego zbioru elementw
Ilosc

Wartosc

Wartosc Zakupu

Wszystkie Transakcje Count

Akcesoria

156

7765.48

6056.27

53

Muzyka

82

8167.92

6039.76

27

Telefony

126

10928.25

7484.82

43

Zegary

71

5856.49

4280.42

25

Warto chocia skrtowo wspomnie, e mona zdefiniowa obiekt GLOBAL CUBE


na podstawie istniejcej przetworzonej kostki. W jego definicji naley poda nazw
logiczn, nazw pliku fizycznego wraz ze ciek, gdzie bdzie przechowywany,
a w szczegach wykaz miar i wymiarw ten obiekt definiujcych, a zawartych w obiekcie rdowym. Do kostki GLOBAL CUBE nie mona si odwoa z wizualnych narzdzi hurtowni danych, ale mona si do niej podczy z poziomu aplikacji napisanej w jzyku wyszego rzdu (mona j przeglda rwnie z poziomu MS Excel),
wedug zasad, jakie obowizyway dla kostek w SQL Server 2000.
CREATE GLOBAL CUBE [G_Zyski]
STORAGE 'C:\Ksika_hurtownie_helion\hurtownia_ap\hurtownia\G_Zyski.cub'
FROM [Zyski]
(
MEASURE [Zyski].[Wartosc],
DIMENSION [Zyski].[Towar_calosc],
DIMENSION [Zyski].[Time]
)

310

Hurtownie danych. Od przetwarzania analitycznego do raportowania

W rozdziale dotyczcym narzdzi wizualnych sporo uwagi powicono wspczynnikom wydajnoci KPI. Moliwe jest ich utworzenie i zastosowanie w zapytaniach wybierajcych MDX rwnie po stronie Management Studio. Ich tworzenie za pomoc
skryptu polega na zoeniu w jedno zapytanie wszystkich definicji zapisywanych
w kolejnych kontrolkach po stronie Analysis Services. Polecenie CREATE KPI wymaga
podania kwalifikowanej nazwy wspczynnika, zawierajcej nazw kostki, na rzecz
ktrej bdzie on budowany. Po sowie kluczowym AS nastpuje definicja poszczeglnych elementw. Omwmy to na konkretnym przykadzie. Pierwszym elementem jest
wskazanie wyraenia atrybutu, ktry bdzie testowany; w prezentowanym przykadzie bdzie to miara zysk. Nastpnie podawana jest definicja celu GOAL, okrelona
jako wzrost zysku w stosunku do elementu poprzedzajcego o 10%. Status okrela,
kiedy traktujemy rezultat jako pozytywny. W tym celu stosujemy funkcj IIF, ktra
sprawdza, czy warto ta przekroczya zaoone 10%, i ustawia flag 1 ktra jest
znacznikiem sukcesu. W przeciwnym razie sprawdzane jest osignicie wspczynnika o wartoci 99% (1.1*0.9) wystawiana jest wtedy flaga 0 okrela to stan neutralny (rwnowaga). Dla wartoci poniej tego progu wystawiana flaga ma warto -1
okrela to porak. Mona powiedzie, e flagi opisuj przedziay wzrostu zysku
i przyjmuj wartoci: -1 dla <0, 0.99), 0 dla <0.99, 1.1) oraz 1 dla <1.1, ). Wedug
analogicznych zasad generowany jest wskanik trendu, czyli przyrostu wartoci
w czasie. W przykadzie wyraenia te s tosame, ale nie jest to wymg skadniowy.
Pozostaje jeszcze ustawienie rodzaju ikon obrazujcych oba wspczynniki, tj. STATUS
i TREND. Dla pierwszego z nich mamy do dyspozycji ikony okrelone przez nazwy
symboliczne (w nawiasach podano liczb, ktra jest ich indeksem): Shapes (3), Traffic
Light (3), Road Signs (3), Gauge (3), Reversed Gauge (5), Thermometer (3), Cylinder
(3), Faces (3), Variance arrow (3), natomiast w drugim przypadku: Standard Arrow (3),
Status Arrow (3), Reversed Arrow (3), Reversed status arrow (5), Faces (3). Ostatnie
elementy definicji stanowi: okrelenie obiektu nadrzdnego (PARENT_KPI), opis
wskanika (CAPTION), folder, w ktrym bdzie wywietlany (DISPLAY_FOLDER),
oraz grup, w ktrej zostanie utworzony (ASSOCIATED_MEASURE_GROUP).
DROP KPI [Zyski_s].[Wskaznik Zysku];
CREATE KPI [Zyski_s].[Wskaznik Zysku]
AS ([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild),
GOAL = ([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild.PrevMember)
STATUS = IIF(([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild)
>=([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild.PrevMember)
1,
IIF(([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild)
>= ([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild.PrevMember)
0, -1)),
TREND = IIF(([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild)
>= ([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild.PrevMember)
1,

* 1.10 ,

* 1.10,

* 1.10 * 0.9,

* 1.10,

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

311

IIF(([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild)
>=([Measures].[Zysk],
[Time].[Year - Quarter - Month - Date].LastChild.PrevMember) * 1.10 * 0.9,
0, -1)),
STATUS_GRAPHIC = 'Traffic Light',
TREND_GRAPHIC = 'Standard Arrow',
WEIGHT = 1,
CURRENT_TIME_MEMBER = [Time].[Year - Quarter - Month - Date].LastChild,
PARENT_KPI = '',
CAPTION = 'Wskanik KPI',
DISPLAY_FOLDER = 'KPIs',
ASSOCIATED_MEASURE_GROUP = 'Wszystkie transakcje'

Utworzony dla sesji wskanik wydajnoci moe by uyty w zapytaniu wybierajcym


do opisu jednej z osi. Przy czym kady z jego elementw musi by wywoany niezalenie. W przedstawionym przykadzie zostay one wykorzystane do utworzenia zbioru atrybutw opisujcych kolumny. Analizujc wyniki zawarte w tabeli 6.119, naley
zauway, e pomimo zdefiniowania ikon reprezentujcych stany wspczynnika wywietlane s tylko flagi numeryczne.
SELECT
[Time].[Year - Quarter - Month - Date].[Year].Members ON 1,
{KPIValue("Wskaznik Zysku"), KPIGoal("Wskaznik Zysku"),
KPIStatus("Wskaznik Zysku"), KPITrend("Wskaznik Zysku"),
KPIWeight("Wskaznik Zysku")}
ON 0
FROM [Zyski_s]

Tabela 6.119. Skutek wykonania zapytania wybierajcego elementy wspczynnika wydajnoci


w kolejnych latach prowadzenia dziaalnoci
Wskaznik
Zysku Value

Wskaznik
Zysku Goal

Wskaznik
Zysku Status

Wskaznik
Zysku Trend

Calendar 2001

1037.86

1533.587

-1

-1

Calendar 2002

1715.88

2714.756

-1

-1

Calendar 2003

2277.35

2833.413

-1

-1

Calendar 2004

(null)

(null)

Kolejnymi elementami, ktre mona utworzy, s akcje. Najpierw przyjrzyjmy si


obiektowi powodujcemu filtrowanie wedug wybranego elementu. Utworzony zosta
za pomoc polecenia CREATE ACTION, ktrego pierwszym elementem jest oparta na
nazwie kostki, kwalifikowana nazwa akcji. Po sowie kluczowym FOR wskazany zosta element, z ktrego moe by ona wyzwolona jest to poziom okrelajcy wojewdztwo w hierarchii definiujcej miejsce zamieszkania klientw. Definicja akcji
wystpujca po sowie kluczowym AS zawiera zoon z trzech acuchw definicj
podkostki. Pierwszy i ostatni stanowi statyczne napisy. Pierwszy zawiera polecenie
oraz opis osi 0, ostatni opis osi 2 i wskazanie rdowego obiektu. rodkowy acuch
zosta otrzymany przez przeksztacenie na napis funkcj MEMBERTOSTR biecego
elementu dla poziomu wyzwalajcego akcj. Konieczno przeksztacenia na tak form
wynika z tego, e caa definicja akcji musi by wyraona przez zmienn znakow.
Poza tym zdefiniowane zostay parametry: TYPE (typ akcji ustawiony na warto

312

Hurtownie danych. Od przetwarzania analitycznego do raportowania

STATEMENT, wskazujcy, e jest to definicja zestawu rekordw dana poleceniem MDX),


INVOCATION (tryb wyzwolenia interaktywny), DESCRIPTION (przyjazny opis)
oraz CAPTION (tytu wywietlany w oknie Browser). Niestety, dla danych wyprowadzonych w oknie Management Studio nie jest moliwe zweryfikowanie dziaania tak
utworzonego obiektu. Weryfikacja jest moliwa dziki statycznemu wprowadzeniu
danych opisujcych akcj na poziomie definicji kostki w Analysis Services lub na skutek
utworzenia jej w kocwce klienta napisanej w jzyku wyszego rzdu albo z poziomu
MS Excel. Moliwoci te zostan pokazane w rozdziale dotyczcym raportowania.
CREATE ACTION [Zyski].Filtrowanie
FOR
[Klienci].[Woj_miast_klient].[Wojewdztwo]
AS 'CREATE SUBCUBE [Zyski] AS
SELECT [Towar_calosc].[Kategoria_towar].Members ON 0,'
+ MEMBERTOSTR([Klienci].[Wojewdztwo].CurrentMember) + ' ON 1 ,
{[Time].[Year].[Calendar 2002],[Time].[Year].[Calendar 2003]} ON 2
FROM [Zyski]',
TYPE = 'STATEMENT',
INVOCATION = 'INTERACTIVE' ,
DESCRIPTION = 'Filtr' ,
CAPTION = '[Klienci].[Wojewdztwo].CurrentMember.Name'

Kolejnym przykadem jest akcja typu URL, powodujca uruchomienie przegldarki


oraz przejcie do wybranej witryny. Tym razem poziomem, dla ktrego uaktywnia si
akcja, jest poziom wojewdztwo, okrelajcy lokalizacj producenta. Odmiennie ni
w poprzednim rozdziale, gdzie korzystano z wyszukiwarki search.ms.com, zastosowano rozwizanie google.pl. Parametrem przekazywanym do zapytania jest nazwa
biecego czonka (nazwa wojewdztwa). Nie wystpuje konieczno konwersji na
acuch, poniewa metoda Name zwraca zmienn typu znakowego.
CREATE ACTION [Zyski].URL_act
FOR
[Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo]
AS 'http://www.google.pl/search?q=' +
[Towar_calosc].[Wojewdztwo].CurrentMember.Name,
TYPE = 'URL',
INVOCATION = 'INTERACTIVE' ,
DESCRIPTION = 'Szukaj' ,
CAPTION = 'Wyszukaj'+[Towar_calosc].[Wojewdztwo].CurrentMember.Name

Podobnie jak w przypadku wskanikw wydajnoci, rwnie w przypadku akcji liczba moliwych przykadw jest bardzo dua, zwaywszy na rnorodno typw akcji.
Jednym z nich jest drenie danych DRILLTHROUGH, ktry w Analysis Services by
tworzony na tej samej zakadce co pozostae; w MDX tworzony jest za pomoc polecenia
o tej samej nazwie. Definicja zawiera poprawne skadniowo zapytanie MDX, definiujce jedn o oraz przekrj okrelony klauzul WHERE. Moliwe jest take dodanie miary rnej od domylnej. Po sowie kluczowym Return wskazywane s elementy, ktre okrelaj klucz zestawu rekordw, pole definiujce nazwy oraz wartoci,
jakie maj zosta wywietlone w wynikowym zbiorze rekordw (tabela 6.120). Nazwa i klucz s okrelane przez odwoanie do rdowej tabeli po stronie perspektywy
rda danych w Analysis Services, std prefiks o postaci $.

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

313

Tabela 6.120. Skutek wykonania drenia danych dla wojewdztwa dzkiego w miesicach drugiego
kwartau 2003 roku
[$Time].
[Month]

[$Towar_calosc].
[Id Towaru]

[Wszystkie
[$Towar_calosc].
transakcje].
[Nazwa Kategorii]
[Ilosc]

[Wszystkie
transakcje].
[Wartosc]

[Wszystkie
transakcje].
[Wartosc Zakupu]

June 2003

30

Podrczniki

May 2003

52

GPS

64.76

47.1

110.16

90.32

May 2003

18

RTV

87.88

65.19

June 2003

46

Telefony

191.28

122.24

May 2003

25

Optyka

146.52

106.08

June 2003

43

Muzyka

350.52

219.72

June 2003

30

Podrczniki

97.14

70.65

DRILLTHROUGH
SELECT
([Time].[Year - Quarter - Month - Date].[Quarter].[Quarter 2, 2003])
ON 0
FROM [Zyski]
WHERE [Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo].[dzkie]
RETURN
[$Time].[Month],
KEY([$Towar_calosc].[Id Towaru]),
NAME([$Towar_calosc].[Nazwa Kategorii]),
[Wszystkie transakcje].[Ilosc],
[Wszystkie transakcje].[Wartosc],
[Wszystkie transakcje].[Wartosc Zakupu]

Drobne przeksztacenie poprzedniego zapytania przez zamian miejscami pl opisujcych klucz oraz nazw prowadzi do stanu, w ktrym obie kolumny zawieraj t sam warto, co wynika z definicji atrybutu IdTowaru, ktrego kolumn nazw bya
[Nazwa Towaru]. Skutek takiej modyfikacji przedstawia tabela 6.121.
DRILLTHROUGH
SELECT
([Time].[Year - Quarter - Month - Date].[Quarter].[Quarter 2, 2003])
ON 0
FROM [Zyski]
WHERE [Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo].[dzkie]
RETURN
[$Time].[Month],
NAME([$Towar_calosc].[Id Towaru]),
KEY([$Towar_calosc].[Nazwa Kategorii]),
[Wszystkie transakcje].[Ilosc],
[Wszystkie transakcje].[Wartosc],
[Wszystkie transakcje].[Wartosc Zakupu]

Kolejne przeksztacenie zapytania polega na ograniczeniu wynikowego zestawu do 5


pierwszych rekordw na skutek zastosowania dyrektywy MAXROWS. Drug zmian
jest uycie dla wszystkich wyprowadzanych pl aliasw, co powoduje, e wynikowy
zestaw rekordw jest czytelniejszy (tabela 6.122).

314

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tabela 6.121. Skutek wykonania drenia danych dla wojewdztwa dzkiego w miesicach drugiego
kwartau 2003 roku
[Wszystkie
transakcje].
[Ilosc]

[Wszystkie
transakcje].
[Wartosc]

[Wszystkie
transakcje].
[Wartosc Zakupu]

64.76

47.1

110.16

90.32

[$Time].
[Month]

[$Towar_calosc].
[Id Towaru]

[$Towar_calosc].
[Nazwa Kategorii]

June 2003

Poradnik

Podrczniki

May 2003

Mov 200

GPS

May 2003

Mikser A1

RTV

87.88

65.19

June 2003

S6001

Telefony

191.28

122.24

...

...

...

...

...

May 2003

Lupa

Optyka

146.52

106.08

June 2003

Kapela

Muzyka

350.52

219.72

June 2003

Poradnik

Podrczniki

97.14

70.65

Tabela 6.122. Skutek wykonania drenia danych dla wojewdztwa dzkiego w miesicach drugiego
kwartau 2003 roku z ograniczeniem liczby wywietlanych rekordw i aliasami pl opisujcych kolumny
Data

Nazwa

Kategoria

Ile

Wart

Zakup

June 2003

Poradnik

Podrczniki

64.76

47.1

May 2003

Mov 200

GPS

110.16

90.32

May 2003

Mikser A1

RTV

87.88

65.19

June 2003

S6001

Telefony

191.28

122.24

June 2003

Koncerty WAM

Muzyka

329.82

272.01

DRILLTHROUGH MAXROWS 5
SELECT
([Time].[Year - Quarter - Month - Date].[Quarter].[Quarter 2, 2003])
ON 0
FROM [Zyski]
WHERE [Towar_calosc].[woj_miasto_prod_towar].[Wojewdztwo].[dzkie]
RETURN
[$Time].[Month] AS Data,
Name([$Towar_calosc].[Id Towaru]) AS Nazwa,
Key([$Towar_calosc].[Nazwa Kategorii]) AS Karegoria,
[Wszystkie transakcje].[Ilosc] AS Ile,
[Wszystkie transakcje].[Wartosc] AS Wart,
[Wszystkie transakcje].[Wartosc Zakupu] AS Zakup

Ostatni przykad pokazuje moliwo tworzenia wartoci obliczanych CELL CALCULATION o zasigu sesyjnym. Definicja tego elementu jest do prost analogi definicji miary ad hoc. Po sowie kluczowym FOR wskazany jest zakres, dla ktrego
maj by prowadzone obliczenia. Symbol {} oznacza ca kostk, ale jest moliwe
ograniczenie zakresu wyraeniem MDX. W celu uproszczenia zapytania definicj obliczenia stanowi miara Wartosc. Pozostae parametry to: CONDITION okrelajcy,
kiedy obliczenia maj by wykonane (TRUE oznacza bezwarunkowe wykonanie),
DISABLED czy jest aktywne, DESCRIPTION opis przyjazny dla uytkownika,
CALCULATION_PASS_NUMBER okrela iteracj, w ktrej ma zosta wykonane

Rozdzia 6. Analiza danych z wykorzystaniem rozszerzenia MDX SQL

315

obliczenie, CALCULATION_PASS_DEPTH maksymaln liczb iteracji, SOLVE_


ORDER kolejno oblicze, FORMAT_STRING format wyprowadzanych danych, FORE_COLOR kolor czcionki, BACK_COLOR kolor ta komrki. Skrypt
zawiera zapytanie sprawdzajce, ktrego rezultat pokazano w tabeli 6.123.
DROP CELL CALCULATION Zyski_s.Oblicz
CREATE CELL CALCULATION Zyski_s.Oblicz FOR
'{}'
AS '[Measures].[Wartosc]' ,
CONDITION = TRUE,
DISABLED = FALSE,
DESCRIPTION ='Nazwa',
CALCULATION_PASS_NUMBER = 1,
CALCULATION_PASS_DEPTH = 1,
SOLVE_ORDER = 0,
FORMAT_STRING = '0,00',
FORE_COLOR =0, BACK_COLOR = 2222222
SELECT [Time].[Year].Members ON COLUMNS,
[Towar_calosc].[Nazwa Kategorii].Members ON ROWS
FROM Zyski_s
WHERE [Measures].[Ilosc]

Tabela 6.123. Skutek wykonania zapytania wybierajcego po zdefiniowaniu oblicze dla wszystkich
komrek kostki
All

Calendar 2001

Calendar 2002

Calendar 2003

Calendar 2004

All

92,984

19,041

36,921

31,951

5,072

Akcesoria

7,765

2,395

2,579

2,473

318

Biurowe

(null)

(null)

(null)

(null)

(null)

...

...

...

...

...

Zegary

5,856

2,386

1,153

2,317

(null)

Unknown

(null)

(null)

(null)

(null)

(null)

Pomimo przedstawienia w tym rozdziale tak duego zestawu przykadw mam poczucie
niedosytu, e mona byo zamieci ich jeszcze wicej. Jednak zawsze kiedy trzeba
zakoczy, a problematyka zapyta MDX wydaje si nie mie koca. Wynika to z faktu,
e liczba potencjalnych rodzajw analiz, ktrych moe sobie zayczy stopie zarzdczy
naszej firmy, jest ogromna. Dlatego postanowiem ograniczy przykady do wanie
takiego ich zestawu, wierzc, e dostarczam Czytelnikowi niezbdnej wiedzy i umiejtnoci, aby wasnorcznie mg przetransformowa prezentowane zapytania na interesujc
go posta. Mam nadziej, e Czytelnik, ktry doszed do tego miejsca lektury, jest
wiadomy wagi, jak ma poznanie tajnikw tego rozszerzenia SQL. Pomimo duego
dowiadczenia w budowaniu hurtowni oraz pisania zapyta wiem, e skadnia MDX jest
bardzo trudna, ale nie powinno to zniechca adeptw przetwarzania analitycznego.
Mog rwnie stwierdzi, e jzyk ten cay czas mnie zaskakuje. Zwaszcza wtedy,
kiedy poszukuj rozwiza ciekawych i zoonych problemw praktycznych, okazuje
si, e MDX dostarcza finezyjnych narzdzi do ich osignicia. Poniewa rozwj
przetwarzania analitycznego nabiera coraz wikszego tempa, naley liczy si z tym,
e moliwoci dzisiaj przedstawione w tym rozdziale wkrtce znacznie si poszerz.

316

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rozdzia 7.

Raportowanie
Zastosowanie MS Excel do tworzenia
raportw dla hurtowni danych
W zasadzie omwione zostay wszystkie metody i elementy pozwalajce na prowadzenie bardzo zoonych analiz. Jednak sposb prezentacji wynikw moe budzi
wiele wtpliwoci, zwaszcza w przypadku oblicze prowadzonych dla struktur wielowymiarowych, gdy posta wymiarw jest skomplikowana, hierarchiczna. Nie wszyscy odbiorcy s obdarzeni a tak wielk wyobrani, jak postulowa Stefan Banach:
Dobry matematyk potrafi dostrzega fakty, matematyk wybitny analogie midzy
faktami, za matematyk genialny analogie midzy analogiami. Mona by zatem
stwierdzi, e wybitnemu matematykowi nie s w ogle potrzebne hurtownie, bo i tak
zna ju wszystkie wnioski. Jednak skutki prowadzonych przez nas analiz maj dotrze nie do matematykw, ale do kadry zarzdczej, ktra nie musi mie a tak wybitnych uzdolnie, jakie postulowa Banach. Dlatego wyniki wypadaoby przedstawi
w czytelniejszej postaci. Poniewa wikszo informacji, jakie odbieramy z otoczenia, pochodzi z wrae wizualnych, najlepsz postaci wydaje si forma graficzna
wykres. W pierwszym odruchu signiemy do powszechnie znanego Excela. Ten intuicyjny wybr nie jest wcale mao trafny. Narzdzie to jest bardzo dobrze przystosowane do tej roli, chocia mao doceniane, co absolutnie nie jest uzasadnione. Sprbujmy w zwizku z tym dokona importu przetworzonych w hurtowni danych do
skoroszytu MS Excel. Korzystajc z gwnego menu, sprbujmy utworzy zapytanie
do bazy danych, jak pokazuje rysunek 7.1.
Po wybraniu wskazanej pozycji pojawia si okno dialogowe z panelem o trzech zakadkach (rysunek 7.2). Pierwsza z nich pozwala okreli istniejce lub zdefiniowa
nowe rdo danych, ktrym moe by baza danych bd plik tekstowy. Druga umoliwia zdefiniowanie zapytania do rda relacyjnego. Trzecia, najbardziej nas interesujca, pozwala wybra lub utworzy rdo w postaci przetworzonej hurtowni danych
MS Business Intelligence. Przy braku zdefiniowanych dotd rde decydujemy si
na utworzenie nowego.

318

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.1.
Definiowanie
zewntrznego rda
danych dla MS Excel

Rysunek 7.2.
Definiowanie
hurtowni danych jako
zewntrznego rda
danych dla MS Excel

Poniewa hurtownie danych mogy by tworzone we wczeniejszych realizacjach MS


SQL Serwer, a prawdziwa rewolucja koncepcji odbya si podczas przejcia midzy
wersjami 2000 i 2005, decyzja dotyczca konkretnego typu sterownika jest istotna
(rysunek 7.3). Wersja o numerze 10 odpowiada MS SQL 2008, o numerze 9 MS SQL
2005 i tak dalej wstecz. Ze wzgldu na to, e hurtownia bya realizowana w najnowszej wersji serwera, wybierzmy najnowszy sterownik.
Rysunek 7.3.
Definiowanie
poczenia wybr
typu hurtowni danych

Kolejny krok to zdefiniowanie komputera (serwera), na ktrym znajduje si hurtownia danych (rysunek 7.4). Tak jak wszdzie, moliwe jest jawne wskazanie nazwy lub IP.
W przypadku czenia si z komputerem lokalnym mona uy nazwy (local) albo symbolu . (kropka). Alternatywnie moliwe jest wskazanie pliku zawierajcego przetworzon
wielowymiarow kostk. Poniewa autoryzacja do hurtowni danych jest dziedziczona po
systemie operacyjnym, nie podaje si nazwy uytkownika oraz jego hasa.
Poczenie z komputerem powoduje wykrycie wszystkich utworzonych na nim hurtowni danych (rysunek 7.5). Wybr waciwej aplikacji Business Intelligence koczy
proces definiowania poczenia z hurtowni.

Rozdzia 7. Raportowanie

319

Rysunek 7.4.
Definiowanie
poczenia wybr
serwera hurtowni
danych

Rysunek 7.5.
Definiowanie
poczenia wybr
hurtowni danych

Zakoczenie definicji poczenia powoduje odczytanie dla wybranej hurtowni wszystkich


zdefiniowanych i przetworzonych w niej kostek. Tworz one list, z ktrej pobieramy
interesujcy nas obiekt (rysunek 7.6).
Rysunek 7.6.
Wybr kostki dla
zdefiniowanego
poczenia
z hurtowni danych

Zakoczenie definicji rda danych powoduje, e bdzie ono dostpne pod wskazan
nazw dla innych skoroszytw Excela. Zatwierdzenie wyboru spowoduje przeniesienie
akcji do kreatora tabel i wykresw przestawnych (rysunek 7.7). Domylnym stanem jest
sugestia utworzenia tego typu obiektu w biecym skoroszycie, poczwszy od pierwszej jego komrki. Moliwe jest rwnie przeniesienie akcji do nowego skoroszytu.

320

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.7.
Podstawowe
definicje dla kreatora
tabel i wykresw
przestawnych

Przed zakoczeniem pracy warto ustali wstpny ukad pl tabeli przestawnej, wybierajc odpowiedni przycisk. W oknie dialogowym, przedstawionym na rysunku 7.8,
mamy do dyspozycji list wszystkich atrybutw wymiarw, wszystkie zdefiniowane
w nich hierarchie oraz miary cznie z obliczanymi przyciski po prawej stronie okna.
Wybrane metod przecignij i upu elementy wymiarw mog stanowi definicje
kolumn, wierszy i stron. Natomiast miary bd definioway pole danych. W prezentowanym przykadzie zarwno wiersze, jak i kolumny definiowane s przez hierarchie dwch wymiarw: Kategorie i Czas. Zmiany ukadu moemy wprowadzi rwnie po zakoczeniu definicji.
Rysunek 7.8.
Definicja ukadu
tabeli przestawnej

Moliwe jest rwnie zdefiniowanie opcji wywietlania (rysunek 7.9), z ktrych najwaniejsze wydaje si obliczanie sum cakowitych dla kolumn i wierszy (domylnie
zaznaczone). Moliwe jest take okrelenie symboli wywietlanych dla pustych komrek oraz takich, ktre zawieraj bdnie wyznaczone dane. Istotna jest te moliwo wymuszenia odwieania przy kadym otwarciu pliku i wymuszenie cyklicznego powtarzania tej czynnoci co okrelony odstp czasu.
Przykad tabeli przestawnej zgodnej z omawianymi krokami jej tworzenia przedstawia rysunek 7.10. Warto zauway, e dostpne s wszystkie elementy definicji kostki,
ktre pozwalaj na modyfikowanie i reorganizacj tabeli ju po jej utworzeniu. Widoczny w tym samym oknie dialogowym przycisk z ikon pozwala na wymuszenie
natychmiastowego odwieenia danych. Rozwinicie pola definiujcego kolumny lub
wiersze pozwala na zaznaczenie wybranych elementw potomnych, ktre maj zosta
pokazane w tabeli. W przykadzie widoczna jest definicja hierarchii okrelajcej czas.

Rozdzia 7. Raportowanie

321

Rysunek 7.9.
Zaawansowane opcje
tabeli przestawnej

Rysunek 7.10.
Przykadowy widok
tabeli przestawnej

Zaznaczenie wszystkich poziomw potomnych spowoduje wywietlenie penej


struktury hierarchii, co wida na rysunku 7.11. Wielopoziomowa struktura prezentowania
hierarchii jest jeszcze czytelniejsza ni posta, ktr oferuje wbudowany po stronie
hurtowni Browser. Pokazano ponadto, e definicja kolumn rwnie zawiera hierarchi.
Tym razem jest ona dwupoziomowa i okrela kategorie oraz wszystkie nalece do
niej towary.

Rysunek 7.11. Widok tabeli przestawnej po czciowym rozwiniciu hierarchii

Tabela przestawna moe by atwo przeksztacona na posta wykresu za pomoc przycisku kreatora znajdujcego si w grnej czci okna dialogowego zawierajcego definicje tabeli. Pierwotna posta graficzna moe nie by wystarczajco atrakcyjna, dlatego

322

Hurtownie danych. Od przetwarzania analitycznego do raportowania

moliwe jest zdefiniowanie innej, odpowiedniejszej formy. W wikszoci przypadkw


dotyczcych hurtowni bdzie to wykres kolumnowy trjwymiarowy. Ten i inne warianty
postaci graficznej przedstawia okno kreatora wykresw pokazane na rysunku 7.12.
Rysunek 7.12.
Kreator wykresw
przestawnych
wybr sposobu
prezentacji

Dla kadego z typw prezentacji moliwe jest ustawienie wielu opcji przez wybranie zakadki w panelu okna (rysunek 7.13) albo wykonanie kolejnych krokw, tak jak sugeruje
kreator. Opcje te dotycz tytuw przypisywanych poszczeglnym elementom wykresu,
definiowania osi (zakresy, etykiety), ustanowienia siatki podziaowej, definicji legendy,
sposobu etykietowania danych oraz utworzenia wewntrznej tabelki danych.
Rysunek 7.13.
Kreator wykresw
przestawnych
opcje wykresu

Podobnie jak w przypadku tabeli, ostatnim krokiem jest ustalenie, gdzie wykres ma
by umiejscowiony czy jako oddzielny arkusz, czy jako element istniejcego arkusza
(domylnie biecego). Przyjte w przykadzie definicje prowadz do uzyskania wykresu kolumnowego o postaci przedstawionej na rysunku 7.14. Podobnie jak w przypadku tabeli, po utworzeniu wykresu istnieje moliwo redefinicji jego elementw
za pomoc metody przecignij i upu albo przez zmian waciwoci tych elementw. Moliwe jest rwnie filtrowanie danych definiujcych wymiary oraz zmiana miary definiujcej wykrelan warto.
Zamiast najpierw definiowa zewntrzne rdo danych, jak pokazano na rysunku 7.1,
moemy skorzysta bezporednio z wywoania kreatora raportu lub wykresu przestawnego rysunek 7.15.

Rozdzia 7. Raportowanie

323

Rysunek 7.14.
Wykres przestawny
dla wybranych danych

Rysunek 7.15.
Wywoanie kreatora
raportu lub wykresu
przestawnego

Podstawowe okno dialogowe pozwala na zdefiniowanie rodzaju rda danych, ktrym


moe by: skoroszyt Excela, zestaw danych zapisanych w wielu zakadkach Excela.
Jeli w biecym pliku zdefiniowano ju tabel lub wykres przestawny, moemy uy
jednego z tych rde. Tutaj interesuje nas pozycja zaznaczona na rysunku 7.16
zewntrzna baza danych, ktr oprcz rde relacyjnych moe by hurtownia danych. Druga decyzja dotyczy postaci prezentacji danych moe to by tabela lub
wykres przestawny.
Rysunek 7.16.
Definicja rodzaju
rda oraz obiektu
wynikowego
w kreatorze raportu
lub wykresu
przestawnego

324

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Jeli w pliku zostao ju zdefiniowane rdo danych, moe by ono pobrane, a w kadym
przypadku moemy utworzy nowe. Od tego momentu powtarzane s opisane wczeniej kroki, ktre pokazano na rysunkach, rozpoczynajc od 7.2. Prezentowanie wynikw w takiej postaci pozwoli odbiorcy uzyska oczekiwan informacj w przystpnej formie i nie bdzie go zmusza do opanowania o wiele bardziej skomplikowanego
narzdzia, jakim jest Business Intelligence. Ponadto udzielenie mao dowiadczonemu odbiorcy bezporedniego dostpu do definicji struktur wielowymiarowych na
pewno szybko zakoczy si jej przynajmniej czciowym zniszczeniem. Jeli Czytelnik nie mia do czynienia z pomysowoci uytkownikw w tej materii, to niech zrealizuje najprostsz baz i da odbiorcy dostp do struktury i kodu. W zakadach mona
obstawia nie to, czy zostanie ona zniszczona, ale ile godzin bdzie w stanie funkcjonowa poprawnie.

Zastosowanie jzykw wyszego rzdu


do tworzenia raportw
Prezentacja danych zawartych w hurtowni w postaci wykresu lub tabeli przestawnej
Excela jest o tyle atrakcyjna, e jej utworzenie nie wymaga duego nakadu pracy.
Ponadto posugiwanie si tak form przez odbiorc nie powinno by kopotliwe, poniewa wiele osb zna podstawowe funkcjonalnoci tej aplikacji, a nauczenie si obsugi wykresw przez absolutnego laika te nie powinno sprawi duego kopotu.
Wad tego rozwizania jest to, e hurtownia musi by widoczna dla Excela, tak aby
moliwe byo poczenie, co nie zawsze jest wskazane. Dlatego wart rozwaenia alternatyw jest opracowanie w jzyku wyszego rzdu aplikacji pozwalajcej na tak
obsug. Aby to zilustrowa, zdecydowano si na napisanie prostego programu w jzyku C# na platform .NET.
Poniewa bdziemy chcieli dokona w aplikacji wizualizacji danych, wskazane jest pobranie kontrolki, ktra zapewni t funkcjonalno. W tym celu w kontenerze Toolbox z menu
podrcznego (lewy przycisk myszy) naley wybra pozycj Choose Item (rysunek 7.17).
Rysunek 7.17.
Dodawanie kontrolki
do panelu
narzdziowego
Toolbox

Rozdzia 7. Raportowanie

325

Oczywicie moliwoci jest wiele, jednak ze wzgldu na dobre dowiadczenia z MS


Excel sprbujmy wykorzysta kontrolk pochodzc wanie z tego programu. W tym
celu w wywietlonym oknie, na zakadce COM Components, naley zaznaczy odpowiedni pozycj (rysunek 7.18).
Rysunek 7.18.
Wybr komponentu
wykres MS Office

Po zatwierdzeniu wyboru komponent zostanie dodany do wyjciowej grupy w panelu


narzdzi (rysunek 7.19). Naley zaznaczy, e w przypadku wyboru innej realizacji
tej kontrolki (starsze lub nowsze wersje Office) wygld ikony moe si nieco rni,
a w opisie pojawi si inny numer reprezentujcy wewntrzn numeracj wersji.
Rysunek 7.19.
Wygld panelu
Toolbox po dodaniu
kontrolki wykres
MS Office

Zdefiniujmy teraz wizualn posta gwnej formatki, przecigajc z panelu Toolbox


nastpujce komponenty:
przycisk polecenia (Button), ktrego kliknicie bdzie powodowao pobranie

danych i ich wizualizacj w postaci tabelarycznej i wykresu;


pole tekstowe (TextBox), ktre bdzie umoliwiao wprowadzenie przetwarzanego

pniej zapytania MDX naley pamita o ustawieniu we waciwociach


moliwoci zapisu wielolinijkowego (Multiline = True);
panel wielozakadkowy (TabControl);
na pierwszej zakadce panelu naley umieci kontrolk pozwalajc

na tabelaryczn reprezentacj danych DataGridView.

326

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Gdy te czynnoci zostan wykonane, formatka powinna mie posta jak na rysunku 7.20.

Rysunek 7.20. Wygld gwnego formularza aplikacji przedstawiajcej dane z hurtowni widok
zakadki z prezentacj tabelaryczn

W drugiej zakadce panelu naley umieci zarejestrowan przed chwil kontrolk, odpowiedzialn za wizualizacj pobranych z hurtowni danych Microsoft Office Chart 11.0.
Widok formatki aplikacji z aktywn drug zakadk panelu przedstawia rysunek 7.21.
Rysunek 7.21.
Wygld gwnego
formularza aplikacji
prezentujcej dane
z hurtowni widok
zakadki z wykresem
trjwymiarowym

Pozostaje teraz opracowanie kodu aplikacji o nazwie mdx w jzyku C#. Kod ten zamieszczono poniej. Aby zapewni przejrzysto wywodu, podzielono go na czci opisami, odnoszcymi si do poprzedzajcego je fragmentu. Ze wzgldu na tak organizacj
zrezygnowano z podpisywania czci skadowych, jak to miao miejsce we wczeniejszych rozdziaach.

Rozdzia 7. Raportowanie
using
using
using
using

327

System;
System.Data;
System.Windows.Forms;
Microsoft.AnalysisServices.AdomdClient;

Konieczne jest zastosowanie czterech przestrzeni nazw: System, jako gwnej klasy wykorzystywanej przez kad aplikacj, System.Data, umoliwiajcej definiowanie obiektw
zwizanych z dostpem do danych i ich prezentacj, System.Windows.Forms, pozwalajcej na definiowanie i oprogramowanie standardowych kontrolek aplikacji, oraz
Microsoft.AnalysisServices.AdomdClient, pozwalajcej na zdefiniowanie rdowej
bazy danych (zarwno relacyjnej, jak i hurtowni danych).
namespace mdx
{
public partial class Form1:Form
{
public Form1()
{
InitializeComponent();
}

Pocztkiem definicji przestrzeni nazw mdx jest klasa formularza Form1, ktra dziedziczy po interfejsie Form. Jej implementacja zawiera wygenerowan podczas wizualnego tworzenia formatki metod InitializeComponent, ktra jest programistycznym
odpowiednikiem kontrolek utworzonych metod przecignij i upu.
private void button1_Click(object sender, EventArgs e)
{
AdomdConnection conn = new AdomdConnection();
conn.ConnectionString = Provider=MSOLAP.4;Data Source=.;Initial
Catalog=hurtownia;
try
{
string wiersz;
int[] values;
values = new int[20];
conn.Open();
AdomdCommand cmd = new AdomdCommand();
cmd.Connection = conn;
cmd.CommandText = textBox1.Text;
/*SELECT NONEMPTY([Towar_calosc].[Nazwa Kategorii].members) ON COLUMNS,
NONEMPTY([Klienci].[Wojewdztwo].members) ON ROWS
FROM [Zyski] WHERE Measures.Zysk */
AdomdDataAdapter da = new AdomdDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];

Gwnym elementem kodu, utworzonym rcznie, jest metoda button1_Click, obsugujca zdarzenie OnClick dla przycisku polecenia. Pierwszym elementem jest zdefiniowanie zmiennej conn jako instancji klasy AdomdConnection, ktrej zadaniem bdzie
zrealizowanie poczenia oraz zdefiniowanie waciwoci ConnectionString opisujcej jego szczegy: dostawc usugi, nazw komputera (kropka oznacza biecy)
i nazw hurtowni danych. W bloku try po zadeklarowaniu dwch zmiennych znakowej wiersz i wektora liczb cakowitych values nastpuje zainicjowanie drugiej

328

Hurtownie danych. Od przetwarzania analitycznego do raportowania

z nich. Nastpnie zostaje otwarte poczenie na skutek zastosowania metody Open()


obiektu conn. Zmienna cmd jest instancj obiektu AdomdCommand, pozwalajcego
na wykonywanie polece po stronie serwera, dla ktrego zdefiniowano poczenie
Connection oraz tekst polecenia CommandText. Polecenie stanowi zawarto pola
tekstowego. W tekcie kodu jako komentarz zawarto przykadowe zapytanie MDX, ktre
bdzie pniej pokazywane w opisie skutkw dziaania aplikacji. Oczywicie aplikacja pozwala na wykonanie dowolnego innego zapytania tego jzyka. Nastpnie tworzone
s instancje obiektw: AdomdDataAdapter, stanowicego warstw poredni przechowujc pobrane dane, DataSet, opisujcego zestaw danych w postaci interpretowalnej
w rodowisku .NET. DataSet jest wypeniany danymi zawartymi w AdomdDataAdapter
dziki zastosowaniu metody Fill. Obiekt Tables[0] stanowi bezporednie rdo danych DataSource dla kontrolki dataGridView1. W tym miejscu dane zostan ju wywietlone na formatce w postaci tabelarycznej.
axChartSpace1.Clear();
axChartSpace1.Charts.Add(0);
axChartSpace1.HasChartSpaceTitle = true;
axChartSpace1.ChartSpaceTitle.Caption = MDX ;
axChartSpace1.Charts[0].Type = OWC11.ChartChartTypeEnum.chChartTypeColumn3D;

Fragment kodu obsugujcy wizualizacje danych na podstawie zawartoci tabeli rozpoczyna wyczyszczenie zawartoci kontrolki axChartSpace1. Nie jest to operacja konieczna przy pierwszym wykonaniu zapytania, ale kade nastpne spowodowaoby
dodanie do niej nowych elementw, a nie utworzenie ich na podstawie nowych danych.
Nastpnie dodawany jest do kontrolki obiekt reprezentujcy konkretny wykres. Kolejny fragment zawiera ustalenie podstawowych waciwoci: czy zawiera tytu, napis
bdcy tytuem oraz typ. W ostatnim przypadku skorzystano z predefiniowanych
wartoci waciwoci obiektu OWC11, zawartych w ChartChartTypeEnum. Spowodowao to, e wykres bdzie kolumnowy, trjwymiarowy chChartTypeColumn3D.
for (int j = 0; j < dataGridView1.Rows.Count - 1; j++)
{
axChartSpace1.Charts[0].SeriesCollection.Add(j);
wiersz = ;
for (int i = 1; i < dataGridView1.Columns.Count; i++)
{
wiersz = wiersz + dataGridView1.Rows[j].Cells[i].Value + ,;
}
axChartSpace1.Charts[0].SeriesCollection[j].SetData(
OWC11.ChartDimensionsEnum.chDimValues,
(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, wiersz);
}

Kolejny etap stanowi przegldanie zawartoci kontrolki dataGridView1 wedug wierszy. Poniewa indeksowanie tabel rozpoczyna si od 0, inkrementacja ptli rozpoczyna
si od tej wartoci, a koczy na liczbie wierszy pomniejszonej o jeden: Rows.Count - 1.
Dla kadego wiersza dodawana jest kolejna seria danych wykresu Charts[0].SeriesCollection.Add(j), po czym czyszczona jest zawarto zmiennej wiersz. Kolejna ptla,
tym razem wedug wszystkich kolumn, powoduje dopisanie do zmiennej wiersz wartoci odczytanej komrki Rows[j].Cells[i].Value oraz separatora, ktrym jest przecinek. Po
zakoczeniu ptli zdefiniowana zmienna wiersz zawiera zestaw danych tej serii SeriesCollection[j].SetData.

Rozdzia 7. Raportowanie

329

wiersz = ;
for (int i = 0; i < dataGridView1.Columns.Count - 1; i++)
{
wiersz = wiersz + dataGridView1.Columns[i].Name + ,;
}
wiersz = wiersz.Substring(1, wiersz.Length - 2);
axChartSpace1.Charts[0].SeriesCollection[0].SetData(
OWC11.ChartDimensionsEnum.chDimCategories,
(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, wiersz);

Nastpny fragment opisuje ustalanie etykiet kolumn OWC11.ChartDimensionsEnum.ch


DimCategories. Ponownie nastpuje czyszczenie zmiennej wiersz. W ptli wedug wszystkich kolumn odczytywane s nazwy kolumn i analogicznie dopisywane do tej zmiennej.
Poza ptl usuwany jest ze zmiennej kocowy znak przecinka, pozostaa cz stanowi zawarto serii o indeksie 0 SeriesCollection[0].SetData.
for (int j = 0; j < dataGridView1.Rows.Count - 1; j++)
{
wiersz = dataGridView1.Rows[j].Cells[0].Value + ,;
axChartSpace1.Charts[0].SeriesCollection[j].SetData(
OWC11.ChartDimensionsEnum.chDimSeriesNames,
(int)OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, wiersz);
}
}

Nastpnie ustalane s etykiety dla kadego z wierszy OWC11.ChartDimensionsEnum.


chDimSeriesNames. Przegldamy ponownie tabel dataGridView1 wedug wierszy i pobieramy zawarto komrki o indeksie 0, ktra zawiera waciw warto. Na tym
koczy si definicja elementw wykresu oraz blok try.
catch (Exception ex)
{MessageBox.Show(ex.Message);}
finally {conn.Dispose();}
}
}
}

Pozostaje tylko obsuenie wyjtkw przez wywietlenie okna MessageBox, ktrego


zawartoci jest komunikat o pojawiajcym si bdzie. W sekcji finally, ktra wykonuje
si zawsze, bez wzgldu na to, czy pojawi si wyjtek, czy nie, nastpuje zwolnienie
zasobw zwizanych ze zrealizowanym poczeniem. Widok formularza po wykonaniu przykadowego zapytania MDX z aktywn zakadk prezentujc posta tabelaryczn danych przedstawia rysunek 7.22.
Przeczenie na drug z zakadek powoduje wywietlenie odpowiadajcego pobranym
danym kolumnowego wykresu trjwymiarowego (rysunek 7.23). Oczywicie moliwe jest opracowanie bardziej zoonego kodu, ktry umoliwi definiowanie wikszej
liczby waciwoci czy te lepsz prezentacj nazw kolumn w stanie domylnym
s to kwalifikowane nazwy atrybutw hierarchii, ktre mona by zastpi nazwami
skrconymi. Moliwe jest dodanie legendy lub innych elementw pomocniczych, ale
gwna idea przetwarzania pozostanie bez zmian.

330

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.22.
Wygld formularza
aplikacji po
przetworzeniu
zapytania MDX
widok zakadki
z prezentacj
tabelaryczn

Rysunek 7.23.
Wygld formularza
aplikacji po
przetworzeniu
zapytania MDX
widok zakadki
z wykresem
trjwymiarowym

Oczywicie omawiana kontrolka OWC11 nie jest jedyn moliwoci prezentowania


wykresw. Czytelnik na pewno znajdzie dla niej co najmniej kilka darmowych alternatyw. Jednak miem twierdzi, e w przypadku kadej z nich sposb postpowania bdzie
bardzo podobny. Na analogicznych zasadach moemy utworzy seri formularzy,
zawierajcych statycznie zdefiniowane zapytania, z ewentualnie dostpnymi opcjami
filtrowania. Taka aplikacja moe by prost metod dostpu do wynikw analiz dla
pracownikw zarzdzajcych firm. Osoby, ktre chocia pobienie znaj rodowisko
.NET, stwierdz, e wedug takich samych zasad mona atwo wygenerowa aplikacje Web, korzystajc z ASP .NET.

Rozdzia 7. Raportowanie

331

Zastosowanie Reporting Services


podstawy
Ostatni i chyba najbardziej atrakcyjn zarwno dla programisty, jak i dla kocowego
odbiorcy form prezentacji wynikw jest zastosowanie zawartego w Business Intelligence narzdzia Reporting Services. Aplikacje raportujc tworzymy na takich samych
zasadach jak w przypadku Integration Services i Analysis Services (rysunek 7.24).
Pamita tylko naley o waciwym ustawieniu cieki nowo tworzonego projektu.
Rysunek 7.24.
Tworzenie aplikacji
raportujcej
w Reporting Services

Pierwszym krokiem budowy aplikacji jest jak zwykle zdefiniowanie rda danych, ktre
moemy wykona z poziomu panelu Solution Explorer, wybierajc odpowiedni pozycj menu podrcznego (rysunek 7.25). Poniewa definicja acucha poczeniowego
jest zgodna z tym, co pokazano na rysunku 4.11, Integration Services, oraz 5.6, Analysis
Services, zostanie ona w tym rozdziale pominita.
Rysunek 7.25.
Tworzenie rda
danych aplikacji
raportujcej
w Reporting Services

Na rysunku 7.26 pokazano jedynie ostateczny efekt definiowania rda danych w aplikacji raportujcej, dla ktrego podano nazw, typ rda danych oraz acuch poczeniowy uzyskany na skutek kliknicia przycisku Edit i postpowania zgodnego z kolejnymi krokami kreatora. Pomimo tego, e ksika dotyczy zagadnie hurtowni
danych, pierwsze przykady bd powicone raportowaniu dla struktur relacyjnych,
co wida przy analizie danych wpisanych w prezentowanym oknie dialogowym. Powinno to uatwi Czytelnikowi pierwszy kontakt z omawianym narzdziem.

332

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.26.
Tworzenie poczenia
ze rdem danych
po zdefiniowaniu
acucha
poczeniowego

Kolejny krok stanowi utworzenie nowego raportu. Tak jak poprzednio, moemy tego dokona z menu kontekstowego w panelu Solution Explorer. Uruchomienie kreatora
powoduje konieczno wybrania rda danych, moliwe jest take zdefiniowanie
nowego obiektu tego typu. Kroki te s analogiczne do przedstawionych podczas tworzenia elementw hurtowni danych. Pierwszym oryginalnym oknem jest okno definiowania rdowego zapytania (rysunek 7.27).
Rysunek 7.27.
Tworzenie
rdowego zapytania
dla raportu

W okienku tym moliwe jest rczne wpisanie treci zapytania z wykorzystaniem dla bazy
relacyjnej skadni SQL, a dla hurtowni SQL MDX. Jednak warto zapozna si z moliwociami oferowanymi przez konstruktor zapyta Query Builder (rysunek 7.28).
Domylny widok tego narzdzia pozwala na wprowadzenie zapytania w postaci tekstowej. Jedyn rnic w stosunku do omawianego poprzednio okna dialogowego jest to,
e moliwe jest jego wywietlenie (ikona z wykrzyknikiem) i sprawdzenie zgodnoci
otrzymanych wynikw z oczekiwanymi. Wyczenie opcji Edit As Text (lewy grny rg
okna) powoduje wczenie moliwoci graficznego budowania zapytania (rysunek 7.29).

Rozdzia 7. Raportowanie

333

Rysunek 7.28.
Tworzenie
rdowego zapytania
dla raportu Query
Builder w widoku
Edit As Tekst

Rysunek 7.29.
Query Builder
tworzenie rdowego
zapytania dla raportu;
widok dla wyczonej
opcji Edit As Text

Po wybraniu jednej albo wielu tabel lub perspektyw oraz zrealizowaniu waciwych
pocze midzy nimi (o ile nie zdefiniowano ich na poziomie struktury relacyjnej)
wystarczy zaznaczy tylko waciwe pola (rysunek 7.30). Oczywicie moliwe jest
budowanie wyrae, stosowanie funkcji, w tym agregujcych oraz wszystkich poprawnych skadniowo elementw zapyta wybierajcych SQL.

334

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.30.
Query Builder
definicja prostego
zapytania

W przykadzie przedstawiono realizacj prostego zapytania, ktre ma wywietla obie


kolumny z tabeli Dzialy. Jak wida, poza postaci wizualn dostpny jest rwnie
tekst zapytania oraz wygenerowany za jego pomoc zestaw rekordw. Po zatwierdzeniu
utworzonej definicji przepisywana jest jej posta tekstowa do wyjciowego okienka
dialogowego (rysunek 7.31).
Rysunek 7.31.
Tworzenie
rdowego zapytania
dla raportu po
ukoczeniu jego
definicji w Query
Builder

Kolejny etap stanowi definiowanie sposobu wizualnej prezentacji wynikw. Do wyboru mamy posta tabelaryczn, w ktrej nagwkami s tylko pierwsze wiersze kolumn, oraz macierz, gdzie nagwki mog pojawi si jako opis zarwno kolumn, jak
i wierszy (rysunek 7.32).

Rozdzia 7. Raportowanie

335

Rysunek 7.32. Wybr graficznej postaci raportu tabeli lub macierzy

Nastpnie naley okreli, ktre z wybranych pl bd stanowi elementy wywietlane


w odpowiednich sekcjach raportu. Do wyboru mamy: stron, grup i sekcj szczegw
(rysunek 7.33). W tak prostym przykadzie oba pola mog si znale tylko w sekcji
szczegw. Jednak ze wzgldu na to, e pole IdDzialu jest automatycznie inkrementowanym polem klucza, zadecydowano, e nie bdzie ono wywietlane. Naley zwrci uwag na ty pasek, wskazujcy miejsce, w ktrym bd widoczne pola po
przetworzeniu raportu.
Rysunek 7.33.
Definiowanie
zawartoci
poszczeglnych
sekcji raportu

Pozostaje wybranie szaty graficznej raportu spord domylnie dostpnych szeciu


wariantw (rysunek 7.34). Wybr ten jest odpowiednikiem wskazania kaskadowego
arkusza stylw *.css w przypadku tworzenia strony Web i moe by zmieniany ju po
zakoczeniu pracy kreatora. Moliwe jest rwnie zmienianie kolorystyki tylko niektrych elementw i tworzenie w ten sposb nowych szablonw szaty graficznej.

336

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.34.
Definiowanie szaty
graficznej raportu

Ostatni krok pracy kreatora stanowi okno dialogowe zawierajce zbiorcz informacj
o generowanym obiekcie (rysunek 7.35). Moliwa jest w nim jedynie zmiana nazwy
raportu. Warto domylna tej waciwoci jest dziedziczona po nazwie nadrzdnej
tabeli z definicji zapytania. Zakoczenie pracy spowoduje bezporednie przejcie do
edycji lub podgldu wygenerowanego obiektu w zalenoci od tego, czy zostanie zaznaczona opcja Preview Report.
Rysunek 7.35.
Zbiorcza definicja
raportu

Stan domylny to widok edytora, w ktrym mona prowadzi dalsze prace nad popraw wygldu raportu (rysunek 7.36). Moliwe jest dodawanie pl do waciwych
sekcji lub ich usuwanie, definiowanie nagwka lub stopki oraz wiele innych czynnoci, ktre zostan pokazane w kolejnych przykadach. Warto zwrci uwag na panel
Report Data, ktry wywietla dane rdowe dla raportu mog by one wykorzystywane podczas edycji na zasadzie przecignij i upu.

Rozdzia 7. Raportowanie

337

Rysunek 7.36. Wygld raportu po zakoczeniu pracy kreatora zakadka projektowania

Przejcie do zakadki Preview pozwala na obejrzenie rzeczywistej postaci raportu (rysunek 7.37). Naley zwrci uwag, e jest to posta na razie dostpna tylko z wntrza narzdzia Reporting Services. Druga wana uwaga dotyczy panelu Report Data,
ktry w tym widoku nie jest aktywny.
Rysunek 7.37.
Wygld raportu
po zakoczeniu pracy
kreatora zakadka
podgldu wynikw

Kolejnym etapem jest okrelenie waciwoci raportu, definiujcych lokalizacj, do


ktrej ma nastpi przetworzenie danych, a jednoczenie miejsce, z ktrego bdzie on
pobierany przez serwer WWW w celu prezentacji wynikw w sieci. Dostp do tego
narzdzia jest moliwy z gwnego menu, z pozycji Project (rysunek 7.38).
Rysunek 7.38.
Definiowanie
waciwoci raportu

Konieczne jest podanie wartoci czterech parametrw, ktre okrelaj:


OverwriteDataSources czy nowe dane maj nadpisywa wszystkie

poprzednio pobrane (domylnie False);


TargetDataSourceFolder folder wirtualnego serwera WWW, w ktrym

pobrane dane maj by skadowane dla potrzeb aplikacji;


TargetReportFolder folder, w ktrym bdzie skadowana skompilowana

posta raportu, wywietlana przez serwer WWW;


TargetServerURL nazw serwera WWW, ktry zosta skonfigurowany

dla Reporting Services.

338

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Ponadto mona ustali waciwo StartItem, ktra okrela nazw raportu, od ktrego bdzie uruchamiana aplikacja raportujca. W fazie projektowania ustalenie tej wartoci nie
jest konieczne. W stanie domylnym warto tego parametru jest rwnie pusta, co oznacza, e elementem startowym jest raport biecy ten, ktry aktualnie projektujemy.
Rysunek 7.39 pokazuje wartoci omawianych parametrw, ustawione w realizowanym
przykadzie. O ile drugi i trzeci wpis okrelajcy pooenia raportw i danych moe stanowi dowolny napis (w przykadzie zastosowano nazwy sugerowane przez producenta),
o tyle ostatni musi mie posta rzeczywistego adresu WWW. Parametry raportu mog
by niezalenie ustawione dla trzech stanw: ledzenia kodu (Debug), lokalnego ledzenia (DebugLocal) oraz dla przetwarzania (Release) (rysunek 7.40). Pozostae opcje
stanowi odwoania lub kombinacje poprzednich: Active okrela biecy stan, All
Configurations powoduje, e dla wszystkich stanw ustalany jest jeden zestaw parametrw, a Multiple pozwala na definiowanie wszystkich stanw jednoczenie.
Rysunek 7.39.
Definiowanie
waciwoci raportu
przykadowe dane

Rysunek 7.40.
Definiowanie
waciwoci raportu
zakres, dla ktrego
zostan ustanowione

Po tym kroku sensowne jest przetworzenie projektu (rysunek 7.41). Opcja Built powoduje jedynie sprawdzenie poprawnoci aplikacji oraz jej kompilacj. Natomiast
Deploy spowoduje umieszczenie skompilowanego projektu i skojarzonych z nim danych w lokalizacjach wskazanych we waciwociach raportu.

Rozdzia 7. Raportowanie

339

Rysunek 7.41.
Przetwarzanie
raportu

Konfigurowanie serwera http


dla potrzeb Reporting Services
Niestety, wykonanie tych czynnoci nie pozwala jeszcze na ogldanie raportw poza
narzdziem Reporting Services. Konieczne jest wykonanie konfiguracji serwera WWW,
ktry stanowi integraln cz omawianej usugi. Narzdzie konfigurujce jest dostpne z gwnego menu systemu operacyjnego i stanowi cz MS SQL Server 2008
(rysunek 7.42).
Rysunek 7.42.
Konfigurowanie
narzdzia Reporting
Services

Po uruchomieniu konfiguracji pojawia si okno, w ktrym naley wskaza podlegajcy tej czynnoci serwer MS SQL (rysunek 7.43). Moliwe jest rczne wpisanie nazwy
hosta serwera lub pobranie go z listy wykrytych w domenie lub grupie roboczej na
skutek kliknicia przycisku Find. W przypadku instalacji wieloinstancyjnej konieczne
jest jej pobranie z listy. Naley pamita, e podczas instalowania platformy .NET instalowany jest silnik w wersji Express, ktry te bdzie wykrywany.
Gdy zostan wykonane te czynnoci, pojawi si waciwe okno konfiguracyjne (rysunek 7.44), w ktrym wymienione w panelu po lewej stronie pozycje okrelaj kolejne
grupy parametrw podlegajce ustawianiu bd modyfikacji. W pierwszej z nich
przedstawione s podstawowe informacje o instancji SQL Servera, takie jak: nazwa
instancji, jej identyfikator, realizacja oraz wersja. Pokazane s rwnie dane serwera
raportujcego: nazwa bazy danych zawierajcej repozytorium (przy rozpoczciu konfiguracji nie ma wartoci), tryb i stan pracy (uruchomiony, zatrzymany). Przyciski
Start i Stop przeczaj tryb pracy serwera WWW odpowiedzialnego za przetwarzanie
raportw dla sieci. Dla kadej z pozycji dostpne s przyciski Apply (aktywny, jeli
dokonano jakich zmian), pozwalajcy na zatwierdzenie zmienianych wartoci bez
wzgldu na zakadk, ktr w danej chwili obsugujemy, oraz Exit, umoliwiajcy
zakoczenie pracy narzdzia. Dolny panel, Results, jest wykorzystywany dla czci
pozycji narzdzia konfiguracyjnego i z reguy zawiera informacje o bdach konfiguracji, zych wartociach parametrw lub braku wartoci parametrw wymaganych.

340

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.43. Pocztkowe okno konfiguracji Reporting Services

Rysunek 7.44. Okno konfiguracji Reporting Services pierwsza zakadka, podstawowe parametry
instancji serwera

Rozdzia 7. Raportowanie

341

Dla pozycji Service Account naley zdefiniowa tryb autoryzacji (rysunek 7.45). Domylnym stanem jest autoryzacja na poziomie lokalnych zabezpiecze systemu operacyjnego. Moliwe jest rwnie okrelenie pojedynczego konta uytkownika.

Rysunek 7.45. Okno konfiguracji Reporting Services sposb uwierzytelnienia

Zakadka Web Service URL pozwala na zdefiniowanie wirtualnego katalogu przechowujcego pen struktur aplikacji (rysunek 7.46). W przykadzie przyjto nazw
ReportServer, zgodn z ustawieniami waciwoci aplikacji przedstawionych na rysunku 7.39. Ponadto ustalane s parametry okrelajce dostp do raportw: adresy IP
definiujce hosta (ALL oznacza moliwo posugiwania si adresem IP, odpowiadajc mu nazw logiczn oraz nazw domenow), numer portu, na ktrym nasuchuje
serwer WWW (w przypadku stosowania konkurencyjnych serwerw do IIS, Apache
naley zmieni warto domyln 80, tak aby unikn konfliktw), numer portu poczenia szyfrowanego oraz sposb certyfikowania (w przykadzie nie ustalono).

Rysunek 7.46. Okno konfiguracji Reporting Services definicje serwera WWW

342

Hurtownie danych. Od przetwarzania analitycznego do raportowania

W dolnej czci okna Web Service URL aktywny staje si adres, ktry umoliwia przetestowanie poprawnoci dziaania serwera. Wybranie go powoduje uruchomienie domylnej przegldarki i wywietlenie na razie pustej zawartoci wirtualnego folderu (rysunek 7.47). Wywietlona zostanie informacja o stosowanej wersji Reporting Services.

Rysunek 7.47. Testowanie serwera WWW w tle okno konfiguracji Reporting Services

Kolejny etap stanowi zdefiniowanie bazy danych zawierajcej repozytorium dla systemu raportujcego (rysunek 7.48). S tu dwa elementy, w ktrych okrelana jest baza
danych oraz tryb uwierzytelnienia do niej. W przypadku rozpoczcia od poziomu
Change Database (Create, jeli jeszcze nie zostaa utworzona) oba kroki zostan wykonane szeregowo.
Pierwsza decyzja ogranicza si do wskazania, czy bdzie tworzona nowa baza danych, czy te zastosujemy ju istniejc (rysunek 7.49). Wskazane jest, aby nie bya
to baza zawierajca ju dane innego rodzaju.
Nastpnie wybierany jest host, na ktrym zosta zainstalowany SQL Server 2008,
oraz tryb uwierzytelnienia do niego (rysunek 7.50). W przykadzie zdecydowano si
na uwierzytelnienie zintegrowane z systemem operacyjnym. Moliwy jest wybr autoryzacji na poziomie serwera. W takim przypadku naley poda nazw uytkownika
MS SQL oraz jego haso. W tym oknie dostpny jest mechanizm testowania poczenia z baz na podstawie ustalonych wczeniej waciwoci.
Pozostaje wybranie istniejcej ju bazy, a w przypadku tworzenia nowej rczne
podanie jej nazwy. Nastpnie ustalamy, z jakiego konta korzysta serwer raportujcy
przy nawizywaniu poczenia. Moliwe jest zastosowanie opcji: Service Credentials
autoryzacja zgodna z wybran w trakcie wskazywania bazy repozytorium, Windows

Rozdzia 7. Raportowanie

343

Rysunek 7.48. Okno konfiguracji Reporting Services definicja bazy zawierajcej repozytorium
Rysunek 7.49.
Okno konfiguracji
Reporting Services
tryb wskazania
bazy zawierajcej
repozytorium

Credentials uwierzytelnienie takie samo jak podczas logowania do systemu, oraz SQL
Credentials autoryzacja zgodna z trybem uwierzytelnienia na serwerze bazy danych.
W ostatnim przypadku konieczne jest zdefiniowanie nazwy uytkownika i hasa. Kolejne
okno zawiera podsumowanie wszystkich wprowadzonych parametrw i nie wymaga
adnej interakcji. Poniewa definicje zawarte w omawianych trzech oknach dialogowych
s proste, nie zostay zilustrowane. Przejcie do ostatniego formularza powoduje wykonanie skryptu generujcego dane niezbdne na tym poziomie (rysunek 7.51).
Zakadka Report Manager URL pozwala na zdefiniowanie nazwy katalogu wirtualnego,
w ktrym bd przechowywane skompilowane raporty (rysunek 7.52). W przykadzie
uyto nazwy zgodnej z zastosowan podczas definiowania waciwoci aplikacji (rysunek 7.39). Ten krok koczy podstawowe, obowizkowe elementy konfiguracji serwera WWW. Widniejcy w oknie adres URL suy do testowania serwera.

344

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.50.
Okno konfiguracji
Reporting Services
wskazanie bazy
zawierajcej
repozytorium

Rysunek 7.51.
Okno konfiguracji
Reporting Services
zakoczenie
konfiguracji bazy
danych; raport
o stanie wykonania
skryptw

Rysunek 7.52. Okno konfiguracji Reporting Services definicja katalogu wirtualnego

Rozdzia 7. Raportowanie

345

Wybranie hipercza powoduje uruchomienie domylnej przegldarki, ktra zawiera


domow stron serwera, przedstawion na rysunku 7.53. Nie ma w niej adnych danych, o czym informuje nas zamieszczony w oknie komunikat. Widoczna jest rwnie dwuzakadkowa struktura prezentacji zawartoci witryny: Contents elementy
strony, Properties waciwoci. Strona zawiera wasne menu, pozwalajce midzy
innymi na tworzenie folderw wirtualnych, rde danych, ich przeadowanie oraz
uruchomienie narzdzia Report Builder.
Rysunek 7.53.
Wynik testu serwera
WWW po zakoczeniu
konfiguracji
podstawowej

W przykadzie konfiguracji pominito zakadki:


E-mail Settings pozwala skonfigurowa serwer pocztowy w celu

zapewnienia automatycznego powiadamiania;


Execution Account konta, na rzecz ktrych wykonywane jest przetwarzanie;
Encryption Keys zasady generowania kluczy szyfrujcych;
Scale-out Deployment zasady zachowania przy przetwarzaniu

z wykorzystaniem wicej ni jednego serwera MS SQL.


Po zakoczeniu konfiguracji moemy powrci do projektu raportu Dzialy i wykona
jego przetworzenie do wirtualnego katalogu serwera WWW Deploy. Skutek tej
czynnoci przedstawia rysunek 7.54. Jak mona zauway, proces ten powoduje po
kolei skompilowanie projektu raportu, a nastpnie przetworzenie do dwch wirtualnych folderw serwera: najpierw danych, a pniej skompilowanego raportu. Oba
procesy zakoczyy si sukcesem.
Rysunek 7.54.
Skutek przetworzenia
raportu Dzialy
do wirtualnego
folderu
serwera WWW

Jeli teraz w przegldarce otworzymy domow witryn Reporting Services, to powinna mie wygld taki jak na rysunku 7.55. W porwnaniu z przetworzeniem testowym,
kiedy nie przetworzono jeszcze adnego raportu, pojawiy si dwa foldery o nazwach
zgodnych z ustawieniami waciwoci serwisu. Zielone napisy !New przy obu z nich
wiadcz, e zmodyfikowana zostaa ich zawarto pojawiy si pierwsze obiekty.

346

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.55.
Strona domowa
serwera WWW
po przetworzeniu
pierwszego raportu

Jeli otworzymy folder Report, jego zawarto powinna by zgodna z t, ktr przedstawia rysunek 7.56. Widoczny jest utworzony raport Dzialy; jest on nowym elementem, wic zosta dodatkowo opisany etykiet !New, tak jak to miao miejsce w przypadku nadrzdnego folderu.
Rysunek 7.56.
Strona Report
serwera WWW
po przetworzeniu
pierwszego raportu

Otwarcie raportu za pomoc przegldarki powoduje pojawienie si jego zawartoci


(rysunek 7.57), analogicznej do tej, jak przedstawiano w podgldzie projektu. Rnic stanowi menu pozwalajce na zmian formatu wywietlania oraz eksport zawartoci do
plikw rnego typu, midzy innymi: Excela, Acrobata, Worda, etc. Dodatkowo poza
gwn zakadk View dostpne s kolejne trzy, pozwalajce na: odczytanie i ewentualn modyfikacj waciwoci raportu, obejrzenie historii modyfikacji danych i struktury
oraz zaplanowanie subskrypcji.

Synchronizowanie raportw
Wygenerujemy kolejny prosty raport, tym razem oparty na tabeli Osoby, z ktrej
w definicji zapytania pobierzemy pola Nazwisko, Imie, RokUrodz oraz DataZatr. Raport
bdzie mia posta tabelaryczn, a wszystkie pola trafi do sekcji szczegw. Kroki
te s prost analogi przedstawionych dla poprzedniego raportu, dlatego nie zostay
zilustrowane. Jeli uzyskamy ju projekt raportu, moemy dokona modyfikacji waciwoci kadego z jego pl (lewy przycisk myszy). W przykadzie ograniczymy si
do zmiany sposobu formatowania pola daty DataZatr, ustawiajc formatowanie na
definiowane przez uytkownika Custom, majce posta dd-mm-yyyy (rysunek 7.58).
Jest to powszechnie przyjty europejski format tego typu danych.

Rozdzia 7. Raportowanie

347

Rysunek 7.57.
Widok
przetworzonego
raportu Dzialy

Rysunek 7.58. Definicja waciwoci pola DataZatr zmiana sposobu formatowania

Chcemy, aby raport ten mia zdefiniowany parametr, ktry bdzie uywany do filtrowania
danych, a w przyszoci posuy nam do synchronizacji z raportem nadrzdnym. W tym
celu wykorzystamy panel Report Data, gdzie prawym przyciskiem myszy uruchamiamy kreator (rysunek 7.59).
Rysunek 7.59.
Dodawanie
parametru do raportu

348

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Na gwnej zakadce okna dialogowego definiujemy nazw, etykiet oraz typ (rysunek 7.60). Ponadto za pomoc pl opcji okrelamy, czy parametr moe przyjmowa
warto null oraz czy moliwe jest okrelenie wielu wartoci. W realizowanym przykadzie w obu przypadkach odpowied jest negatywna. Jeeli zmienna miaaby typ
znakowy, byoby moliwe ustanowienie opcji zezwalajcej na podanie jako wartoci
pustego cigu znakw. Ostatnim elementem jest ustawienie opcji reprezentujcej sposb wywietlania: Visible, Hidden oraz Internal; ostatnia warto oznacza, e jest to
zmienna wewntrzna, wykorzystywana programistycznie.
Rysunek 7.60.
Podstawowe dane
opisujce parametr

Na zakadce Available Values istnieje moliwo okrelenia dopuszczalnych wartoci,


jakie moe przyj parametr (rysunek 7.61). Opcja None oznacza, e nie ma adnych
ogranicze. Wybr pozycji Specify values pozwala na okrelenie zestawu wartoci
dopuszczalnych dla parametru, natomiast Get values from a query dopuszcza tylko takie
wartoci, ktre wystpuj we wskazanym polu zapytania. Jest to stan podobny do okrelenia klucza obcego i wskazania na kolumn w tabeli nadrzdnej.
Rysunek 7.61.
Okrelenie wartoci,
jakie moe przyj
parametr

Zakadka Default Values pozwala na okrelenie wartoci domylnej parametru (rysunek 6.62). Dostpne opcje s takie same jak w przypadku ustalania wartoci dopuszczalnych, omwionych w poprzednim akapicie. W przykadzie zdecydowano si na
ustawienie tej wartoci na 1. Jak wida, moliwe jest przypisanie wielu wartoci domylnych, co ma sens wtedy, gdy zdecydowano si na parametr wielowartociowy
pozycja multiple na rysunku 5.60. Jeli wybierzemy przycisk opisany przez fx
(po prawej stronie wartoci), bdziemy mogli za pomoc kreatora budowa bardziej
zoone wyraenia.

Rozdzia 7. Raportowanie

349

Rysunek 7.62.
Okrelenie wartoci
domylnej parametru

Ostatnia zakadka, Advanced (rysunek 7.63), okrela zasady, wedug ktrych odwieane bd dane, kiedy parametr ulegnie zmianie. Dostpne opcje to: Automatically
determine pozostawiajca proces odwieania w gestii silnika Reporting Services,
Always refresh odwieenie nastpi przy kadej zmianie parametru, oraz Never
blokujca automatyczny proces odwieania.
Rysunek 7.63.
Okrelenie sposobu
odwieania danych

Parametr mia posuy do filtrowania raportu Osoby w ten sposb, e wywietlane


miay by rekordy dotyczce pracownikw tego dziau, ktrego identyfikator jest dany przez jego warto. Niestety, okazao si, e zapomnielimy umieci to pole w definicji rda danych. Aby naprawi bd, moglibymy ponownie wygenerowa raport, ale
o wiele efektywniejsz drog jest edycja waciwoci rda danych (rysunek 7.64).
Rysunek 7.64.
Zmiana waciwoci
raportu

Zmiana musi by dokonana w dwch miejscach. Po pierwsze, na zakadce Query musimy dopisa brakujce pole do definicji zapytania. Na rysunku 7.65 przedstawiono
stan po dokonaniu tej modyfikacji. Poniewa korekta jest prosta, wykonano j bezporednio w oknie Query. W przypadku bardziej skomplikowanych modyfikacji moemy skorzysta z edytora zapyta przycisk Query Designer.

350

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.65.
Dodawanie pl do
rda danych raportu
zakadka Query

W drugiej kolejnoci naley doda to pole w zakadce Fields, zgodnie z tym, co pokazano na rysunku 7.66. Jak wida, poza polami bezporednio wyprowadzanymi przez zapytanie Query Field moliwe jest dodanie pl wyznaczanych na podstawie wyrae
lub funkcji Calculated Field. Pozycja Field Source okrela nazw pola w obiekcie rdowym, natomiast pozycja zasonita na rysunku przez opcje przycisku Field Name
okrela alias, pod jakim pole to bdzie widoczne w raporcie. Poniewa zapytanie zawiera tylko odwoania do pl, obie nazwy s w stanie domylnym takie same. Oczywicie alias moe zosta zmieniony rcznie.
Rysunek 7.66.
Dodawanie pl do
rda danych raportu
zakadka Fields

Teraz moemy przystpi do definiowania sposobu filtrowania zakadka Filters na


rysunku 7.67. W polu Expression moemy wybra za pomoc listy pole lub okreli
konstruktorem bardziej zoon posta wyraenia po stronie rda danych, ktre bdzie podlega filtrowaniu. W pierwszym przypadku typ jest konsekwencj dokonanego wyboru (cho formalnie mona go zmieni), natomiast w drugim naley go jawnie

Rozdzia 7. Raportowanie

351

Rysunek 7.67.
Definiowanie
wyraenia filtrujcego

okreli. Komrka Operator okrela sposb porwnania pola (wyraenia) z parametrem.


Moliwe jest zastosowanie wszystkich operatorw relacyjnych (=, >, <, >=, <=,
<>), znanych operatorw specjalnych (podobiestwa Like, przedziau Between,
listy In), ograniczajcych liczebno wierszy (od gry Top N, od dou Bottom N) oraz wersji tych operatorw mierzcej liczebno w procentach cakowitej
liczby rekordw (Top %, Bottom % w obu przypadkach liczba wywietlanych rekordw jest zaokrglana w gr).
W pole Value moglibymy jawnie wpisa nazw parametru, co okrelioby warunek
o postaci [IdDzialu]=[@Dzial]. Jednak aby przedstawi Czytelnikowi inn moliwo,
odwoano si do kreatora wyrae (rysunek 7.68), wywoywanego przyciskiem opisanym
jako fx. W przykadzie dokonano prostego wyboru z kategorii Parameters jedynego jak
dotd parametru @Dzial. Jednak moliwoci s o wiele wiksze, poniewa pozwalaj siga do: staych, wbudowanych funkcji, pl rda, zestaww danych oraz zmiennych.
Rysunek 7.68.
Definiowanie
wyraenia filtrujcego

Pomimo tego, e w gwnym panelu konstruktora wyrae do nazwy parametru zostaa dopisana waciwo Value, to poniewa jest to stan domylny, nie pojawi si
w postaci ostatecznej definicji porwnywanej wartoci (rysunek 7.69). W tle okna
waciwoci, w panelu Report Data, widoczne jest dodane w poprzednich zakadkach
pole IdDzialu.

352

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.69.
Definiowanie
wyraenia filtrujcego
posta ostateczna

Przejcie od edycji do podgldu zmodyfikowanego raportu powoduje jego wywietlenie w ten sposb, e w polu tekstowym o etykiecie Dzial wpisana jest warto domylna 1, i wywietlone s tylko te osoby, ktre pracuj w tym dziale rysunek 7.70.
Zmiana wartoci parametru spowoduje (po odwieeniu), e zestaw wywietlanych
rekordw bdzie dotyczy innego dziau.
Rysunek 7.70.
Podgld raportu
ze zdefiniowanym
parametrem

Kolejna modyfikacja bdzie dotyczy utworzonego wczeniej raportu Dzialy. Zadaniem


docelowym jest dodanie zsynchronizowanego z jego zawartoci podraportu Osoby.
W tym celu musimy w wygenerowanej poprzednio strukturze doda dla niego miejsce. Uzyskujemy to, wstawiajc kolumn na prawo w stosunku do zaznaczonego pola
Opis (rysunek 7.71).
Postpujc analogicznie, wstawiamy wiersz, ktry bdzie stanowi podgrup znajdujc si poniej biecego wiersza. W powsta w ten sposb pust komrk (prawy
dolny naronik) wstawiamy z menu narzdziowego podraport kontrolka Subreport
(rysunek 7.72).
W celu zapewnienia zakadanej funkcjonalnoci, ktra ma umoliwia synchronizacj
nazw wywietlanych dziaw oraz w obrbie grupy wyznaczanej przez pojedynczy
dzia listy wszystkich jego pracownikw, naley zmodyfikowa waciwoci podraportu. Sposb umieszczenia podraportu wraz ze wskazaniem pozycji w menu kontekstowym pozwalajcym na zmian parametrw przedstawia rysunek 7.73.

Rozdzia 7. Raportowanie
Rysunek 7.71.
Modyfikacja raportu
Dzialy dodanie
kolumny

Rysunek 7.72.
Modyfikacja raportu
Dzialy dodanie
podraportu

Rysunek 7.73.
Modyfikacja
waciwoci
podraportu

353

354

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Na gwnej zakadce okna moliwe jest nadanie nazwy kontrolce zawierajcej podraport oraz pobranie jako rda jednego spord wszystkich raportw istniejcych ju
w projekcie. Moliwe jest rwnie wybranie opcji rysowania obramowania wok
kontrolki. W przykadzie przedstawionym na rysunku 7.74 obie nazwy s takie same
i odnosz si do obiektu Osoby.
Rysunek 7.74.
Ustalenie nazwy
i obiektu rdowego
dla podraportu

Zakadka Visibility pozwala na okrelenie warunkw, kiedy podraport ma by widoczny.


Moliwe jest ustawienie bezwarunkowe (Show, Hide) lub okrelone przez wyraenie
zwracajce warto logiczn. Na tej zakadce moliwe jest rwnie wskazanie pola,
ktre odpowiada za rczne przeczenie stanu (ikony + i w naroniku tego pola).
Istotniejsze definicje zawarte s w zakadce Parameters (rysunek 7.75). Pozwalaj
one na ustalenie, ktre pole ma by przekazywane jako warto parametru podraportu. Moliwe jest zdefiniowanie wielu wyrae synchronizujcych. W omawianym
przypadku do parametru Dzial jest przypisywana warto z pola IdDzialu, pochodzcego z raportu (tabeli) Dzialy.
Rysunek 7.75.
Ustalenie sposobu
synchronizacji
raportu
z podraportem

Rozdzia 7. Raportowanie

355

Ostatnia zakadka, Borders, omawianego okna pozwala na zdefiniowanie stylu rysowania ramki wok podraportu. Moliwe jest okrelenie rodzaju linii (ciga, przerywana, etc.), jej gruboci oraz koloru. Kada krawd ramki moe by definiowana
niezalenie; moliwe jest take ustalenie wygldu kadego z tych elementw na podstawie wyraenia. Po ustawieniu wszystkich waciwoci raport w podgldzie powinien mie posta zgodn z przedstawion na rysunku 7.76.
Rysunek 7.76.
Widok podgldu
raportu
z podraportem

Powrmy na chwil do raportu Osoby, aby wskaza na moliwo rcznego ukrywania


pola lub grupy. Jeeli tak jak na rysunku 7.77 zaznaczymy grup pl (Imie, RokUrodz,
DataZatr) wraz z opisujcymi je etykietami, to moliwe jest wybranie jednego pola
przeczajcego ToggleItem. Wybrano textbox2, co odpowiada etykiecie pola Nazwisko.
Rysunek 7.77.
Definicja elementu
przeczajcego
dla grupy komrek

Na skutek takiego ustawienia waciwoci w naroniku etykiety Nazwisko pojawia si


ikona (+ lub , w zalenoci od stanu), pozwalajca na ukrycie lub wywietlenie wybranych pl. Widok raportu Osoby w obu stanach przedstawia rysunek 7.78. Ta cecha raportu przeniesie si do raportu Dzialy, w ktrym odgrywa on rol podraportu.

356

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.78.
Podgld raportu
przed przeczeniem
i po przeczeniu

Raporty o strukturze macierzowej


Kolejny raport bdzie korzysta ju z bardziej zoonego rda, ktrego definicja graficzna utworzona w konstruktorze zapyta Query Designer zostaa przedstawiona na rysunku 7.79. Zapytanie to ma na celu wywietlenie nazw wojewdztw i miast, z ktrych pochodz producenci towarw, daty sprzeday, a take wartoci oraz wartoci zakupu.

Rysunek 7.79. Definicja zapytania dla raportu Producenci_czas

Tak okrelone rdo posuy nam do zbudowania raportu o strukturze macierzowej.


Rozmieszczenie pl w poszczeglnych sekcjach raportu przedstawia rysunek 7.80.
Daty wystawienia faktury maj opisywa kolumny, nazwy wojewdztw i miast okrelaj nazwy wierszy, a sekcj szczegw stanowi warto i warto sprzeday.

Rozdzia 7. Raportowanie

357

Rysunek 7.80.
Definicja
rozmieszczenia
pl dla raportu
macierzowego

W przypadku takiego rozmieszczenia pl struktura raportu w widoku do edycji wyglda tak, jak przedstawiono na rysunku 7.81. Zauwamy, e w sekcji szczegw
obliczane s sumy dla obu pl. Typ funkcji agregujcej mona zmieni dla kadego z nich
za pomoc okna waciwoci. Naley zwrci uwag na klamry narysowane na szarych
polach obramowania. Symbolizuj one zakres utworzonych grup. Podwjna klamra
w opisie wierszy wskazuje na istnienie dwch grup, z ktrych jedna, Miasto, jest potomkiem grupy nadrzdnej. Ta forma prezentacji ma swoje odwzorowanie w dwch
panelach, znajdujcych si poniej wizualnej postaci raportu. O podrzdnoci grupy
wiadczy wcicie po lewej stronie na niszym z poziomw.
Rysunek 7.81.
Widok projektu
raportu
macierzowego
Producenci_czas

Na rysunku 7.82 przedstawiono podgld raportu zdefiniowanego powyej. Dla kadego


wojewdztwa widocznych jest kilka miast znajdujcych si na jego terenie, co potwierdza fakt nadrzdnoci tego poziomu. W kolumnach wystpuje tylko jedna grupa,
chocia i tu warto rozway grupowanie dat w ramach roku kalendarzowego czy miesica, tak jak pokazywano w rozdziale powiconym strukturom wielowymiarowym.
Aby wprowadzi filtr, dodano do rda danych DataSet pole IdKategorii wedug zasad, ktre byy ju prezentowane w tym rozdziale. Podobnie jak poprzednio, chcemy
zastosowa t warto do filtrowania wywietlanych danych. Jednak tym razem zamiast statycznej wartoci do ustalenia wartoci parametru zastosujemy list danych
pobieranych z tabeli sownikowej. W tym celu do definicji raportu w panelu Report
Data dodajemy kolejne rdo danych Data Set (rysunek 7.83).

358

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.82. Podgld raportu macierzowego Producenci_czas


Rysunek 7.83.
Dodawanie nowego
rda danych
do definicji raportu

Nowe rdo danych bdzie miao nazw Kategorie, a w definicji zapytania podamy
kod SQL przetwarzajcy tabel o tej samej nazwie i majcy posta:
SELECT IdKategorii, NazwaKategorii FROM Kategorie

Pozostae waciwoci nie bd zmieniane i bd miay wartoci domylne. Nastpnie


tworzymy nowy parametr o nazwie Kategoria i takiej samej etykiecie, ktry bdzie
zwraca warto numeryczn typu cakowitego. Tym razem na zakadce Available
Values ustawmy opcj Get values from a query (rysunek 7.84). Jako rdo danych
wybieramy Kategorie. Opcja Value field opisuje warto, jaka jest zwracana na skutek wybrania odpowiedniej pozycji listy, i zostaa ustawiona na IdKategorii (integer).
Natomiast Label fields informuje nas, ktre z pl bdzie wywietlane jako element listy i bdzie stanowi etykiety zwracanych wartoci. Poniewa atwiej jest posugiwa
si nazw ni identyfikatorem, w polu tym wybrana zostaa NazwaKategorii.
Rwnie w definicji wartoci domylnej (rysunek 7.85) zastosowano odwoanie do listy pobieranej z zapytania. W przypadku parametru jednowartociowego oznacza to,
e bdzie wykorzystana pierwsza warto zestawu rekordw. Dla wielowartociowych
parametrw zostanie uyta pena lista wartoci, co z reguy oznacza brak filtrowania.
Pozostaje jeszcze zdefiniowanie wyraenia filtrujcego dla podstawowego zestawu
rekordw. Wykonujemy to, wykorzystujc okno waciwoci na zakadce Filters (por.
rysunek 7.69). Budujemy filtr o postaci:
[IdKategorii]=[@Kategoria]

Rozdzia 7. Raportowanie

359

Rysunek 7.84.
Definicja waciwoci
parametru
pobierajcego
dane z zapytania
(lista wartoci)

Rysunek 7.85.
Definicja wartoci
domylnej parametru
jako wartoci
pobieranej
z zapytania

Gdy wykonamy te czynnoci, podgld raportu bdzie wyglda jak na rysunku 7.86.
Rysunek 7.86.
Wygld raportu ze
zdefiniowanym filtrem
w postaci listy
warto domylna
parametru

Jak wida, raport zosta przetworzony poprawnie, ale bez zmiany pocztkowej, domylnej wartoci parametru nie zawiera on adnych danych. Jeli jednak zmienimy t
warto, to dla niektrych danych raport bdzie zawiera niepusty zestaw rekordw
(rysunek 7.87).

360

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.87.
Wygld raportu ze
zdefiniowanym filtrem
w postaci listy
dla jednej
z wartoci rnych
od domylnej

Takie zachowanie wynika z faktu, e sowniki kategorii i towarw s znacznie szersze ni


lista produktw, ktrymi handlowano. Przypadek sprawi, e wartoci domyln jest
kategoria, dla ktrej nie prowadzono sprzeday. Aby z listy definiujcej parametr usun
takie kategorie, dla ktrych nie byo sprzeday, naley zmieni zapytanie definiujce list, wprowadzajc zczenia a do poziomu tabeli opisujcej sprzeda Transakcje.
Zmodyfikowane rdo przedstawiono w postaci wizualnej na rysunku 7.88.
Rysunek 7.88.
Zmodyfikowana
definicja rda
danych dla listy
okrelajcej parametr

Niestety, wprowadzenie zczenia powoduje, e bd wystpowa powtarzajce si


elementy. Powtrze bdzie tyle, ile razy zosta sprzedany produkt z danej kategorii.
W celu ograniczenia si tylko do listy niepowtarzajcych si wartoci naley w zapytaniu po sowie kluczowym SELECT doda dyrektyw DISTINCT, ktra eliminuje
powtrki. Modyfikacj tak mona wykona tylko bezporednio w tekcie zapytania.
Jak byo wida na podgldzie, wszystkie grupy wojewdztw zawieraj wszystkie miasta,
z ktrych pochodz producenci. Chcemy zmodyfikowa projekt tak, aby po otwarciu widoczne byy tylko nazwy wojewdztw, a wczenie wywietlania miast wynikao z wyboru uytkownika. W tym celu dla pola Miasto (rysunek 7.89) we waciwociach naley
ustawi Hidden (ukryty) na True, a jako przecznika ToggleItem uy pola Wojewdztwo.

Rozdzia 7. Raportowanie

361

Rysunek 7.89.
Definiowanie ukrycia
pola Miasto i definicja
pola przeczajcego
ten stan

Sposb dziaania przeczania widzialnoci poziomu zawierajcego nazwy miast ilustruje rysunek 7.90. Po lewej stronie widzimy posta raportu tu po jego otwarciu.
Przeczenie stanu dla jednego z wojewdztw wywietli dostpn na tym poziomie list miast.

Rysunek 7.90. Widok podgldu raportu w stanie domylnym (po otwarciu) oraz po rozwiniciu
zawartoci grupy dla wojewdztwa dzkiego

Definiowanie akcji dla raportw


Przy okazji opisywania projektowania tego raportu chciabym przedstawi moliwo
zdefiniowania akcji, ktre stanowi analogi obiektw ju omawianych dla struktur
wielowymiarowych. W oknie edycyjnym projektu wybierzmy jedno z pl etykiet, np.
Wojewdztwa, a nastpnie wywoajmy okno waciwoci. W jego ostatniej zakadce,
Actions, zdefiniujemy sposb obsugi zdarzenia (rysunek 7.91). Poza opcj None blokujc ten typ dziaania dostpne s jeszcze trzy: Go to report powodujca przejcie do wskazanego raportu, Go to bookmark pozwalajca na przejcie do zakadki
zdefiniowanej w projekcie raportu, oraz Go to URL uruchamiajca przegldark
i wywietlajca wskazan stron. W przykadzie zdecydowano si na ostatni z nich.
Najprostszym rozwizaniem jest wpisanie dowolnego poprawnego skadniowo adresu
strony, np. http://imsi.pl/, lub podstrony, np. http://imsi.pl/index.php?&k=k12&w=
k040107. Jednak jest to rozwizanie mao atrakcyjne, dlatego warto zastosowa sparametryzowan posta adresu. W tym celu wykorzystamy konstruktor wyrae oznaczony

362

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.91.
Definicja typu akcji
dla wybranego
pola raportu

ikon z tekstem fx (rysunek 7.91). Poniewa bdziemy chcieli znale w sieci informacje o wybranym wojewdztwie, uyjemy jednej z najpopularniejszych wyszukiwarek Google. W gwnym panelu wywietlonego okna (rysunek 7.92) wpisujemy po
znaku rwnoci statyczn cz adresu strony. Nastpnie dodamy do niego, korzystajc
z paneli w dolnej czci okna, parametr pobrany z wywietlanego raportu. Spowoduje to,
e wyraenie bdzie miao posta: =http://www.google.pl/search?q= + Fields.
Wojewdztwo.Value.
Rysunek 7.92.
Definicja wyraenia
wskazujcego na
otwieran stron
i definiujcego
parametr dla
wyszukiwania

Jeli teraz w wywietlonym raporcie najedziemy kursorem myszy na pole zawierajce


nazw wojewdztwa, to jego posta zmieni si, wskazujc na istnienie skojarzonego
z nim odwoania. Kliknicie spowoduje natomiast, e przeniesiemy si do przegldarki

Rozdzia 7. Raportowanie

363

WWW, w ktrej rozpocznie si wyszukiwanie informacji. Jak wida na rysunku 7.93,


w pole wyszukiwania wpisana zostaa nazwa wybranego wojewdztwa dzkie. Potwierdza to rwnie wpis w polu adresu wyszukiwarki. Wpisany cig q=%C5%82%
C3%B3dzkie wynika z kodowania polskich znakw diakrytycznych.
Rysunek 7.93.
Przykadowa
zawarto
przegldarki dla akcji
zdefiniowanej
na poziomie nazw
wojewdztw

Podobne postpowanie przeprowadmy teraz dla pola reprezentujcego nazw miasta.


Jednak tym razem zamiast stosowa wyszukiwanie informacji sprbujmy przej do
serwisu map i wywietli map zgodn z wybran nazw. Ponownie w oknie waciwoci
pola, na zakadce Actions, w celu utworzenia adresu URL skorzystamy z kreatora wyrae (rysunek 7.94). Przy uyciu dostpnych tam definicji zbudowana bdzie dynamiczna posta adresu http://maps.google.pl/maps?q= + Fields.Miasto.Value.
Rysunek 7.94.
Definicja wyraenia
wskazujcego na
otwieran stron
i definiujcego
parametr dla
wywietlania map

364

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Podobnie jak dla poprzednio zdefiniowanej akcji, i tym razem nastpuje przeczenie
do domylnej przegldarki stron WWW, a nastpnie wyszukiwana jest za pomoc
wybranego serwisu mapa wskazanego miasta. Przykadowy skutek dziaania tej akcji
przedstawia rysunek 7.95.

Rysunek 7.95. Przykadowa zawarto przegldarki dla akcji zdefiniowanej na poziomie nazw miast

Oczywicie poza pokazan tutaj witryn Google Maps czy przedstawion w rozdziale
dotyczcym struktur wielowymiarowych witryn Microsoft Maps moliwe jest wykorzystanie wielu innych. Jedynym problemem jest identyfikacja sposobu przekazywania danych do wybranej przez nas witryny. Najatwiej wykona to, przeprowadzajc
statyczne wyszukiwanie wskazanej mapy. Dla popularnego w Polsce serwisu zumi.pl
taka statyczna forma bdzie miaa format:
http://www.zumi.pl/namapie.html?qt=&loc=woj.+%A3%F3dzkie%2C+
Zgierz&cId=6161f4ba71e81ede03008d210000ab00d54e00444af7a62c&sId=
&Submit=Szukaj&moreCities=1
Jeli znajdziemy fragment odpowiadajcy za przekazywan nazw, moemy uproci
adres, sprawdzajc, czy nastpuje poprawne przekierowanie. Przykad uproszczonego
statycznego adresu w tym przypadku moe mie posta:
http://www.zumi.pl/namapie.html?qt=&loc=Zgierz&Id=&Submit=Szukaj
W postaci sparametryzowanej wyraenie wyszukujce wskazane miasto bdzie wygldao jak poniej:
=http:// www.zumi.pl/namapie.html?qt=&loc= + Fields.Miasto.Value +
&Id=&Submit=Szukaj

Rozdzia 7. Raportowanie

365

Ostatnia cz acucha odpowiada za automatyczne wczenie procesu wyszukiwania mapy. W przypadku wielu miast, a ma to miejsce rwnie w odniesieniu do mojego (Zgierza), wskazanie takie moe by niejednoznaczne, dlatego naley je uzupeni
o wojewdztwo, na ktrego terenie dane miasto si znajduje:
=http:// www.zumi.pl/namapie.html?qt=&loc= woj.+ +
Fields.Wojewdztwo.Value + ,+ Fields.Miasto.Value +
&Id=&Submit=Szukaj
Niestety, mog pojawi si kopoty z rnicami w stronach kodowych raportu i wyszukiwarki map.

Definiowanie grup hierarchicznych


Ju wspomniano wczeniej, e rzadko kiedy potrzebujemy raportw, w ktrych data
reprezentowana jest z dokadnoci do dnia. Powszechniejsze s raporty dla raczej
duszych okresw. Warto byoby zadba rwnie, aby od najszerszego poziomu, np.
roku, mona byo rozwija kolejne poziomy. Aby wprowadzi tak funkcjonalno,
moemy oczywicie zmodyfikowa zapytanie stanowice rdo danych. Sprbujmy
jednak wprowadzi takie dziaanie bezporednio w definicji raportu. W tym celu we
waciwociach danych Data Set moemy doda pola obliczane (rysunek 7.96).
Rysunek 7.96.
Definicja pl
obliczanych
dla raportu

W nazwy dodanych pl wprowadmy interesujce nas poziomy daty Rok, Kwarta


i Miesic. W tym typie pl moliwe jest uycie jako elementu rdowego Field Source tylko wyrae. Dlatego podajmy dla nich odpowiednie wyraenia, uywajc
kreatora lub wpisujc je rcznie.
=MONTH(Fields!DataFaktury.Value)
=DatePart("q",Fields!DataFaktury.Value)
=YEAR(Fields!DataFaktury.Value)

366

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Kolejnym etapem jest zmiana pola opisujcego kolumny z dotychczasowego, pokazujcego dat faktury, na miesic. Po tej zamianie dodajmy w widoku projektu powyej tej komrki pole reprezentujce grup nadrzdn ParentGroup (rysunek 7.97).
Rysunek 7.97.
Dodanie pola grupy
nadrzdnej dla
komrki Miesic

Podczas tworzenia grupy rodzicielskiej naley pobra pole raportu, ktre ma j wyznacza. W naszym przypadku niech bdzie to Kwarta (rysunek 7.98).
Rysunek 7.98.
Okrelenie pola
definiujcego grup
nadrzdn dla
komrki Miesic

Postpujc w ten sposb, uzyskamy trjpoziomow struktur Rok Kwarta Miesic.


Dodanie kolejnych elementw hierarchii spowodowao, e pojawia si na lewo od nich
grupa omiu pustych komrek. W celu pniejszego ich wykorzystania warto rozway moliwo ich scalenia (opcja Merge Cells) w pojedynczy obiekt (rysunek 7.99).
Tak samo jak w przypadku komrek, waciwoci mog by zmieniane rwnie dla grup.
Podstawow czynnoci powinna by zmiana domylnych nazw o postaci GroupX na
napisy odpowiadajce waciwym poziomom. Zostao to pokazane na rysunku 7.100
na przykadzie grupy reprezentujcej rok.
Jednak z punktu widzenia funkcjonalnoci waniejsze jest ustalenie przeczania widocznoci grup. Dla trzech podrzdnych poziomw (Kwarta, Miesic, Szczegy) ustawiamy domylny stan wywietlania na niewidoczny Visibility=True (rysunek 7.101).
Ponadto jako przecznik ToggleItem ustawiamy grup lec bezporednio powyej
biecej: dla szczegw miesic, dla miesica kwarta, a dla kwartau rok.

Rozdzia 7. Raportowanie

367

Rysunek 7.99.
Scalenie pustych
komrek po lewej
stronie definicji
hierarchii

Rysunek 7.100.
Zmiana domylnych
nazw grup

Rysunek 7.101. Definicja widocznoci grup oraz elementu przeczajcego ten stan

W podgldzie raportu przedstawionym na rysunku 7.102 widoczne s dwa poziomy


hierarchii. Trzeci z nich, Miesic, nie zosta jeszcze rozwinity, o czym wiadcz ikony ze znakiem + w naroniku.

368

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.102. Podgld raportu ze zdefiniowan hierarchi opisujc dat oraz z przeczaniem
widocznoci pl

Niestety, podanie samych numerw kwartaw oraz numerw miesicy moe by mao
czytelne dla odbiorcy. Dlatego warto zmodyfikowa definiujce je wyraenia. W przypadku kwartaw numer zostanie poprzedzony statycznym napisem Kwarta, a numer
miesica bdzie zamieniony na jego nazw. Zmodyfikowane wyraenia bd miay
posta:
="Kwarta " + STR(DatePart("q",Fields!DataFaktury.Value))
=MonthName(MONTH(Fields!DataFaktury.Value))

Tym razem posta raportu jest czytelniejsza (rysunek 7.103). Wbudowane funkcje
daty pozwalaj na wyprowadzenie nazw angielskich. Rozwizaniem jest przeczenie
we waciwociach raportu jzyka na polski. Mona by si rwnie pokusi o utworzenie wasnej funkcji zamieniajcej numery miesicy na ich nazwy w jzyku polskim. Jest to moliwe we waciwociach raportu, na zakadce Code, gdzie w oknie
edycyjnym moemy utworzy funkcj napisan w Visual Basicu o postaci:
Public Function NazwaMiesiaca(ByVal numer As Integer) As String
Dim nazwa AS String
SELECT CASE numer
CASE 1
nazwa="Stycze"
CASE 2
nazwa="Luty"
CASE 3
nazwa="Marzec"
CASE 4
nazwa="Kwiecie"
CASE 5
nazwa="Maj"
CASE 6
nazwa="Czerwiec"
CASE 7
nazwa="Lipiec"
CASE 8
nazwa="Sierpie"
CASE 9
nazwa="Wrzesie"
CASE 10
nazwa="Padziernik"
CASE 11

Rozdzia 7. Raportowanie

369

Rysunek 7.103. Podgld raportu ze zdefiniowan hierarchi opisujc dat oraz przeczaniem
widocznoci pl po uzupenieniu wyrae definiujcych te pola
nazwa="Listopad"
CASE 12
nazwa="Grudzie"
END SELECT
Return nazwa
End Function

Odwoanie do niej nastpuje przez podanie nazwy kwalifikowanej rozpoczynajcej


si od sowa kluczowego Code.
=Code.NazwaMiesiaca(Fields!Miesiac.Value)

Moliwoci wzbogacenia funkcjonalnoci raportu dla danych pochodzcych z relacyjnej bazy danych s oczywicie duo szersze. Zaprezentowany tutaj zakres funkcjonalnoci wydaje si spenia najpowszechniejsze oczekiwania odbiorcw.

Raportowanie dla danych


pochodzcych z hurtowni
Do tej pory koncentrowalimy si na tworzeniu raportw dla danych relacyjnych.
Mogo to sprawia wraenie odejcia od gwnego nurtu wywodu. Jak si jednak
wkrtce okae, rnice podczas tworzenia raportw dla hurtowni s niewielkie, a opisywane do tej pory zasady budowania i edycji raportw maj pene zastosowanie. Zbudujmy zatem raport dla przedstawionej w poprzednich rozdziaach i przetworzonej
hurtowni danych. Podczas dodawania raportu do projektu pierwsza rnica pojawia si na
poziomie definiowania poczenia z danymi. Naley wybra dostawc typu Microsoft
SQL Analysis Services oraz jedn z wykrytych na serwerze lokalnym (kropka w polu
Server name) struktur wielowymiarowych (rysunek 7.104).
Po przeprowadzeniu testu poczenia moemy zatwierdzi dane wprowadzone w oknie
dialogowym Connection Properties. Dokonany wybr zostanie przedstawiony w postaci acucha poczeniowego Data Source=.; Initial Catalog=hurtownia, umieszczonego w oknie nadrzdnym (rysunek 7.105).

370

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.104.
Utworzenie
poczenia
z hurtowni
dla raportu

Rysunek 7.105.
Definicja poczenia
z hurtowni
dla raportu

Tak samo jak dla danych relacyjnych naley zbudowa zapytanie, korzystajc z narzdzia Query Builder. Jednak tym razem jego forma graficzna jest analogiczna do
okna Browser, znanego Czytelnikowi z rozdziau 5. Przed jego wywietleniem pojawia si okno dialogowe pozwalajce na wybr jednej z przetworzonych kostek (rysunek 7.106). W realizowanym przykadzie wybrano struktur o nazwie Zyski. Jest ona
najbardziej rozbudowanym przykadem opisanym w rozdziale 5.
Tworzenie zapytania jest wykonywane metod przecignij i upu, jak to miao
miejsce w widoku Browser kostki. Jednak w odrnieniu od tego narzdzia moemy
tutaj tworzy tylko tabele jednowymiarowe brak tu kolumn definiujcych wiersze.
W definicji zdecydowano si na wybranie danych dotyczcych klienta (Wojewdztwo,
Miasto i IdKlienta, ktrego wartoci jest Nazwisko) oraz opisujcych towar (Nazwa
Kategorii i IdTowaru, ktrego wartoci jest Nazwa Towaru). Atrybutami, ktre pniej bd definioway szczegy, s Zysk i dwa elementy KPI Trend i Status. Do
zestawu podstawowego zastosowano filtr okrelajcy, e interesuj nas te towary,
ktre znajduj si na licie Najlepsze Towary. Kocow posta definicji zapytania
zawiera rysunek 7.107.

Rozdzia 7. Raportowanie

371

Rysunek 7.106.
Wybr kostki
rdowej w celu
zbudowania zapytania
do hurtowni danych
dla raportu

Rysunek 7.107. Wizualna posta definicji zapytania do hurtowni danych dla raportu

Przeczenie si do postaci tekstowej (nieaktywna ikona z ekierk) prezentuje nam zapytanie w formie znanej z rozdziau 6., powiconego rozszerzeniu MDX (rysunek 7.108).
Taki sam zapis bdziemy widzieli w wyjciowym oknie kreatora raportw.

372

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.108. Tekstowa posta definicji zapytania do hurtowni danych dla raportu

W przypadku analizy danych pochodzcych z hurtowni danych trudno sobie wyobrazi (poza przypadkami trywialnymi) inn posta prezentacji raportu ni macierzowa.
Wynika std sposb rozmieszczenia pl w realizowanym przykadzie, przedstawiony
na rysunku 7.109. Kolumny definiuj dane klientw, wiersze towary, a pozostae pola
sekcj szczegw.
Rysunek 7.109.
Sposb
rozmieszczenia
pl zwracanych
przez zapytanie
w definicji raportu
macierzowego

Zatwierdzenie dokonanych wyborw i dokoczenie pracy kreatora powoduje, e graficzna posta raportu bdzie zgodna z rysunkiem 7.110. Naley zwrci uwag na
automatycznie wygenerowane grupy, zarwno w definicji kolumn, jak i wierszy, ktrych podrzdno wynika z definicji kolejnoci poziomw hierarchii w kostce. Ponadto scalone zostay narone puste komrki tabeli.
Tak zdefiniowany raport w oknie podgldu uzyska posta przedstawion na rysunku
7.111. Jak wida, uwzgldnienie wszystkich towarw i kategorii spowodowao, e dominuj wyniki null dla towarw, ktre znajduj si w sowniku, a nie byy sprzedawane.
W takim przypadku wspczynnik trendu bdzie zawsze wynosi -1. Kolejny problem
to fakt, e dla wspczynnika trendu zastosowana zostaa domylna funkcja agregujca SUM, ktra tutaj nie powinna by uyta.

Rozdzia 7. Raportowanie

373

Rysunek 7.110. Widok projektu raportu dla danych pochodzcych z hurtowni


Rysunek 7.111.
Podgld raportu
dla danych
pochodzcych
z hurtowni

Wskazane przyczyny spowodoway konieczno zastosowania filtrowania w definicji


rda danych. Prowadzi to do modyfikacji zapytania MDX na posta:
SELECT
{KPITrend("Wspolczynnik"), [Measures].[Zysk]}
ON COLUMNS,
FILTER(
([Klienci].[Woj_miast_klient].[Id Klienta].ALLMEMBERS *
[Towar_calosc].[Kategoria_towar].[Id Towaru].ALLMEMBERS),
[Measures].[Zysk]<>null)
DIMENSION PROPERTIES MEMBER_CAPTION,
MEMBER_UNIQUE_NAME ON ROWS
FROM (SELECT ([NajlepszeTowary]) ON COLUMNS FROM [Zyski])
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE,
FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

Jak atwo zauway, wywietlone zostan tylko rekordy opisujce takie towary, dla
ktrych Zysk jest rny od null. Po zmianie rda, ukryciu kolumn i wierszy podrzdnych oraz usuniciu sumy z wyraenia opisujcego wspczynnik trendu otrzymano posta raportu przedstawion na rysunku 7.112.

374

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.112.
Podgld raportu
dla danych
pochodzcych
z hurtowni
po odfiltrowaniu
pustych wierszy

Zastosowanie wartoci wspczynnika trendu obliczanego jako element KPI na poziomie


hurtowni danych jest mao atrakcyjn metod prezentacji. Zamiast wartoci moliwe
jest zastosowanie postaci wizualnej wskanika. Dlatego w przykadzie wyczyszczono
zawarto tej komrki, a nastpnie wstawiono kontrolk Gauge (rysunek 7.113).
Rysunek 7.113.
Dodanie kontrolki
wskanika Gauge
do definicji raportu

W Reporting Services dostpne s wskaniki nalece do dwch grup: obrotowych


i liniowych (rysunek 7.114). Poza odmiennym sposobem wizualizacji maj one dokadnie taki sam zestaw parametrw, w zwizku z tym wybr konkretnego wskanika
jest podyktowany tylko i wycznie wzgldami estetycznymi.
Rysunek 7.114.
Wykaz dostpnych
typw wskanika
Gauge

Rozdzia 7. Raportowanie

375

W przykadzie zdecydowano si na wybr jednego ze wskanikw obrotowych, co


jest widoczne na rysunku 7.115. Jak wida, w polu powyej wizualizacji aktywny jest
obszar, w ktrym naley umieci pole, ktrego warto bdzie sterowaa pozycj wskanika. W naszym przypadku jest to suma zyskw dla danej pozycji w tabeli.
Rysunek 7.115.
Definicja pola
sterujcego
wskazaniami
wskanika Gauge

Okrelenie miary dla wskanika nie ma sensu bez ustalenia zakresu wskaza. Dlatego
z menu podrcznego dla tej kontrolki wybierzmy pozycj Scale Properties (rysunek
7.116). Naley zauway, e w tym podmenu wyodrbnione s rwnie waciwoci
wskazwki oraz panelu wskanika. W gwnym menu istnieje moliwo ustawienia
od razu wszystkich kategorii waciwoci tej kontrolki (Gauge Properties). Moliwe jest
rwnie dodawanie poszczeglnych elementw definiujcych wskanik oraz dodanie kolejnego wskanika (Add Gauge), ktry bdzie elementem potomnym dla ju istniejcego.
Rysunek 7.116.
Wybr waciwoci
skali dla wskanika
Gauge

W przypadku okrelenia zakresu warto minimaln ustawiamy na zero, natomiast do


ustalenia maksimum posuymy si konstruktorem wyrae (rysunek 7.117). Zastosowano najprostsze z moliwych rozwiza, w ktrym warto ta bdzie maksimum
zysku dla caego zakresu danych Data Set.
=MAX(Fields!Zysk.Vale, DataSet1)

Moliwe jest zastosowanie opcji Recursive, powodujcej, e wskazana funkcja agregujca dotyczy tylko biecej grupy.
=MAX(Fields!Zysk.Vale, DataSet1, Recursive)

376

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.117.
Okrelenie minimum
i maksimum skali dla
wskanika Gauge

Oczywicie mona by zastosowa bardziej zoone wyraenia. Warto zauway, e


powszechne jest wykorzystywanie wskanikw do prezentacji KPI, ktre maj z definicji ustalony zakres zmiennoci {-1, 1}.
Skutek zastosowania takich ustawie dla wskanika widoczny jest w podgldzie raportu,
ktry przedstawiony zosta na rysunku 7.118. Na tym samym rysunku pokazana jest
w stanie rozwinitym jedna z kategorii, gdzie widoczne s wskazania dla kadego z jej
towarw. Niestety, w takim stanie tracona jest informacja o wskazaniach dla kategorii
jako caoci. Informacja ta bdzie dostpna dopiero po zwiniciu grupy potomnej.
Rysunek 7.118.
Podgld raportu
ze zdefiniowanym
wskanikiem

Rozdzia 7. Raportowanie

377

Kolejn moliwoci wizualizacji danych jest zastosowanie wykresu. Podstawowy


zestaw form graficznego przedstawiania danych pokazuje rysunek 7.119. W odniesieniu do hurtowni najczciej wykorzystywane bd rnego typu prezentacje trjwymiarowe. W przykadzie zdecydowano si na wykres kolumnowy 3-D Column.
Rysunek 7.119.
Dostpne postaci
wykresw
w Reporting Services

Po umieszczeniu wskazanego typu wykresu w projekcie raportu (rysunek 7.120) konieczne jest okrelenie pl definiujcych wymiary oraz wartoci. Definicje te umieszczane s w panelach powyej, poniej i z prawej strony projektu wykresu. Do wybrania pl moemy zastosowa metod przecignij i upu; moemy te wybra je
z list umieszczonych w naronikach paneli, ktre staj si aktywne po wskazaniu jednego z nich. Na rysunku 7.120 pokazana zostaa taka lista dla przypadku definiowania
wywietlanych na wykresie wartoci, ktrych dostarczy zawarto pola Zysk.
Rysunek 7.120.
Definicje pl
dla wykresu
trjwymiarowego
w Reporting Services

378

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Ostateczn posta projektu wykresu pokazano na rysunku 7.121, gdzie osiami s kategorie i nazwy wojewdztw. Dodatkowo we waciwociach, w grupie Others, zostaa zdefiniowana zakadka o nazwie obrazek (prawy dolny rg rysunku).
Rysunek 7.121.
Projekt raportu
z zakadk dla
wykresu
trjwymiarowego

Jeli w scalonych polach definicji tabeli wywietlajcej dane umiecimy ikon (moe
by rwnie inny element, np. statyczny napis, etykieta), to moliwe jest przypisanie
do niej akcji polegajcej na przeniesieniu wywietlania do miejsca zdefiniowania zakadki (rysunek 7.122). Takie dziaanie jest wykorzystywane przede wszystkim w rozlegych raportach, poniewa znacznie uatwia nawigacj. Tak jak w wikszoci przypadkw, zamiast wartoci statycznej moliwe jest zastosowanie bardziej zoonego
wyraenia.
Rysunek 7.122.
Przypisanie do
kontrolki akcji
przeniesienia
do zakadki

Na analogicznych zasadach moliwe jest zdefiniowanie akcji polegajcej na przeniesieniu akcji do okrelonego, zawartego w projekcie raportu (rysunek 7.123). W tym
przypadku poza wskazaniem nazwy moliwe jest przekazanie parametru, ktry mgby by uyty jako element filtrujcy wywietlane dane.
Powrmy jeszcze do zadania filtrowania. Do tej pory zbudowane zostay tylko filtry
pozwalajce na stosowanie pojedynczych wartoci. Jak ju jednak zauwaono, moliwe jest stosowanie filtrw wielowartociowych. Aby mona byo to przybliy,
w definicji danych Raport Data dodajmy kolejny zestaw rekordw Data Set. Niech
wybiera on identyfikator oraz nazw wojewdztwa.
SELECT IdWojewodztwa, Wojewdztwo FROM Wojewodztwa

Rozdzia 7. Raportowanie

379

Rysunek 7.123.
Przypisanie do
kontrolki akcji
przeniesienia
do raportu

Nastpnie dodajmy parametr o nazwie wojewodztwo, pamitajc, aby zaznaczona bya


opcja Allow multiple values (rysunek 7.124).
Rysunek 7.124.
Definicja parametru
wielowartociowego

W kolejnych krokach na dwch zakadkach, Available Values i Default Values, okrelmy,


e wartoci te bd pobierane z zapytania Get values from a query, a jako rdo
wskamy utworzony przed chwil zestaw rekordw. W zakadce dostpnych wartoci
konieczne jest okrelenie pl definiujcych warto zwracan przez list oraz etykiety
(podobne postpowanie pokazano na rysunkach 7.67 i 7.69). Poniewa okrelono typ
parametru jako Text, w obu przypadkach wskazane zostao pole Wojewdztwo. Oczywicie moliwe jest stosowanie jako pola wartoci identyfikatora, ale wobec niepowtarzalnoci nazw wojewdztw nie jest to konieczne. Pozostaje tylko zdefiniowanie wyraenia filtrujcego dla grupy okrelajcej wojewdztwa, z ktrych pochodz klienci (rysunek
7.125). Poniewa mamy do czynienia z list wartoci, uyty zosta operator IN.
Poniewa wartoci domyln parametru jest pena lista, po uruchomieniu raportu
wywietlane s wszystkie kolumny. Wybranie listy z definicj nazw wojewdztw pozwala na zaznaczenie lub anulowanie zaznaczenia dowolnego zestawu pl sownikowych (rysunek 7.126). Zatwierdzenie tego wyboru i odwieenie raportu (rcznie lub
automatycznie, w zalenoci od ustawie) spowoduje ograniczenie wynikowego zestawu pl.

380

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rysunek 7.125.
Definicja filtrowania
dla parametru
wielowartociowego

Rysunek 7.126. Dziaanie filtrowania wielowartociowego podgld raportu

Na zakoczenie pokamy elementy dodatkowe definicji raportu, jakie stanowi nagwek i stopka. Dodanie ich jest moliwe z menu podrcznego w widoku edycji raportu (rysunek 7.127). Naley jednak pamita, aby wywoywa je z miejsca niezajtego przez adn ze zdefiniowanych w nim kontrolek.
Rysunek 7.127.
Dodawanie nagwka
i stopki raportu

Poza statycznymi elementami (napisy, ikony) w nagwku i stopce najczciej umieszczane s informacje o raporcie. Moemy je wywietli, uywajc zestawu wbudowanych funkcji, przedstawionych na rysunku 7.128. Pozwalaj one na wyprowadzenie
informacji o: czasie wygenerowania raportu (Execution Time), numerze biecej strony (Page Number), cakowitej liczbie stron raportu (Total Pages), nazwie folderu,
w ktrym jest on umieszczony (Report Folder), jego nazwie (Report Name), adresie
serwera (Report Server URL), kwalifikowanej nazwie uytkownika, ktry go wygenerowa (User ID), oraz jzyku i stronie kodowej raportu (Language). W prezentowanym przykadzie uyto tylko niektrych. Naley zauway, e po przeniesieniu do
projektu nazwy wbudowanych funkcji zostan poprzedzone znakiem &.

Rozdzia 7. Raportowanie

381

Rysunek 7.128.
Dostpne wbudowane
funkcje i ich
zastosowanie
w nagwku raportu

Moemy uzna, e opracowywany w tym rozdziale raport dla danych pochodzcych


z hurtowni danych przyj ju swoj ostateczn posta. W tym miejscu zakoczymy rozwaania dotyczce sposobw generowania raportw dla kocowego odbiorcy. Moim
zdaniem Reporting Services jest bardzo dobrym rozwizaniem, poniewa zwalnia
programist z szeregu obowizkw, ktre pojawiaj si podczas tworzenia aplikacji
WWW z zastosowaniem jzykw wyszego rzdu. Jednak wskazane w caym rozdziale moliwoci pozwol Czytelnikom podj wiadom decyzj o wyborze waciwego narzdzia.

382

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Rozdzia 8.

Podsumowanie.
Co dalej z analitycznym
przetwarzaniem danych?
Udao nam si dobrn do koca tej ksiki. Mam nadziej, e Czytelnik jest mniej
zmczony ni ja. Byby to bardzo dobry symptom, poniewa w czasie dobrego wykadu to wykadowca powinien si czu wyeksploatowany, a odbiorcy, studenci, odczuwa peny relaks, wynikajcy ze wiadomoci, e wszystko rozumiej. Jednak nie
powinno temu towarzyszy poczucie, e skoro usyszaem i zrozumiaem, zwalnia
mnie to z trenowania tych umiejtnoci. Nawet najwybitniejsi wirtuozi nie przestaj
wiczy wykonywania ju dobrze znanych utworw. Podobnie powinno by z informatykami, ktrzy powinni trenowa ju zdobyte umiejtnoci, zwaszcza jeli maj
wiadomo, e uywane przez nich narzdzia ulegaj permanentnym zmianom. To
troch tak, jakby wirtuozowi dooy dodatkowe struny. Formalnie mona gra tylko
na tych, ktre byy do tej pory, ale dlaczego nie korzysta z nowych, jeeli mog
nada brzmieniu o wiele lepsz barw.
Zawsze mam poczucie, e materia, ktry przedstawiem, mona by lepiej skomponowa, uoy, zilustrowa. Przewiadczenie to wynika nie tylko z wrodzonego baaganiarstwa, ale wiadomoci, e w zoonej dziedzinie, ktr jest przetwarzanie analityczne, trudno precyzyjnie wyznaczy pocztek i koniec. Wtki zbiegaj si we
wsplnych punktach, co zmusza do ich fragmentarycznego wyjaniania w jednym
miejscu, aby szczegowo omwi je w dalszym wywodzie. Troch na pocieszenie
mog odwoa si do sw Alberta Einsteina: Jeeli zabaaganione biurko jest oznak
zabaaganionego umysu, oznak czego jest puste biurko?. Mam nadziej, e zawarto
tej ksiki jest na tyle uporzdkowana, e pozwoli na szybkie odszukanie niezbdnych
informacji. Jeli Czytelnik poszukuje informacji z zakresu przetwarzania transakcyjnego
i odpowiada mu mj sposb wyjaniania zagadnie z tej dziedziny, to zachcam do
lektury dwch poprzednich moich pozycji Bazy danych. Pierwsze starcie oraz
Oracle 11g SQL i PL/SQL rwnie wydanych przez wydawnictwo Helion.

384

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Tytu rozdziau zmusza mnie nie tylko do dokonania podsumowania tego, co w tej
ksice si znalazo, ale rwnie, a moe przede wszystkim wskazania, czego w niej
nie ma. Ot z ca premedytacj pominite zostay wbudowane w Analysis Services
narzdzia powicone zgbianiu danych Data Mining. Wynika to z tego, e ten na
pozr prosty zestaw narzdzi o do atwej obsudze kryje w sobie gigantyczny potencja.
Wymaga przedstawienia skomplikowanego zestawu poj, nie mniej zoonego ni
ten, ktry opisuje struktury wielowymiarowe, pokazania zoonego aparatu matematycznego, opisujcego kady z zaimplementowanych algorytmw. Sam ten zakres
mgby zaj ksik o porwnywalnej objtoci. A pozostaje jeszcze rozszerzenie
proceduralne DMX jzyka zapyta. Dodatkowo naley zda sobie spraw, e nie wszystkie algorytmy maj swoje odbicie w tych, ktre zaimplementowano w rodowisku
MS SQL Server. Wystarczy porwna je z konkurencyjnymi rozwizaniami oferowanymi przez Oracle (zupenie inne podejcie do problematyki Data Mining) czy ze
specjalizowanym pakietem Statistica. Moim zamiarem jest zmierzenie si z t problematyk w kolejnej ksice i ju teraz budzi to moje obawy, w jakim stopniu bd
w stanie podoa tej tematyce, nie ze wzgldu na brak informacji czy wiedzy, ale na
jej ogrom. Ksika nie zawiera te penych informacji o podstawach skadni SQL
i Transact SQL. Przedstawione zostay te elementy, ktre s konieczne do zrozumienia
poruszanych tu zagadnie. Jeli Czytelnik byby zainteresowany moim ujciem tej problematyki, czekam na sygnay materia ju od dawna istnieje i wymaga tylko opracowania. Rwnie warstwy porednie, suce do migrowania danych, zostay potraktowane marginalnie. Na pierwsze miejsce wysuwa si tutaj zastosowanie jzyka
znacznikw XML, ktry jako format samoformatowalny (samoopisujcy si) stanowi
uniwersalny mechanizm migracji danych midzy dowolnymi bazami danych. Tutaj
te mona stwierdzi, e tematyka pozwalaaby na opracowanie samodzielnej ksiki.
W tej chwili trwaj prace nad systemem uniwersalnego serwera XML z samodzielnym
procesem nasuchu; serwer ten ma tak migracj zapewni (doktorat pod moj opiek). To chyba najwaniejsze tematy wymagajce dalszych studiw i opracowa.
Czytelnik moe teraz zauway, e koniec tej ksiki staje si pocztkiem nowej drogi, ktra jeszcze przed nim. Im wicej wiemy, tym wicej pyta sobie zadajemy i tym
trudniejsze staj si odpowiedzi na nie. Jestemy zatem w sytuacji Marka Twaina:
Byem rad, e mog udzieli prawidowej odpowiedzi, co te uczyniem. Powiedziaem, e nie wiem. I my takich odpowiedzi nie powinnimy unika. wiadcz one
z jednej strony o naszym autokrytycyzmie (cecha na wymarciu), a z drugiej strony
potwierdzaj, e mamy jeszcze wiele do zrobienia, czyli wybrana przez nas dyscyplina nie jest martwa i cigle si rozwija.
No wanie. Dokd w zasadzie podaj hurtownie danych i przetwarzanie analityczne? Pierwszy trend jest atwy do zauwaenia. Pojawiaj si kolejne, nowe funkcje
analityczne (agregujce) zarwno na poziomie przetwarzania po stronie transakcyjnej,
jak i hurtowni danych. Jest to widoczne zwaszcza wtedy, kiedy przeanalizujemy produkty konkurentw i porwnamy ich ofert pod tym wzgldem. Bd one miay bez
wtpienia cz wspln, ale kady producent oferuje funkcjonalnoci charakterystyczne dla swojej platformy. Czasami jest tak, e pojawiaj si one po stronie struktur
wielowymiarowych i jest maa nadzieja na to, e znajd si kiedy take po stronie transakcyjnej. Kolejny aspekt wynika z wydajnoci narzdzi analitycznych. Proponowane
rozwizania integracji danych s coraz wydajniejsze i trudno je zastpi wasnymi
procedurami. W zwizku z tym przyspieszeniu podlega proces adowania hurtowni.

Rozdzia 8. Podsumowanie. Co dalej z analitycznym przetwarzaniem danych?

385

Ma na to rwnie wpyw przechowywanie historii tego procesu, co pozwala na zastosowanie mechanizmw przyrostowych, ograniczajcych liczb przesyanych danych.
W sukurs tym zmianom idzie rozwj sprztu, ale take moliwo konfigurowania
procesw przetwarzania, tak aby byy wykonywane na wielu serwerach rwnolegle
farmy lub klastry. Na koniec pozostaje warstwa prezentacyjna, ktra te oferuje
due zmiany z kad kolejno wprowadzan wersj oprogramowania. Dotyczy to zwaszcza moliwoci prezentacji danych w postaci grafiki wektorowej, zapisywanej w bazie danych. Pozwala to poczy wyniki oblicze z danymi przestrzennymi przedstawianymi na mapie. Jak Czytelnik zapewne pamita, wymiar geograficzny jest jednym
z podstawowych wymiarw hurtowni i moe by wykorzystywany wielokrotnie do
opisania klientw, producentw, dostawcw, sklepw.
Niestety, to jeszcze nie koniec. W czci teoretycznej, powiconej hurtowniom danych (rozdzia 3.), pada stwierdzenie, e na szczeblu kierowniczym nie s potrzebne
dane, lecz informacja. Wiemy, e na poziomie transakcyjnym przetwarzamy dane, ale
czy na pewno skutkiem pracy hurtowni jest ju informacja? Czy nie jestemy tacy jak
jeden z bohaterw Terryego Pratchetta (Ostatni kontynent): Mylak Stibbons nalea do tych nieszczsnych osobnikw dotknitych wiar, e jeli tylko odkryje dostatecznie wiele faktw na temat wszechwiata, wszystko jako nagle nabierze sensu?
Przecie na kocu mamy wysoce przetworzone, ale w dalszym cigu dane. By
moe skromnym wyomem s wspczynniki wydajnoci KPI. Trend zmian to chyba
ju informacja. Niestety, wielo definicji tego interdyscyplinarnego terminu znacznie
utrudnia wytyczenie granicy midzy obydwoma pojciami. Dlatego kolejnym krokiem analizy powinno by bez wtpienia zgbianie danych Data Mining. Czyli wykrywanie wystpowania midzy nimi zalenoci, przewidywanie ich zmian oraz rodzaju tej zmiennoci, wnioskowanie na podstawie przesanek, wykrywanie zalenoci
czasowych, etc. Na pocztku tych docieka pojawiaj si metody statystyczne polegajce w oglnym zarysie na wykrywaniu zgodnoci ze znanymi rozkadami statystycznymi (najczciej z tzw. rozkadem normalnym). Pniej pojawiaj si algorytmy wykrywania podobiestw formalnych grupowanie, wykorzystanie rachunku
prawdopodobiestwa i teorii informacji oraz wiele innych. Wystpuje mnstwo problemw natury zasadniczej, jak np. sposoby reprezentacji danych cigych lub dyskretnych. Najbardziej podstawowy z nich dotyczy wykrycia relacji przyczynowoskutkowych. Jeli nie mamy tej informacji danej jawnie, to okrelenie tego, co jest
przyczyn, jest bardzo trudne; nieco atwiejsze jest wykrycie atrybutu okrelajcego
skutek. Znane mi s prace uhonorowane nagrod Ig Nobla (Antynobel), ktre dostay
to niezbyt chlubne wyrnienie tylko dlatego, e jako przyczyn wybrano nieprzemylan waciwo. Jedn z metod stosowanych w zgbianiu danych jest heurystyka,
ktra moe wydawa si bliska magii, lecz jest pomocna midzy innymi przy rozwizywaniu bardzo skomplikowanych zagadnie NP-zoonych. Nie zawsze te do
koca rozumiemy, jak ona dziaa, a tylko obserwujemy skutki. Przecie jednak, jak
stwierdzi Albert Einstein, gdyby ludzie rozmawiali tylko o tym, co rozumiej, zapadaby nad wiatem wielka cisza. Jeli zawarto tego akapitu wzbudzia w Czytelniku zainteresowanie, zapraszam do lektury kolejnej ksiki, ktr zamierzam napisa
bdzie ona przyblia problematyk zawart w tym podsumowaniu.

386

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Skorowidz
A
Access Data Objects, 61
Access mode, 66
Actions, 361
ADDCALCULATEDMEMBERS, 208, 210, 220,
283
addytywno funkcji agregujcej, 199
ADO, 64
ADO.NET, 64
ADO.NET Destination, 68
AdomdCommand, 328
AdomdDataAdapter, 328
AGGREGATE, 281
AggregateFunction, 199
AggregationPrefix, 200
akcje, 179, 311
CommandLine, 183
Dataset, 183
definiowanie, 180
Drillthrough, 182, 183
Html, 183
Proprietary, 183
Report, 183
Rowset, 183
Statement, 183
Szukaj wartosci, 181
typy akcji, 183
URL, 183, 312
Wywietl mape, 182
Zglebianie, 183
akcje dla raportw, 361
definicja typu akcji, 362
aliasowanie kolumn, 64
ALL, 52
AllMembers, 279
ALTER CUBE, 306

ALTER DATABASE, 21
analityczne przetwarzanie danych, 383
analityczne struktury OLAP, 121
analizy wielowymiarowe, 13
Analysis Services, 57, 119, 121, 187
Ancestor, 232
ANCESTOR, 235, 248, 281
ANCESTORS, 283
AS, 219, 288
ASC, 251
ASCENDANTS, 284
Assemblies, 37
ASSEMBLY, 39
ASSOCIATED_MEASURE_GROUP, 310
atrybuty wymiaru, 192
Attribute, 197
AttributeAllMemberName, 196
AttributeHierarchyDisplayFolder, 192
AttributeHierarchyEnabled, 192
AttributeHierarchyOptimizedState, 192
AttributeHierarchyOrdered, 193
AttributeHierarchyVisible, 193
automatyczne poprawianie bdnych wpisw, 94
automatyczne tworzenie kluczy, 170
autoryzacja, 125
AverageOfChildren, 199
AVG, 51, 242, 258, 262, 281
AXIS, 284

B
Back Up, 10
BACK_COLOR, 233
Banach Stefan, 48
BASC, 252
BATCHSIZE, 113
baza danych, 9

388

Hurtownie danych. Od przetwarzania analitycznego do raportowania

BDESC, 253, 271


biblioteki CLR, 40
bdne wpisy w tabelach relacyjnych, 94
bdy, 198
bdy zapisu, 47
BOTTOMCOUNT, 284
BOTTOMPERCENT, 284
BOTTOMSUM, 284
Browser, 151
BULK INSERT, 113, 115
Business Intelligence, 57
rodzaje projektw, 57
tworzenie projektu, 57
Button, 325
ByAccount, 199

C
C#, 42, 326
CACHE, 64
CALCULATE, 173
CALCULATIONCURRENTPASS, 281
CALCULATIONPASSVALUE, 281
Cancel, 77
CancelEvent, 76
CAPTION, 312
Caption is MDX, 180
Cardinality, 197
CASE, 307
CELL CALCULATION, 314
CELL PROPERTIES, 233
CHECK, 89
CHECK_CONSTRAINTS, 114
Children, 229, 235, 279
CLOSINGPERIOD, 240, 281
CLR, 40
CLUSTERED, 28
COALESCEEMPTY, 261, 281
CODEPAGE, 114
Collation, 196, 200
COM Components, 325
CommandText, 328
COMPUTE, 32
Connection, 328
Connection Manager, 59, 66, 87, 122
Connection Project, 58
Connection Properties, 369
connection string, 46, 122
ConnectionString, 327
Containers, 72
Control Flow, 59
Control Flows Items, 59
Copy Database, 10
CORRELATION, 281

COUNT, 50, 55, 199, 258, 279, 282


COUSIN, 281
COVARIANCE, 282
COVARIANCEN, 282
CREATE ACTION, 311, 312
CREATE CELL CALCULATION, 315
CREATE GLOBAL CUBE, 309
CREATE KPI, 310
CREATE MEMBER, 306
CREATE SET, 309
CREATE SUBCUBE, 288
CREATE TABLE, 110
CreationDate, 76
CreationName, 76
CreatorComputerName, 76
CreatorName, 76
CROSSJOIN, 192, 212, 215, 267, 269, 284
CUBE, 20, 21, 25, 26
Cubes, 141
Current, 280
CurrentMember, 225, 260, 263, 279
CurrentOrdinal, 279
CurrentStorageMode, 196
CustomRollupColumn, 193
CustomRollupPropertiesColumn, 193

D
dane, 48
Data Connections, 61
Data Flow, 59, 60, 61, 86, 94, 95
Data Flow Destinations, 60
Data Flow Sources, 60
Data Flow Task, 59
Data Flow Transformations, 60
Data Marts, 51
Data Mining, 157, 384
Data Set, 365
Data Source, 121
DATAFILETYPE, 114
DataGridView, 325
DataMember, 279
DataSet, 328
DataType, 199
daty, 47
DDL, 288
DEALLOCATE, 36
DefaultMeasure, 200
DefaultMember, 193, 279
definicja kostki, 155
definicja KPIs, 177, 178, 179
definicja acucha poczeniowego, 63, 126
definicja mapowania kolumn, 68
definicja parametru wielowartociowego, 379

Skorowidz
definicja poczenia z baz, 8, 125
definicja pl obliczanych dla raportu, 365
definicja przekierowania bdnych danych
z kontrolki reprezentujcej rdo, 69
definicja samozczenia, 53
definicja skryptu dla zadania Execute SQL, 96
definicja waciwoci zadania przetwarzania
procesu, 81
definicja zadania Job, 105
definicja rda danych ADO, 65
definicja rda danych typu plik Excela, 87
definiowanie
akcje, 180
akcje dla raportw, 361
automatyczne tworzenie kluczy, 170
dostp do atrybutw wymiarw, 186, 187
dostp do definicji hurtowni, 185
dostp do komrek kostki, 186
dostp do kostek, 185
dostp do wymiarw, 186
elementy skadowe przepywu, 96
elementy wymiaru czasu, 152
grupy hierarchiczne, 365
hurtownia danych jako zewntrzne rdo
danych dla MS Excel, 318
mapowanie kolumn, 64
miary, 172
miary ad hoc, 218
nazwane zapytania, 188
operacje na zbiorach atrybutw, 270
poczenia, 62, 123
poczenia dla wymiaru w postaci relacji
referencyjnej, 162
role, 184
sposb zachowania si kontrolki w przypadku
pojawienia si wyjtku, 66
tabela docelowa, 66
typ kalendarza, 153
wymiary, 51
wymiary ad hoc, 232
wymiary czasu, 150
wyraenie filtrujce, 351
zaawansowane elementy kostki, 173
zbiory atrybutw ad hoc, 225
zewntrzne rdo danych dla MS Excel, 318
zoona struktura dla wymiaru czasu, 267
zmienne, 73
rdo danych ADO, 64
DELETE FROM, 169
DENSE_RANK, 30
DependsOnDimension, 196
DESC, 252, 271
DESCENDANTS, 209, 235, 236, 258, 284
Description, 193, 196, 199

389
DESCRIPTION, 312
Destination Column, 68
Detach, 10
diagram perspektywy rda danych, 147, 148
diagram schematu relacyjnego bazy danych, 11
Dimension, 278
Dimensions, 278
DIMENSIONS, 54
Dimensions.Count, 279
DiscretizationBucketCount, 193
DiscretizationMethod, 193
DISPLAY_FOLDER, 310
DisplayFolder, 199
DISTINCT, 136, 285, 360
DistinctCount, 199
DISTINCTCOUNT, 282
DMX SQL, 13
dodawanie do perspektywy rda danych
dodatkowych rde danych, 146
dodawanie kontrolki do panelu narzdziowego
Toolbox, 324
dodawanie miary do kostki, 171
dodawanie pl do rda danych raportu, 350
dodawanie przepywu do definicji pakietu, 60
dodawanie relacji dla wymiaru, 156
dodawanie tabeli do definicji wymiaru, 138
dodawanie wymiaru do definicji kostki, 173
doczanie bazy danych do serwera, 9
dostp do definicji hurtowni, 185
drenie danych, 52, 312
DRILLDOWNLEVEL, 285
DRILLDOWNLEVELBOTTOM, 285
DRILLDOWNLEVELTOP, 285
DRILLDOWNMEMBER, 285
DRILLDOWNMEMBERBOTTOM, 285
DRILLDOWNMEMBERTOP, 285
DRILLTHROUGH, 312
DRILLUPLEVEL, 285
DRILLUPMEMBER, 285
DROP, 288, 289
DROP CELL CALCULATION, 315
DROP MEMBER, 307
DROP SUBCUBE, 289, 294
drzewiasta struktura wymiaru rodzic potomek,
54
Dts.Variables(), 78
Duplicate key, 198
dynamiczne przetwarzanie zapyta, 36

E
edycja poczenia z plikiem Excela, 88
edycja rda danych, 127, 128
edytor wyrae, 93

390

Hurtownie danych. Od przetwarzania analitycznego do raportowania

elementy hurtowni danych, 48


eliminacja wartoci NULL, 260
ERROR, 287
Error log path, 198
ErrorCode, 77
ErrorConfiguration, 196, 200
ErrorDescription, 77
ERRORFILE, 113
EstimatedCount, 193
EstimatedRows, 200
ETL, 46, 47
Evaluate Expression, 92
Excel, 87, 317
definicja ukadu tabeli przestawnej, 320
definiowanie poczenia, 318
definiowanie zewntrznego rda danych,
318
kreator raportu przestawnego, 323
kreator wykresw przestawnych, 322
opcje tabeli przestawnej, 321
tabele przestawne, 321
wybr hurtowni danych, 319
wybr kostki dla zdefiniowanego poczenia
z hurtowni danych, 319
wybr serwera hurtowni danych, 319
wykresy przestawne, 322
EXCEL, 64
EXCEPT, 232, 285
EXCLUDEEMPTY, 258
Execute SQL, 94, 95, 117
Execute SQL Task, 169
ExecutionInstanceGUID, 76
ExecutionStatus, 77
ExecutionValue, 77
EXISTS, 285
Export Data, 10
EXTRACT, 285
Extract, Transform, Load, 46

F
Fact, 157
FIELDTERMINATOR, 113
FILE, 64
File Enumerator, 84
FILTER, 213, 243, 245, 247, 248, 268, 271, 272,
285
filtrowanie w zapytaniach MDX, 246
FIRE_TRIGGERS, 114
Firstchild, 199, 225, 226, 227, 228, 279
FirstNonEmpty, 199
FIRSTROW, 113
FirstSibling, 279
FLATFILE, 64

Flow Task, 89
FONT_FLAGS, 233
FONT_NAME, 233
FONT_SIZE, 233
FOR, 314
For Loop, 72, 73, 74
inkrementacja ptli, 74
licznik, 74
Script, 74
zadania przetwarzania procesu, 80
FORE_COLOR, 233
Foreach ADO, 85
Foreach ADO.NET Schema Rowset, 85
Foreach File, 85
Foreach From Variable, 85
Foreach Item, 85
Foreach Loop, 73, 83
definicja ogranicze, 91
definicja typu mapowania zmiennych, 85
definicja typu przegldanych elementw, 84
definicja zmiennych dla pakietu
z zagniedonymi kontenerami, 90
kody typw obiektw, 85
zadanie Data Flow, 86
Foreach Nodelist, 85
Foreach SMO, 85
FORMAT_STRING, 233
FORMATFILE, 114
formatowanie warunkowe, 233
FormatString, 199
FTP, 64
funkcje agregujce, 14, 50, 262
funkcje agregujce definiujce miary, 199
funkcje agregujce zdefiniowane
przez uytkownika, 35
funkcje analityczne, 273
funkcje jzyka MDX, 280
funkcje rankingowe, 31
funkcje statystyczne, 273
Fuzzy Grouping, 102, 103, 104
definicja kontrolki, 102
Fuzzy Lookup, 95, 96, 100
definicja tabeli sownikowej, 97
definiowanie elementw skadowych
przepywu, 96
definiowanie kolumn tabeli rdowej, 97
mapowanie kolumn tabeli docelowej, 99
zawansowane opcje, 98

G
Gauge, 374
GENERATE, 225, 234, 285
Generate Scripts, 10

Skorowidz

391

generowanie
kostka, 171
plan wykonania zapytania, 16
schemat z poziomu struktury wymiaru, 169
tabela po stronie relacyjnej, 168
GLOBAL CUBE, 309
GOAL, 310
Goal Expression, 177, 179
Google Maps, 364
GROUP BY, 14, 18
GROUPING SETS, 22, 23, 26
GroupingBehavior, 193
grupa miar, 172
grupowanie, 18
grupowanie nad oknem logicznym, 28
grupowanie rozmyte, 102, 103, 104
grupy hierarchiczne, 365
gwiazda, 55, 56

H
HEAD, 285
HIDDEN, 290
hierarchia rodzic potomek, 53
hierarchiczna struktura wymiaru o dwch
poziomach, 52
HIERARCHIZE, 285
Hierarchy, 275, 278
HOLAP, 48
HTTP, 64
hurtownia danych, 43, 384
elementy, 48
proces przetwarzania, 43
struktura, 43
wymiary, 49, 51
zastosowanie, 44
zawarto pojedynczej komrki, 51
Hybrid OnLine Analytical Processing, 48

I
ID, 196
Ignore errors count, 198
IIF, 233, 261, 282
indeksy CLUSTERED, 28
INSERT, 110, 168
INSERTED, 110
InstanceSelection, 193
INSTR, 259
instrukcje warunkowe, 260
integracja danych, 46, 57
Integration Services, 57, 66
InteractiveMode, 76
INTERSECT, 286

INVOCATION, 312
IsAggregatable, 193
ISANCESTOR, 280
ISEMPTY, 260, 261, 280
ISGENERATION, 280
ISLEAF, 280
ISSIBLING, 281
Item, 279, 280

J
JDBC, 46
jeden do wielu, 53
jzyk C#, 326
Job, 105
JOIN, 17, 18, 22, 32

K
kalendarze, 151, 152
KEEPIDENTITY, 114
KEEPNULLS, 114
Key error action, 198
Key not found, 198
KeyColumns, 194
KILOBYTES_PER_BATCH, 114
klucz gwny wymiaru, 164
klucz obcy, 55, 120
kluczowe wskaniki wydajnoci, 177
kod Transact-SQL, 101
kodowanie zmiennych znakowych, 169
kolory okna polece systemowych, 82
komrki, 51
kompaktowanie bazy danych, 101
konfiguracja Reporting Services, 339
kontenery, 72
For Loop, 72, 73, 74
Foreach Loop, 73, 83
Sequence, 73
korelacja, 274
kostka, 54, 141, 154, 159
akcje, 179
definiowanie zaawansowanych
elementw, 173
dodawanie wymiaru, 173
elementy skadowe w procesie
przetwarzania, 145
GLOBAL CUBE, 309
kluczowe wskaniki wydajnoci, 177
KPIs, 177
metody tworzenia, 142
miary, 142
miary kalkulowane, 174

392

Hurtownie danych. Od przetwarzania analitycznego do raportowania

kostka
nazwy kostek, 144
szablony, 171
tabela faktw, 142
waciwoci, 200
wybr miar, 142
wybr wymiaru, 143
wymiary, 143
kostka o strukturze patka niegu, 160
tworzenie, 161
kowariancja populacji, 274
kowariancja prbki, 274
KPIs, 177, 178
kreator definiowania waciwoci obiektu
rda danych ADO, 62
kreator poczenia, 61, 122

L
LAG, 265, 279
Language, 196
LastChild, 199, 227, 279
LastNonEmpty, 199
LASTPERIODS, 286
LASTROW, 114
LastSibling, 279
LEAD, 237, 279
LEAVES, 287
Level, 275, 278
Levels, 279
Levels.Count, 279
liczebno elementw, 50
LINKED SERVER, 116
LINKMEMBER, 281
LINREGINTERCEPT, 282
LINREGPOINT, 282
LINREGR2, 282
LINREGSLOPE, 282
LINREGVARIANCE, 282
lista parametrw typu ReadWrite, 79
LocaleId, 76, 77
LOOKUPCUBE, 282

adowanie danych do schematu, 48


acuch poczeniowy, 46, 63, 122

mapowanie kolumn, 64
MAX, 199, 282
MAXERRORS, 113
MAXROWS, 313
MDX, 121, 179, 203
MDX SQL, 13, 44, 203
MdxMissingMemberMode, 196
MeasureExpression, 199
MEASURES, 54
MEDIAN, 282
MEMBER, 219
MemberNamesUnique, 194
Members, 277, 279, 281
MembersWithData, 194
MembersWithDataCaption, 194
MEMBERTOSTR, 287, 311
meneder pocze, 123
MERGE, 109, 110, 112
Merge Join, 170
MessageBox, 91, 329
metody jzyka MDX, 278
miary, 54
miary ad hoc, 218
miary kalkulowane, 174, 176
waciwoci, 199
migracja danych, 59, 109
MIN, 199, 283
MiningModelID, 196
model patka, 55, 160
modyfikacja struktury hurtowni danych, 146
MOLAP, 48
MONTH, 365
most dostpu do danych, 46
MS Business Intelligence, 317
MS Management Studio, 167
MS SQL Agent, 104
MS SQL Server, 47
MS SQL Server 2008, 7
MsgBox, 78
MSMQ, 64
MSOLAP100, 64
MTD, 223, 245, 286
MultiDimensional eXtension, 44
Multidimensional OnLine Analytical
Processing, 48
MULTIFILE, 64
MULTIFLATFILE, 64

M
MachineName, 76
Maintenance Plan Tasks, 59
Many-to-Many, 157

Name, 280
NameColumn, 194
NAMETOSET, 286
NamingTemplate, 194

Skorowidz

393

nazwane zapytania, 188


tabele rdowe, 188
tworzenie, 189
nazwy baz danych, 125
nazwy kostek, 144
nazwy logiczne poczenia, 126
nazwy symboliczne, 125
New Database, 9
New Dimension, 132
New Measure Group, 172
New Named Query, 146, 187
NextMember, 236, 263, 279
nietrwae struktury wielowymiarowe, 287
No Relationship, 157
NON VISUAL, 289
None, 199
NONEMPTY, 207, 212, 227, 233, 246, 249, 269,
270
NONEMPTYCROSSJOIN, 286
NOTEMPTY, 243
NTILE, 30
NULL, 36, 53, 110, 260
Null key converted to unknown, 198
Null key not allowed, 198
Number of errors, 198
numeracja wierszy, 28

O
obiekty ASSEMBLY, 39
Object Explorer, 9, 204
ODBC, 46, 64
OfflineMode, 76
okna logiczne, 30
okrelanie terminarzy wykona zadania, 107
OLAP, 45, 46, 201
OLE DB, 46, 66, 123
OLEDB, 64
OLEDB connection manager, 86
OLTP, 45
On error action, 198
On Line Analytical Processing, 45
On Line Transactional Processing, 45
OPENINGPERIOD, 239, 281
OPENROWSET, 115
operacje na zbiorach atrybutw, 212, 270
optymalizacja zapyta, 15, 17
ORACLE, 64
ORDER, 114, 251, 253, 286
ORDER BY, 28, 33
OrderBy, 194
OrderByAttribute, 194
ORDINAL, 279, 283
OVER, 28, 39
OverwriteDataSources, 337

P
PackageID, 76
PackageName, 76
pakiety integracyjne, 104
pami, 43
panel wielozakadkowy, 325
panel zapyta MDX, 204
PARALLELPERIOD, 238, 281
Parent, 231, 232, 279
PARTITION BY, 30, 32, 39
partycje logiczne, 28
pena nazwa kwalifikowana, 41
PercentComplete, 77
PERIODSTATE, 243
PERIODSTODATE, 242, 244, 286
perspektywa rda danych, 127, 128, 129
nazwa logiczna perspektywy, 131
tworzenie, 128
widok struktury, 131
waciwoci poczenia, 129
wybr tabel, 130
perspektywy, 119, 120
definiowanie elementw hurtowni, 188
plan wykonania zapytania, 16
pliki bazy danych, 10
patek niegu, 56, 160
podkostka, 288
podraporty, 354
podsumowania, 32
podzia na okna logiczne, 30
Pointer, 66
pole tekstowe, 325
poczenie z baz, 8
poczenie z plikiem Excela, 88, 92
porwnania rozmyte, 100
poziomy definiowania miar i wymiarw
w hurtowni danych, 54
PREDICT, 283
PrevMember, 236, 260, 263, 279
ProactiveCaching, 196, 200
proces integracji danych, 46
proces przetwarzania, 43
ProcessingGroup, 196
ProcessingMode, 196, 200
ProcessingPriority, 196, 200
Product Template, 163, 164
ProgressCountHigh, 77
ProgressCountLow, 77
ProgressDescription, 77
projekt Analysis Services, 121
projekt Business Intelligence, 57
projekt hurtowni danych, 122
Propagate, 77

394

Hurtownie danych. Od przetwarzania analitycznego do raportowania

Properties, 280
przecignij i upu, 174
przekroje, 52
przepyw, 60, 89
przeszukiwanie elementw zdefiniowanej kolekcji
obiektw, 83
przetwarzanie, 43
przetwarzanie analityczne, 43, 45, 384
przetwarzanie struktur mieszanych, 48
przetwarzanie transakcyjne, 45
przetwarzanie wymiaru, 137
przycisk polecenia, 325
przypisanie uytkownikw do roli, 184
puste transakcje, 47

Q
QTD, 223, 245, 286
Query Builder, 332, 333, 370
Query Designer, 349

R
RANK, 30, 283
raportowanie, 317
akcje, 361
Excel, 317
grupy hierarchiczne, 365
jzyki wyszego rzdu, 324
Reporting Services, 331
synchronizowanie raportw, 346
raportowanie dla danych pochodzcych
z hurtowni, 369
definicja pola sterujcego wskazaniami
wskanika Gauge, 375
filtrowanie, 373
KPI, 374
rozmieszczenie pl zwracanych
przez zapytanie, 372
tworzenie poczenia z hurtowni, 370
tworzenie zapytania, 370
waciwoci skali dla wskanika Gauge, 375
wskaniki, 374
wybr kostki rdowej, 371
raporty dla hurtowni danych, 317
raporty o strukturze macierzowej, 356
definicja rozmieszczenia pl, 357
definicja waciwoci parametru
pobierajcego dane z zapytania, 359
dodawanie rda danych, 358
widok projektu, 357
ReadWrite, 79
Referenced, 157

Regular, 157
relacje, 157, 197
relacje rodzic potomek, 52
Relational OnLine Analytical Processing, 48
RelationshipType, 197
Reporting Services, 58, 331
definicje pl dla wykresu trjwymiarowego,
377
definicje serwera WWW, 341
definiowanie waciwoci raportu, 337, 338
definiowanie wyraenia filtrujcego, 351
dodawanie pl do rda danych raportu, 350
filtrowanie wielowartociowe, 380
katalog wirtualny, 344
konfiguracja, 339
konfiguracja serwera WWW, 339
nagwek raportu, 380
nazwa raportu, 338
parametry wielowartociowe, 379
podraporty, 354
Preview Report, 336
przypisanie do kontrolki akcji przeniesienia
do zakadki, 378
Report Builder, 345
repozytorium, 342, 343
serwer WWW, 339
sposb odwieania danych, 349
sposb uwierzytelnienia, 341
stopka raportu, 380
synchronizowanie raportw, 346
szata graficzna raportu, 336
testowanie serwera WWW, 342
tryb autoryzacji, 341
tworzenie aplikacji raportujcej, 331
tworzenie poczenia ze rdem danych, 332
tworzenie raportu, 332
tworzenie rda danych, 331
tworzenie rdowego zapytania dla raportu,
332
wizualna prezentacja wynikw, 334
wskaniki, 374
wybr graficznej postaci raportu, 335
wykresy, 377
zmiana waciwoci raportu, 349
rdo danych, 331
Restore, 10
RGB, 233
rodzaje kalendarzy, 152
rodzaje relacji, 157
ROLAP, 48
role, 184
role o niepenych uprawnieniach, 185
ROLLUP, 20, 21, 23, 24, 25
ROLLUPCHILDREN, 283

Skorowidz

395

ROOT, 52, 287


RootMemberIf, 194, 195
ROW_NUMBER, 28, 30
ROWS_PER_BATCH, 114
ROWTERMINATOR, 113
rzeczywisty wymiar czasu, 151

S
samozczenie, 53, 54
SAPBI, 64
Scheduler, 106
Script, 74
ScriptCacheProcessingMode, 200
ScriptErrorHandlingMode, 200
SELECT, 13, 14, 17, 136
Sequence, 73
Serializable, 37
SESSION CUBE, 290
sesyjne zbiory atrybutw, 309
SET, 225
SETTOARRAY, 280
SETTOSTR, 287
Shrink, 10
Shrink Database, 101
Siblings, 276, 279
Similarity threshold, 98
skadnia nazewnictwa tabeli, 166
skadnice danych, 51
skoroszyt Excela, 87
skrypty SQL, 10
SMOServer, 64
SMTP, 64
Solution Explorer, 126, 184
sortowanie, 251
Source, 196, 199
SourceDescription, 77
SourceID, 77
SourceName, 77
sposb obliczania miary, 174
sprawdzanie zgodnoci danych ze sownikiem, 94
SQL, 13, 44
SQL Server Destination, 88, 89
SQL Server Management Studio, 7
SqlClient Data Provider, 62
sqlcmd, 82
SQLMOBILE, 64
StartTime, 76
STATEMENT, 312
STATUS, 310
Status Expression, 177, 179
statystyka klienta, 17
STDEV, 283

STDEVP, 283
sterowniki dostpu do danych, 46, 64, 124
Stop on error, 198
stopie izolacji transakcji, 37
StorageLocation, 200
StorageMode, 196, 200
stosowanie zapyta SQL do migracji danych, 109
STRIPCALCULATEDMEMBERS, 286
strojenie bazy danych, 17
STRTOMEMBER, 281
STRTOSET, 286
STRTOTUPLE, 287
STRTOVALUE, 283
struktura hurtowni danych, 43, 49, 132
modyfikacja, 146
struktura uprawnie do korzystania z hurtowni
danych, 184
SUBSET, 286
SUM, 50, 199, 232, 242, 258, 283
suma, 50
synchronizacja danych pochodzcych z rnych
rde, 48
synchronizacja raportw, 346
system transakcyjny, 45
szablony, 164
szablony kostki, 171
szablony wymiaru, 163
szacowany plan wykonania zapytania, 16

rednia, 51

T
TabControl, 325
tabela faktw, 142, 144
tabele porednie, 163
tabele powizane, 138
tabele przestawne, 321
TABLOCK, 114
Tabular Data Stream Protocol, 17
TAIL, 286
TargetDataSourceFolder, 337
TargetReportFolder, 337
TargetServerURL, 337
TaskID, 76
TaskName, 76
TaskTransactionOption, 76
TDS, 17
tematyczne hurtownie danych, 51
TERADATA, 64
terminarz wykonania zadania, 107

396

Hurtownie danych. Od przetwarzania analitycznego do raportowania

testowanie
nietrwae struktury wielowymiarowe, 287
wskaniki wydajnoci, 178
TextBox, 325
This, 280
TOGGLEDRILLSTATE, 286
Toolbox, 59, 324, 325
TOPCOUNT, 176, 254, 256, 272, 286
TOPPERCENT, 255, 256, 257, 286
TOPSUM, 258, 286
ToString(), 78
Transact-SQL, 13, 37, 101
TREND, 310
Trend Expression, 178, 179
trend zmian, 178
TRUNCATE, 95
TRUNCATE TABLE, 95, 169
tuning bazy danych, 17
TUPLETOSTR, 287
tworzenie
analityczne struktury OLAP, 121
baza danych, 9
hurtownia danych, 119
hurtownia danych z zastosowaniem
tabel porednich, 163
kostka, 141, 154
kostka o strukturze patka niegu, 161
kostka sesyjna, 290
miary ad hoc, 218
miary kalkulowane, 174, 175
nazwane zapytania, 188
nietrwae struktury wielowymiarowe, 287
perspektywa rda danych po stronie
hurtowni, 128
podkostka, 288
projekt, 121
projekty Business Intelligence, 57
raporty dla hurtowni danych, 317
struktura hurtowni danych, 132
wymiary, 132, 170
wyraenia opisujce miary kalkulowane, 174
rdo danych, 121, 122
Type, 195

U
UnaryOperatorColumn, 195
UNION, 270, 287
UniqueName, 280
UnknownMember, 196, 279
UnknownMemberName, 196
UNORDER, 287
UPDATE CUBE, 292, 294, 295
USE_EQUAL_ALLOCATION, 298
USE_EQUAL_INCREMENT, 298

USE_WEIGHTED_ALLOCATION, 298
USE_WEIGHTED_INCREMENT, 298
uprawnienia do korzystania z hurtowni danych,
184
uruchamianie pakietw integracyjnych, 104
Usage, 195
USE_EQUAL_ALLOCATION, 297, 298
USE_EQUAL_INCREMENT, 297, 298
USE_WEIGHTED_ALLOCATION, 297, 298
USE_WEIGHTED_INCREMENT, 298, 302
UserName, 76
USERNAME, 287
USING, 109
ustanawianie klucza wymiaru, 165
usterki przetwarzania, 47
usuwanie definicji podkostki, 294
uwierzytelnianie, 7

V
VALIDMEASURE, 281
Value Expression, 179
ValueColumn, 195
VAR, 283
VariableDescription, 77
VariableID, 77
Variables, 73
VARIANCE, 283
VARIANCEP, 283
VARP, 283
VB, 42
VersionBuild, 76
VersionComment, 76
VersionGUID, 76
VersionMajor, 76
VersionMinor, 76
View T-SQL, 101
Visible, 199, 200
VISUALTOTALS, 287

W
wartoci NULL, 260
WHEN MATCHED, 110
WHEN NO MATCHED, 110
WHERE, 215, 247, 264, 288
WITH, 19, 219
WITH CUBE, 21
WITH ROLLUP, 20
waciwoci atrybutw wymiaru, 192
waciwoci kostki, 200
waciwoci miary, 199
waciwoci relacji, 197

Skorowidz

397

waciwoci wymiaru, 196


waciwoci zadania przetwarzania procesu, 81
WMI, 64
WriteEnabled, 196
wspczynniki wydajnoci KPI, 310
WTD, 223, 245, 287
wybr acucha poczeniowego, 63
wybr rodzaju relacji, 157
wybr rda danych, 62
wykonywanie zapytania SQL, 169
wykresy, 377
wykresy przestawne, 322
wymiar czasu, 150
definiowanie elementw, 152
definiowanie zoonej struktury, 267
kalendarze, 151
wymiary, 49, 54
atrybuty, 138, 192
atrybuty numeryczne, 54
atrybuty opisowe, 54
dodawanie tabeli, 138
edycja, 135
kolumna klucza, 133
kolumna nazwy, 133
nazwa logiczna, 135
opis procesu przetwarzania, 137
przetwarzanie, 135
sposoby tworzenia, 132
stan przetwarzania, 136
szablony, 133
tabela, 133
tabele powizane, 138
tworzenie, 132
waciwoci, 196
wybr atrybutw, 134
wykaz tabel, 139
wymiary oparte na cigych atrybutach, 190
wyznaczanie przedziaw i zakresw, 251
wyraenia MDX, 179
wywietlanie
komunikaty, 80
wiele poziomw hierarchii, 234
wyznaczanie miar, 230
wyznaczanie miar jako wyrae dla rnych
elementw i poziomw hierarchii, 236
wyznaczanie podsumowa, 34
wyznaczanie przedziaw i zakresw dla
wymiarw, 251

X
XML, 121

Y
YTD, 223, 243, 287

Z
zadania Job, 104, 105
zadania Tasks, 72
zapytania analityczne, 13
COMPUTE, 32
CUBE, 20
elementy, 13
funkcje agregujce, 14
generowanie biecego planu wykonania
zapytania, 16
GROUP BY, 18
GROUPING SETS, 23
grupowanie, 18
JOIN, 18
numeracja wierszy, 28
optymalizacja skadni, 15
plan wykonania zapytania, 16
ROLLUP, 20, 24
statystyka klienta, 17
zapytania DDL, 288
zapytania definiowane po stronie OLAP, 187
zapytania MDX, 203, 329
ADDCALCULATEDMEMBERS, 208, 210,
220
akcje, 311
ALTER CUBE, 306
ANCESTOR, 235, 248
AS, 219
AVG, 258, 262
BASC, 252
BDESC, 253, 271
CASE, 307
CLOSINGPERIOD, 240
COALESCEEMPTY, 261
COUNT, 258
CREATE KPI, 310
CREATE MEMBER, 306
CREATE SET, 309
CREATE SUBCUBE, 288
CROSSJOIN, 212, 215, 269
definiowanie miar ad hoc, 218
definiowanie operacji na zbiorach atrybutw,
270
definiowanie zbiorw atrybutw ad hoc, 225
definiowanie zoonej struktury dla wymiaru
czasu, 267
DESC, 271

398

Hurtownie danych. Od przetwarzania analitycznego do raportowania

zapytania MDX
DESCENDANTS, 209, 235, 236, 258
drenie danych, 312
DROP, 289
DROP MEMBER, 307
DROP SUBCUBE, 294
eliminacja wartoci NULL, 260
EXCLUDEEMPTY, 258
FILTER, 213, 243, 247, 248, 268, 271
filtrowanie, 216, 246
funkcje, 280
funkcje agregujce, 262
funkcje analityczne, 273
funkcje statystyczne, 273
GENERATE, 225, 234
GLOBAL CUBE, 309
IIF, 233, 261
INSTR, 259
instrukcje warunkowe, 260
ISEMPTY, 260, 261
kostka sesyjna, 290
LAG, 265
LEAD, 237
MEMBER, 219
nietrwae struktury wielowymiarowe, 287
NONEMPTY, 207, 212, 227, 249, 269, 270
ON AXIS, 206
ON COLUMNS, 205, 206
ON ROWS, 206
OPENINGPERIOD, 239
operacje na zbiorach atrybutw, 212
ORDER, 251, 253
PARALLELPERIOD, 238
PERIODSTATE, 243
PERIODSTODATE, 242, 244
podkostka, 288
porzdkowanie malejce, 253
porzdkowanie rosnce, 252
SESSION CUBE, 290
sesyjne zbiory atrybutw, 309
SET, 225
sortowanie, 251
SUM, 258
TOPCOUNT, 254, 256
TOPPERCENT, 255, 256, 257
TOPSUM, 258
tworzenie czonka, 306

UNION, 270
UPDATE CUBE, 292, 294, 295
USE_EQUAL_ALLOCATION, 297, 298
USE_WEIGHTED_ALLOCATION, 297, 298
USE_WEIGHTED_INCREMENT, 302
wartoci null, 207, 216
WHERE, 215, 216, 217, 247, 264
WITH, 219
wskazywanie elementw potomnych
lub nadrzdnych, 230
wspczynniki wydajnoci KPI, 310
wymiary, 211
wywietlanie miar, 208
wywietlanie wielu poziomw hierarchii, 234
wyznaczanie miar, 230
wyznaczanie miar jako wyrae dla rnych
elementw i poziomw hierarchii, 236
wyznaczanie przedziaw
i zakresw dla wymiarw, 251
zakres oblicze, 223
zapytania wybierajce, 278
zestaw atrybutw, 208, 209
zapytania podsumowujce, 33
zapytania SQL, 119
zawarto pojedynczej komrki, 51
zgbianie danych, 13
zgodno danych ze sownikiem, 94
zmiana waciwoci raportu, 349
zmienne, 73
zmienne systemowe, 74, 76

rdo danych, 61, 121


ADO, 61
baza danych, 125
edycja, 127
acuch poczeniowy, 122
meneder pocze, 123
nazwa logiczna poczenia, 126
sterowniki, 124
tryb autoryzacji, 125
tworzenie, 122
uytkownik, 126

Notatki

You might also like