Professional Documents
Culture Documents
Ksigarnia internetowa
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 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,
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:
na poziomie instancji serwera, np. porednie stany sortowa, stany kursorw, etc.;
model baza stanowica szablon dla kadej nowo tworzonej bazy danych,
Rozdzia 1. Wstp
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
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
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
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
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
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
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)
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
16
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).
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
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.
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
20
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
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.
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
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
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
Poniewa w przykadzie zastosowano zwyke grupowanie z wykorzystaniem wszystkich atrybutw, obliczone sumy dotycz osobno kadego z towarw (tabela 2.5).
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
M330
53,01
...
...
...
...
...
lskie
KNURW
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)
24
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
M330
53,01
dzkie
ZGIERZ
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.
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
Akwarela
721,89
NULL
NULL
NULL
WINDSOR PLC
Analiza
1840,32
...
....
...
....
....
NULL
NULL
Zestaw
kominkowy
1103,30
NULL
NULL
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
Mikrofala
4973,76
NULL
NULL
Mikser A1
2197,00
NULL
NULL
Toster
463,80
NULL
NULL
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
26
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
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
Zestaw Lux
1742,40
NULL
NULL
NULL
Zestaw Lux
1742,40
NULL
NULL
NULL
NULL
92984,44
NULL
NULL
NULL
7634,56
NULL
NULL
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
27
NazwaProducenta
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
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
28
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.
29
Nazwisko
Wzrost
NumerWiersza
Kurek
2.08
Konarski
2.08
Pogorzelski
2.07
Blicharz
1.64
48
Rybiski
1.63
49
ozowski
1.63
50
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
30
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
31
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
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
288,63
61842,63 21735,09
2994,54
1443,15
Wartosc
Miasto
SumaMiasto
KUTNO
NazwaTowaru
dzkie
Wojewdztwo
SumaProducent
SumaWojewodztwo
NazwaProducenta
...
dzkie
KUTNO
384,84
61842,63 21735,09
2994,54
1443,15
...
...
...
...
...
...
...
dzkie
ZGIERZ
M330
5,89
61842,63 8691,34
53,01
53,01
dzkie
ZGIERZ
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
33
34
Nazwisko
IdOsoby
Brutto
Nazwisko
IdOsoby
Brutto
Nazwisko
IdOsoby
Brutto
Nazwisko
IdOsoby
Brutto
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
xg = n
i =1
36
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
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
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
40
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
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
41
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
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
kolumn;
model przechowywania danych adekwatny do potrzeb analizy pozwala to
(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,
45
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.
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
49
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
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
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
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
...
...
53
ALL
2006
1. kwarta
stycze
luty
marzec
...
4. kwarta
padziernik
listopad
grudzie
...
2009
1. kwarta
stycze
luty
marzec
...
4. kwarta
padziernik
listopad
grudzie
Osoby
IdOsoby
Nazwisko
IdSzefa
IdOsoby
...
Nazwisko
Kowalski
Nowak
Janik
IdSzefa
Wilk
Lis
Kowal
Pawlak
Kowalik
54
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
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
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.
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
58
Rysunek 4.2.
Tworzenie nowego
projektu
Rysunek 4.3.
Tworzenie nowego
projektu wybr
jego rodzaju oraz
definiowanie jego
nazwy i lokalizacji
(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.
59
Rysunek 4.4.
Widok pustego
projektu
60
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.
61
Rysunek 4.7.
Obiekty dostpne
w pasku
narzdziowym
Toolbox
do definiowania
zada Data Flow
62
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
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
Tabela 4.1. Wbudowane sterowniki do poczenia ze rdami danych dostpne z poziomu SQL Server
Integration Services
Typ
Opis
ADO
ADO.NET
CACHE
EXCEL
FILE
FLATFILE
FTP
HTTP
MSMQ
MSOLAP100
MULTIFILE
MULTIFLATFILE
OLEDB
ODBC
SMOServer
SMTP
SQLMOBILE
WMI
ORACLE
SAPBI
TERADATA
65
Rysunek 4.12.
Pena definicja rda
danych ADO
Rysunek 4.13.
Definiowanie aliasw
dla wyjciowych
kolumn kontrolki
66
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
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
68
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.
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
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.
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
IdOsoby
Opis
ErrorCode
ErrorColumn
I Nagroda
-1071607683
II Nagroda
-1071607683
III Nagroda
-1071607683
Wyrnienie
-1071607683
Nagroda
-1071607683
...
...
...
...
...
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.
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
Rysunek 4.26.
Panel zmiennych dla
pakietu zawierajcego
kontener 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
75
Rysunek 4.28. Definicja parametru typu ReadWrite dla skryptu przy wykorzystaniu okna dialogowego
Select Variable
76
Opis
CancelEvent
CreationDate
CreatorComputerName
CreatorName
ExecutionInstanceGUID
InteractiveMode
LocaleId
MachineName
OfflineMode
PackageID
PackageName
Nazwa pakietu.
StartTime
UserName
VersionBuild
VersionComment
VersionGUID
VersionMajor
VersionMinor
Opis
LocaleId
Opis
CreationName
Nazwa zadania.
LocaleId
TaskID
TaskName
TaskTransactionOption
77
Opis
Zdarzenie
Cancel
OnError OnWarning
OnQueryCancel
ErrorCode
Identyfikator bdu.
OnError
OnInformation
OnWarning
ErrorDescription
OnError
OnInformation
OnWarning
ExecutionStatus
OnExecStatusChanged
ExecutionValue
OnTaskFailed
LocaleId
Wszystkie
PercentComplete
OnProgress
ProgressCountHigh
OnProgress
ProgressCountLow
OnProgress
ProgressDescription
OnProgress
Propagate
Wszystkie
Wszystkie
SourceID
Wszystkie
SourceName
Wszystkie
VariableDescription
Opis zmiennej.
OnVariableValueChanged
VariableID
OnVariableValueChanged
78
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
79
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
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
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
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
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]
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"
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
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
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.
85
Opis
Foreach ADO
Foreach ADO.NET
Schema Rowset
Foreach File
Foreach Item
Foreach Nodelist
Foreach SMO
Rysunek 4.38.
Definicja typu
mapowania
zmiennych
dla kontenera
Foreach Loop
Rysunek 4.39.
Definicja przypisania
zmiennej kontenera
do parametru zadania
przetwarzania skryptu
86
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
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.
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
Rysunek 4.44.
Edycja poczenia
z plikiem Excela
Rysunek 4.45.
Edycja waciwoci
poczenia z plikiem
Excela przypisanie
zmiennych
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
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
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.
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
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
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
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.
95
Rysunek 4.59.
Definicja
podstawowych
waciwoci zadania
Execute SQL
96
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.
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
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
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
0,7512 0,9090
maopolskie 0,6349
0,4982 0,6349
Hem
Chem
lubelskie
lubelskie
0,7957 0,4960
0,7957
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.
101
102
_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
...
...
...
...
...
...
...
...
103
104
_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)
105
Rysunek 4.72.
Podstawowe elementy
definicji zadania Job
Rysunek 4.73.
Podstawowe elementy
definicji krokw
zadania Job
106
Rysunek 4.74.
Podstawowe elementy
definicji pojedynczego
kroku
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.
Rysunek 4.76.
Okrelenie terminarzy
wykona zadania
107
108
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
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.
109
110
111
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
112
Product_Name
Category
Category_Name
Mazurki FCh
Muzyka
...
...
...
...
Fizyka
19
Podrczniki
Statyw AX
Akcesoria
...
...
...
...
15
Luneta stand
Optyka
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
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'
)
zmiana wiersza;
FIRSTROW od ktrego wiersza naley czyta dane z pliku rdowego;
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
114
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.
116
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)
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
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
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
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
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
123
Rysunek 5.5.
Tworzenie rda
danych
definiowanie
poczenia
Rysunek 5.6.
Tworzenie rda
danych meneder
pocze
124
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
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
wraz z hasem;
wskazanie uytkownika okrelonego w definicji acucha poczeniowego;
operacyjnego.
126
Rysunek 5.10.
Tworzenie rda
danych wybr
uytkownika
uwierzytelnianego
w Analysis Services
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.
127
Rysunek 5.12.
Edycja rda danych
opnienia);
maksymalna liczba rwnolegych pocze ze rdem (domylnie 10);
opis rda danych pozwalajcy na precyzyjn, przyjazn dla uytkownika
128
Rysunek 5.13.
Edycja rda danych
zakadka General
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
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
130
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.
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.
132
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
hurtowni danych;
wygenerowanie wymiaru na podstawie dostpnego szablonu, co odpowiada
133
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
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.
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
136
Rysunek 5.30.
Wymiar
przetworzenie
Rysunek 5.31.
Wymiar
konieczno pobrania
danych (deployment)
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.
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
Rysunek 5.35.
Wymiar po
przetworzeniu
konieczne jest
ponowne poczenie
(Reconnect)
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
139
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
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.
141
Rysunek 5.43.
Wartoci atrybutw
dla hierarchii cz
wartoci kategorii ma
poziom podrzdny
142
Rysunek 5.45.
Tworzenie kostki
metody
Rysunek 5.46.
Wybr tabeli faktw
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
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.
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
Rysunek 5.52.
Zawarto kostki
po przetworzeniu
147
Rysunek 5.55. Diagram perspektywy rda danych (przed zdefiniowaniem zcze z perspektywami)
148
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
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
150
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
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)
152
Rysunek 5.64.
Definiowanie
elementw
wymiaru czasu
Opis
Standard
Fiscal
Reporting
Manufacturing
ISO 8601
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
Rysunek 5.67.
Dane wymiaru
po przetworzeniu
(hierarchia czciowo
rozwinita)
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
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
157
Opis
No Relationship
Regular
Fact
Referenced
Many-to-Many
Data Mining
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
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
159
Rysunek 5.77.
Wymiar towaru
z czciowo
rozwinit hierarchi
o czterech poziomach
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
161
Rysunek 5.81.
Kostka z wymiarami
w strukturze patka
niegu
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
Rysunek 5.83.
Definiowanie
pocze dla wymiaru
Lokalizacja w postaci
relacji referencyjnej
Rysunek 5.85. Skutek dodania kopii wymiaru Lokalizacja (automatyczne wykrycie poczenia referencyjnego)
163
164
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).
165
Rysunek 5.89.
Ustanowienie klucza
wymiaru
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
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.
167
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
168
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
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
171
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
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.
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
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
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
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
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
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
179
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
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
Rysunek 5.113.
Definiowanie akcji
Szukaj wartosci
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
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 + "®n1=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
Caption is MDX
TRUE
" + [Towar_calosc].[Miasto].currentmember.name
Rysunek 5.116.
Akcja URL Wyswietl
mape odwoanie
Wyraenie
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.
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
Dataset
Drillthrough
Html
Proprietary
Report
Rowset
Statement
URL
184
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
185
Rysunek 5.121.
Rola o niepenych
uprawnieniach
uaktywniaj si
zakadki na prawo
od Members
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
Rysunek 5.124.
Definicja dostpu
do komrek kostki
Rysunek 5.125.
Definicja dostpu
do wymiarw
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
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
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.
190
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
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
Opis
AttributeHierarchyDisplayFolder
AttributeHierarchyEnabled
AttributeHierarchyOptimizedState
193
Opis
AttributeHierarchyOrdered
AttributeHierarchyVisible
CustomRollupColumn
CustomRollupPropertiesColumn
DefaultMember
Description
DiscretizationBucketCount
DiscretizationMethod
EstimatedCount
GroupingBehavior
ID
InstanceSelection
IsAggregatable
194
Opis
KeyColumns
MemberNamesUnique
MembersWithData
MembersWithDataCaption
Name
NameColumn
NamingTemplate
OrderBy
OrderByAttribute
RootMemberIf
195
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
UnaryOperatorColumn
Usage
ValueColumn
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
Opis
AttributeAllMemberName
Collation
CurrentStorageMode
DependsOnDimension
Description
ErrorConfiguration
ID
Language
MdxMissingMemberMode
MiningModelID
Name
ProactiveCaching
ProcessingGroup
ProcessingMode
ProcessingPriority
Source
StorageMode
Type
UnknownMember
UnknownMemberName
WriteEnabled
197
Opis
Attribute
Nazwa atrybutu.
Cardinality
Name
RelationshipType
Visible
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
Opis
Duplicate key,
Null key converted to unknown,
Null key not allowed
Stop on error
Number of errors
On error action
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.
199
Opis
AggregateFunction
DataType
Description
DisplayFolder
FormatString
ID
MeasureExpression
Name
Source
Visible
Addytywna
Opis
Sum
Tak
Count
Tak
Min
Semi
Max
Semi
DistinctCount
Nie
None
Nie
ByAccount
Semi
AverageOfChildren
Semi
FirstChild
Semi
LastChild
Semi
FirstNonEmpty
Semi
LastNonEmpty
Semi
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
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
Collation
DefaultMeasure
Description
ErrorConfiguration
EstimatedRows
ID
Language
Name
ProactiveCaching
ProcessingMode
ProcessingPriority
ScriptCacheProcessingMode
ScriptErrorHandlingMode
Source
StorageLocation
StorageMode
Visible
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
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
Rysunek 6.1.
czenie si
z hurtowni danych
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.
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
206
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
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
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
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
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
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
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
210
Tabela 6.5. Skutek wykonania zapytania wyznaczajcego miary dla wskazanej kategorii towarw i jej dzieci
Ilosc
Wartosc
Wartosc Zakupu
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
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
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
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]
215
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
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
217
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
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
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
220
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
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
222
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
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-
223
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
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
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
...
...
...
...
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
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)
227
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
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)
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)
229
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]
230
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)
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
231
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
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]
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,
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
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})
)
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])
236
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)
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.
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]
238
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'
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
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
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
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)
243
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
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)
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
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
...
...
246
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
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)
248
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)
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)
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])
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
Tabela 6.53. Skutek wykonania zapytania wyznaczajcego wszystkie miary dla wszystkich miast,
z ktrych pochodz klienci
Ilosc
Wartosc
Wartosc Zakupu
...
...
...
...
...
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
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
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
252
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
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]
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
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
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
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
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
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(
255
Tabela 6.59. Skutek wykonania zapytania wyznaczajcego dziesi miast o najwikszej wartoci sprzeday
KUTNO
Ilosc
Wartosc
Wartosc Zakupu
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
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
Tabela 6.60. Skutek wykonania zapytania wyznaczajcego dziesi miast o najwikszej wartoci
sprzeday oraz sum sprzeday dla pozostaych
Ilosc
Wartosc
Wartosc Zakupu
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
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
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
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
GDASK
76
6500.66
5011.47
22
KUTNO
102
8135.73
6016.8
34
BRZESZCZE
53
4185.32
3231.43
19
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
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]))
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
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
KAMIE
KRAJESKI
49
3600.02
2765.76
19
KATOWICE
26
1978.98
1416.93
260
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
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]
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
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)
...
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)
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)
...
...
...
...
266
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)
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]
268
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,
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
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(
271
Tabela 6.76. Skutek wykonania zapytania wywietlajcego warto sprzeday wedug miast, z ktrych
pochodz producenci, dla trzech wybranych wojewdztw
All
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
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
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
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
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
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)
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
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)
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
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
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
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
Hierarchia.Dimension
Poziom.Dimension
Czonek.Dimension
Dimensions(Liczba)
Dimensions(Nazwa)
Czonek.Level
279
Opis
Hierarchia.Levels (numer)
Hierarchia.Levels (nazwa)
Hierarchia.CurrentMember
Czonek.DataMember
Hierarchia.DefaultMember
Czonek.FirstChild
Czonek.FirstSibling
Krotka.Item( Index )
Czonek.Lag(Index)
Czonek.LastChild
Czonek.LastSibling
Czonek.Lead(Index)
Czonek.NextMember
Czonek.Parent
Czonek.PrevMember
Czonek.UnknownMember
Hierarchia.UnknownMember
Dimensions.Count
Hierarchia.Levels.Count
Krotka.Count
Poziom.Ordinal
Czonek[.Value]
Hierarchia.AllMembers
Poziom.AllMembers
Czonek.Children
Zbir.CurrentOrdinal
Hierarchia.Members
Poziom.Members
Czonek.Siblings
280
Opis
Wymiar.Name
Hierarchia.Name
Poziom.Name
Czonek.Name
Czonek.Properties
(Waciwo [, TYPED])
Wymiar.UniqueName
Hierarchia.UniqueName
Poziom.UniqueName
Czonek.UniqueName
This
Zbir.Current
Zbir.Item(Indeks)
Zbir.Item(acuch1
[, acuch2,...n])
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 ])
IsAncestor(Czonek1, Czonek2)
IsEmpty(Warto)
IsGeneration(Czonek, Generacja)
IsLeaf(Czonek)
281
Opis
IsSibling(Czonek1, Czonek2)
Ancestor(Czonek, Poziom)
Ancestor(Czonek, Odlego)
ClosingPeriod([Poziom [,
Czonek]])
Cousin(Czonek, Potomek)
LinkMember(Czonek,
Hierarchia)
Members(Nazwa)
OpeningPeriod([Poziom [,
Czonek]])
ParallelPeriod([Poziom [,
Indeks [, Czonek]]])
StrToMember(Nazwa
[,CONSTRAINED] )
ValidMeasure(Krotka)
Aggregate(Zbir [, Liczba ])
Avg(Zbir [, Liczba])
CalculationCurrentPass()
CalculationPassValue (Liczba,
Indeks [, ABSOLUTE |
RELATIVE [, ALL]])
CalculationPassValue (acuch,
Indeks [, ABSOLUTE |
RELATIVE [, ALL]])
CoalesceEmpty(Wyraenie1 [,
Wyraenie2,...n] )
CoalesceEmpty(acuch1 [,
acuch2,...n] )
Correlation(Zbir, Liczba_y [,
Liczba_x ] )
282
Opis
Count(Zbir [,
(EXCLUDEEMPTY |
INCLUDEEMPTY)])
Lub
Zbir.Count
Covariance(Zbir, Liczba_y [,
Liczba_x])
CovarianceN(Zbir, Liczba_y [,
Liczba_x])
DistinctCount(Zbir)
LinRegIntercept (Zbir,
Wyraenie_y [, Wyraenie_x])
LinRegPoint (Pooenie_x,
Zbir, Wyraenie_y [,
Wyraenie_x])
LinRegR2(Zbir, Wyraenie_y [,
Wyraenie_x])
LinRegSlope (Zbir,
Wyraenie_y [, Wyraenie_x])
LinRegVariance (Zbir,
Wyraenie_y [, Wyraenie_x])
LookupCube(Kostka,
Wyraenie)
LookupCube(Kostka, acuch)
Max(Zbir [, Wyraenie])
Median(Zbir [, Wyraenie])
283
Opis
Min(Zbir [, Wyraenie])
Poziom.Ordinal
Predict(ModelZgbiania,
Wyraenie)
Rank(Krotka, Zbir [,
Wyraenie])
RollupChildren (Czonek,
Operator)
StDev(Zbir [, Wyraenie])
StDevP(Zbir [, Wyraenie])
Stdev(Zbir [, Wyraenie])
StdevP(Zbir [, Wyraenie])
StrToValue('MDX'
[,CONSTRAINED])
Sum(Zbir [, Wyraenie])
Czonek[.Value]
AddCalculatedMembers(Zbir)
Ancestors(Czonek, Poziom)
Ancestors(Czonek, Odlego)
284
Opis
Ascendants(Czonek)
Axis(Liczba)
Definiuje wywietlan o.
Lub
Zbir1 * Zbir2 [* ...n]
Descendants(Czonek [, Poziom
[, Flaga]])
Descendants(Czonek [,
Odlego [, Flaga]])
Descendants(Zbir [, Poziom [,
Flaga]])
Descendants(Zbir [, Odlego
[, Flaga]])
285
Opis
Distinct(Zbir)
DrilldownLevel(Zbir [,
Poziom])
DrilldownLevel(Zbir [,
,Wskanik}])
DrilldownLevelBottom(Zbir,
Ilo [, [Poziom][, Wyraenie])
DrilldownLevelTop(Zbir, Ilo
[, [ Poziom][, Wyraenie])
DrilldownMember(Zbir1,
Zbir2 [, RECURSIVE])
DrilldownMemberBottom(Zbir
1, Zbir2, Ilo [, [Wyraenie ][,
RECURSIVE]])
DrilldownMemberTop(Zbir1,
Zbir2, Ilo [, [Wyraenie][,
RECURSIVE]])
DrillupLevel(Zbir [, Poziom])
DrillupMember(Zbir1, Zbir2)
Extract(Zbir, Hierarchia1 [,
Hierarchia2, ...n] )
Filter(Zbir, Warunek)
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])
Hierarchize(Zbir [, POST])
286
Opis
Intersect(Zbir1, Zbir2 [,
ALL])
LastPeriods(Ilo [, Czonek])
Mtd([Czonek])
NameToSet(Nazwa)
NonEmptyCrossjoin(Zbir1 [,
Zbir2, ...] [, Ilo])
Order(Zbir, Wyraenie
Qtd([Czonek])
StripCalculatedMembers(Zbir)
StrToSet(acuch [,
CONSTRAINED])
Tail(Zbir [, Ilo])
ToggleDrillState(Zbir1, Zbir2
[, RECURSIVE])
TopCount(Zbir, Ilo [,
Wyraenie])
TopPercent(Zbir, Procent,
Wyraenie)
TopSum(Zbir, Warto,
Wyraenie)
287
Opis
lub
Zbir1 + Zbir2 [+...n]
lub
{ Zbir1, Zbir2 [,...n]}
Unorder(Zbir)
VisualTotals(Zbir [, Wzorzec])
Wtd([Czonek])
Ytd([Czonek])
MemberToStr(Czonek)
SetToStr(Zbir)
TupleToStr(Zbir)
UserName [( )]
Leaves([Wymiar])
Root ()
Root(Wymiar)
Root(Krotka)
StrToTuple (Krotka [,
CONSTRAINED])
Error([Komunikat])
288
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]
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
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],
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]
292
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)
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.
293
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
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
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,
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)
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
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
31.0792349726776
31.0792349726776
31.4207650273225
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
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
298
Tabela 6.101. Dyrektywy sterujce dystrybucj wartoci na wzy potomne w zapytaniu UPDATE CUBE
Dyrektywa
Opis
USE_EQUAL_ALLOCATION
USE_EQUAL_INCREMENT
USE_WEIGHTED_ALLOCATION
USE_WEIGHTED_INCREMENT
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
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
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
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
301
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
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])
)))
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)
304
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])/
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
Tabela 6.111. Skutek wykonania zapytania wybierajcego warto domylnej miary dla domylnego
atrybutu na poziomie kategorii towaru
All
1181
306
Tabela 6.112. Skutek wykonania zapytania wybierajcego warto domylnej miary dla ustanowionego
nowego domylnego atrybutu na poziomie kategorii towaru
Zegary
71
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
307
Tabela 6.115. Skutek wykonania zapytania wybierajcego warto utworzonego dla sesji atrybutu
dla kategorii towarw w kolejnych latach prowadzenia dziaalnoci
All
Calendar 2001
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)
308
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 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)
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
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
310
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,
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'
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)
312
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 $.
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]
314
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
315
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
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
Rysunek 7.1.
Definiowanie
zewntrznego rda
danych dla MS Excel
Rysunek 7.2.
Definiowanie
hurtowni danych jako
zewntrznego rda
danych dla MS Excel
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 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
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
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
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
324
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.
Rozdzia 7. Raportowanie
325
326
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
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);
330
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
Rozdzia 7. Raportowanie
331
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
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
Rysunek 7.30.
Query Builder
definicja prostego
zapytania
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
336
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
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
338
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
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
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.
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).
342
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
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
Rozdzia 7. Raportowanie
345
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
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
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
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
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
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
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
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
Rozdzia 7. Raportowanie
351
Rysunek 7.67.
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
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
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
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
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
356
Rysunek 7.78.
Podgld raportu
przed przeczeniem
i po przeczeniu
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
358
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
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
Rysunek 7.87.
Wygld raportu ze
zdefiniowanym filtrem
w postaci listy
dla jednej
z wartoci rnych
od domylnej
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
362
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
Rozdzia 7. Raportowanie
363
364
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.
366
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
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
368
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
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.
370
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
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
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
Rysunek 7.112.
Podgld raportu
dla danych
pochodzcych
z hurtowni
po odfiltrowaniu
pustych wierszy
Rozdzia 7. Raportowanie
375
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
Moliwe jest zastosowanie opcji Recursive, powodujcej, e wskazana funkcja agregujca dotyczy tylko biecej grupy.
=MAX(Fields!Zysk.Vale, DataSet1, Recursive)
376
Rysunek 7.117.
Okrelenie minimum
i maksimum skali dla
wskanika Gauge
Rozdzia 7. Raportowanie
377
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
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
380
Rysunek 7.125.
Definicja filtrowania
dla parametru
wielowartociowego
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
382
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
Notatki