MDX ZAWARTOŚĆ O MDX. Wyk onał: Zatwi erdził: KSPBC_Szkolenie_20090623. doc. Spra wdził: Strona 1 z 15



Podobne dokumenty
Kostki OLAP i język MDX

OnLine Analytical Processing (OLAP) Kostki OLAP i zapytania MDX

Integracja i Eksploracja Danych

Podstawy MDX. Podstawy MDX. Podstawy MDX. Struktura kostki [BiznesG]

SQL (ang. Structured Query Language)

Kwerenda. parametryczna, z polem wyliczeniowym, krzyżowa

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

przygotował: Podstawy języka MDX Tworzenie zbiorów

QUERY język zapytań do tworzenia raportów w AS/400

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

System imed24 Instrukcja Moduł Analizy i raporty

Przestrzenne bazy danych Podstawy języka SQL

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

Analityczny język zapytań MDX: zaawansowane

Symfonia Produkcja. Kreator raportów. Wersja 2013

Materiały do laboratorium MS ACCESS BASIC

Podstawowe funkcje dodatku linq w C#

Instrukcje dla zawodników

Autor: Joanna Karwowska

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Leszek Stasiak Zastosowanie technologii LINQ w

Informatyka II. Laboratorium Aplikacja okienkowa

Wyświetl imie i nazwisko ucznia, nazwę przedmiotu z którego otrzymał ocenę niedostateczną. Nazwij tę kwerendę oceny niedostateczne.

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Usługi analityczne budowa kostki analitycznej Część pierwsza.

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Przykład powyżej pokazuje, że w zapytaniu można umieszczać funkcje zarówno zdefiniowane w ramach środowiska, jak również własne.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

4. Funkcje. Przykłady

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Analityczny język zapytań MDX: podstawy

2017 r. STOPA BEZROBOCIA r. STOPA BEZROBOCIA

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Import danych w formacie txt

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

ODCZYT STANU WODY NA RZECE DRWĘCY mierzone dla posterunku Nowe Miasto Lubawskie

Wymiar czasu pracy w kwartałach 2018r. pełny etat

Zadanie 2: Arytmetyka symboli

Zmiany funkcjonalne i lista obsłużonych zgłoszeń Comarch DMS , Comarch DMS i Comarch DMS

Rozdział 4 KLASY, OBIEKTY, METODY

Uzupełnij pola tabeli zgodnie z przykładem poniżej,

(aktualizacja 30 kwietnia 2018)

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Systemy GIS Tworzenie zapytań w bazach danych

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Łączenie liczb i tekstu.

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Analityczny język zapytań MDX: wstęp

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Bazy danych Access KWERENDY

Wykład III. dr Artur Bartoszewski Wydział Nauczycielski, Kierunek Pedagogika Wprowadzenie do baz danych

Microsoft Excel 2013: Budowanie modeli danych przy użyciu PowerPivot

CREATE USER

Wymiar czasu pracy w kwartałach 2018r. pełny etat

2.5 Dzielenie się wiedzą

Dodawanie operacji dodatkowych w WAPRO Mag.

Tablice, DataGridView

PHP: bazy danych, SQL, AJAX i JSON

Oracle11g: Wprowadzenie do SQL

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do

Business Intelligence

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Rozdzia l 3. Laboratorium 3. danych zawierajac

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Wymiar czasu pracy w kwartałach 2018r. pełny etat

MS Excel cz.1 funkcje zaawansowane

Technologie informacyjne: Arkusz kalkulacyjny

Dane w poniższej tabeli przedstawiają sprzedaż w dolarach i sztukach oraz marżę wyrażoną w dolarach dla:

Laboratorium Bazy danych SQL 2

Wprowadzenie do hurtowni danych

Spis treści. Część I Wprowadzenie do pakietu oprogramowania Analysis Services

Metody numeryczne Laboratorium 2

7. Pętle for. Przykłady

Argumenty wywołania programu, operacje na plikach

Podstawy programowania w języku C++ Zadania

ANALYSIS SERVICES. 1. Tworzymy połączenie ze źródłem danych. 2. Tworzymy nowy widok dla źródła danych

3. Instrukcje warunkowe

SQL SERVER 2012 i nie tylko:

KOTLIN. Język programowania dla Androida

Struktura drzewa w MySQL. Michał Tyszczenko

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Październik Data Dzień tygodnia Szczęśliwy numerek [Wybierz inny miesiąc]

0 + 0 = 0, = 1, = 1, = 0.

C++ Przeładowanie operatorów i wzorce w klasach

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

5. Integracja stron aplikacji, tworzenie zintegrowanych formularzy i raportów

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

3. Budowa prostych raportów opartych o bazę danych

Transkrypt:

ZAWARTOŚĆ Zawartość...1 O...1 Podstawowe typy danych...2 1.1. Wymiar / hierarhia...2 1.2. Poziom...2 1.3. Element...2 1.4. Kolekcje (Tuples)...2 1.5. Zbiory (Sets)...2 1.6. Osie (Axes)...2 Pierwsze zapytanie...3 Podstawowe operatory: nawiasy klamrowe, przecinki oraz dwukropki...3 1.7. Nawiasy klamrowe...3 1.7.1. Składnia...3 1.8. Przecinki...4 1.8.1. Składnia...4 1.9. Dwykropki...4 1.9.1. Składnia...4 Wprowadzenie do funkcji z rodziny Members...4 1.9.2. Składnia...4 1.10. Funkcja.Parent...5 1.10.1. Składnia...5 1.11. Funkcja.Children...5 1.11.1. Składania...5 1.12. Funkcja Ancestor()...6 1.12.1. Składnia...6 1.13. Funkcja.FirstChild...6 1.13.1. Składnia...6 1.14. Funkcja.LastChild...7 1.14.1. Składnia...7 1.15. Funkcja.FirstSibling...8 1.15.1. Składnia...8 1.16. Funkcja.LastSibling...8 1.16.1. Składnia...8 1.17. Funkcja Cousin()...8 1.17.1. Składnia...9 Relatywne funkcje z rodziny Member...9 1.18. Wartości obliczeniowe (Calculated Members)...9 1.18.1. Składnia...9 1.19. Funkcja.PrevMember...9 1.19.1. Składnia...10 1.20. Funkcja.NextMember...10 1.20.1. Składnia...11 Funkcje czasowe...11 1.21. Funkcja PeriodsToDate()...11 1.21.1. Składnia...11 1.22. Skróty funkcji PeriodsToDate()...12 1.22.1. Składnia...12 1.23. Funkcje OpeningPeriod() i ClosingPeriod()...13 1.23.1. Składnia...13 1.24. Funkcja LastPeriods()...13 1.24.1. Składnia...13 1.25. Funkcja ParallelPeriod()...13 1.25.1. Składnia...14 Funkcje na zbiorach...14 1.26. Funkcja TopCount()...14 1.26.1. Składnia...14 Funkcje tekstowe...14 1.27. Funkcja.Properties...14 1.27.1. Składnia...14 O Strona 1 z 15

9001:2000 Dokument: KS-PBC/TECH Wydanie: 2009-06-08 Waga: 90 wyłonił się w okolicach 1998 wtedy to zaczął pojawiać się w komercyjnych aplikacjach. Jest to język zapytań dla wielowymiarowych struktur OLAP pozwalający na zadawanie zapytań online w kostkach analitycznych. Język ten został stworzony przez grupę inżynierów z Microsoft. Po opublikowaniu specyfikacji w 1999 roku zaczął być wykorzystywany przez wielu innych producentów rozwiązań OLAP. wzorowany jest na języku T-SQL i jest jego rozwinięciem wielowymiarowym. PODSTAWOWE TYPY DANYCH 1.1. Wymiar / hierarhia Jest to wymiar kości. Wymiar jest głównym organizatorem informacji w kości. nie zna zależności pomiędzy wymiarami, oraz zakłada, że takowe nie istnieją. Wymiar zwiera elementy zorganizowane w jakąś hierarchie lub hierarchie zawierające poziomy. Może zostać wybrany przez podanie jego nazwy np. [CZAS] lub przez użycie funkcji dostępnych z poziomu języka np..dimension. Do hierarchii, podobnie jak i do całego wymiaru możemy odwołać się bezpośrednio podające jej nazwę (np. [CZAS.Tygodniowo]) lub może zostać zwrócona prze funkcję np..hierarchy. Hierarchie zawierają się w wymiarach i niektóre specyfikacje języka nie widzą różnicy między nimi (np. OLEDB for OLAP ), a niektóre traktują hierarchie i wymiar jako dwa osobne typy danych (np. Microsoft Analysis Services.) 1.2. Poziom Oznacza poziom w hierarchii. Można się odwołać do niego poprzez podanie unikalnej nazwy ([CZAS.Tygodniowo]. [Tydzien]) lub też przy użyciu dostępnych funkcji (np..level) 1.3. Element Jest to element należący do jakiejś hierarchii wymiaru. Jak w poprzednich przypadkach odwołać się do niego można bezpośrednio podające jego nazwę ([CZAS.Tygodniowo].[2009].[1]) lub używając jednej z dostępnych funkcji np..firstchild. Każdy element należy do jakiejś hierarchii, jeżeli element należy do dwóch różnych hierarchii to w przypadku odwołania się do niego należy opakować go w zbiór lub kolekcję. 1.4. Kolekcje (Tuples) Jest to zbiór elementów z których każdy z niech pochodzi z innego wymiaru. Np. (Sprzedaż, 1997) reprezentuje kolekcję która składa się z elementów, które w kostce OLAP znajdują się w 2 wymiarach: wskaźniki i czas. (Nie jadalny, Sprzedaż, 1997) reprezentuje kolekcję, której elementy znajdują się w 3 wymiarach: produkt, wskaźnik i czas. Ważną rzeczą odnośnie kolekcji jest to, że mogą być utworzone z jednego lub więcej elementów z dowolnej liczby wymiarów, ale tylko jeden element z każdego wymiaru może istnieć w danej kolekcji. Aby utworzyć kolekcję składającą się z jednego elementu należy wpisać: [Wymiar].[Element] 1 Natomiast aby utworzyć kolekcję składającą się z wielu elementów używamy następującej składni: ([Wymiar1].[Element], [Wymiar2].[Element],[Wymiar3].[Element]) 1.5. Zbiory (Sets) Definicje zbiorów umieszczane są w nawiasach klamrowych i służą do specyfikacji komórek kostki, które zostaną zwrócone przez zapytanie. Zbiór zazwyczaj składa się z grupy jednej lub więcej kolekcji. Ich kolejność ma znaczenie, oraz dana kolekcja może być powtarzana w obrębie zapytania. Jak już zostało wspomniane, zbiory oznaczane są przez umieszczenie ich w nawiasach klamrowych, więc definiowanie zbioru będzie miało np. następującą postać: {[CZAS].[1997],[CZAS].[1998]} ON COLUMNS, {[Measures].[ILZK],[Measures].[WASN]} ON ROWS 1.6. Osie (Axes) 1 Jednoelementowa kolekcja może zostać umieszczona w nawiasach, ale nie jest to wymagane. Strona 2 z 15

Oś jest grupą lub zbiorem elementów z jednego lub więcej wymiarów zorganizowanych w kolekcje. Służy ona do umieszczenia lub filtracji wartości kostki wzdłuż elementów wymiaru z którym są powiązane. Składnia osi składa się ze specyfikacji osi i występuje zaraz po słowie kluczowym SELECT. Np. {([CZAS].[1998],[Measures].[ILZK])} ON COLUMNS, {[TOWAR.Towar].[Razem].Children} ON ROWS W powyższym przykładzie słowa kluczowe ON COLUMNS i ON ROWS są aliasami (nazwami umownymi) elowych osi. Oczywiście zapytanie może zawierać więcej niż 2 osie (np. aż do 128 w SQL Server 2008), ale tylko 5 z nich posiada aliasy i są to odpowiednio: COLUMNS, ROWS, PAGES, SECTIONS i CHAPTERS. PIERWSZE ZAPYTANIE SELECT {[Measures].[ILZK]} ON COLUMNS, {[CZAS].[2009].[Q1].[1] : [CZAS].[2009].[Q4].[12]} ON ROWS FROM [SPRZEDAZ_ZAKUPY] Rys. 4.1Ekran z zapytaniem PODSTAWOWE OPERATORY: NAWIASY KLAMROWE, PRZECINKI ORAZ DWUKROPKI 1.7. Nawiasy klamrowe Jak możemy zauważyć składnia zapytania SELECT w dużym stopniu przypomina składnie języka SQL. Jedną z bardziej wiznych różnic jest to, w jaki sposób rozróżnia zbiory: są one otoczone przez nawiasy klamrowe. 1.7.1. Składnia używa nawiasów do opakowania zbiorów z jednego lub kilku wymiarów. Poniższy przykład demonstruje użycie nawiasów klamrowych przy wybieraniu wyników, które chcemy otrzymać. select [Measures].[WASN] ON COLUMNS, {[CZAS].[2009], [CZAS].[2007].[q1]} ON ROWS Powyższe zapytanie pozwala nam wyświetlić wartość sprzedaży netto dla wybranych okresów, czyli w tym wypadku dla całego roku 2009 oraz dla pierwszego kwartału roku 2007. W wyniku powinniśmy otrzymać: Rys. 5.2 Wynik działania zapytania W tym przypadku wcięcie przy kwartałach jest trochę mylące, ale po włączeniu wyświetlania elementów nadrzędnych (Shift+Ctrl+N) dokładniej widać którego roku kwartał jest wyświetlany. Strona 3 z 15

Rys. 5.3 Wynik działania zapytania 1.8. Przecinki Przecinki oddzielają kolekcje tworzące zbiór, szczególnie wtedy, gdy ciężko jest zdefiniować zbiór używając zakresu elementów. 1.8.1. Składnia Przykład użycia przecinka do oddzielenia części zbioru: {[Measures].[ILZK],[Measures].[WASN]} 1.9. Dwykropki Dwukropek pozwala nam wykorzystać naturalny porządek elementów do utworzenia zbioru. Dzięki temu operatorowi w łatwy sposób utworzymy zbiór zawierające się w podanym zakresie z zachowaniem ich kolejności. Należy zapamiętać, że używając tego operatora elementy definiujące oba końce zakresu zawierają się w utworzonym zakresie. 1.9.1. Składnia Składnie polecenia możemy zobrazować następująco: Zbiór otrzymany po wykonaniu polecenia: {[CZAS].[2009].[Q1].[1], [CZAS].[2009].[Q1].[2], [CZAS].[2009].[Q1].[3], [CZAS].[2009].[Q1].[4], [CZAS].[2009].[Q1].[5], [CZAS].[2009].[Q1].[6], [CZAS].[2009].[Q1].[7], [CZAS].[2009].[Q1].[8], [CZAS].[2009].[Q1].[9], [CZAS].[2009].[Q1].[10], [CZAS].[2009].[Q1].[11], [CZAS].[2009].[Q1].[12]} Możemy uzyskać przy użyciu polecenia; {[CZAS].[2009].[Q1].[1] : [CZAS].[2009].[Q4].[12]} WPROWADZENIE DO FUNKCJI Z RODZINY MEMBERS Polecenie.Members pozwala nam w łatwy sposób otrzymać wszystkie elementy należące do danego poziomu, hierarchii czy też wymiaru. Należy zapamiętać to, że polecenie.members musi być stosowana na poziomie wymiaru w miejscu w którym hierarchia nie jest dwuznaczna. Tzn. jeżeli w wymiarze istnieją dwie lub więcej hierarchii to operator.members musi zostać użyty na poziomie (lub poniżej) w którym następuje ich rozdzielenie. W przypadku próby użycia operatora na poziomie wyżej wystąpi błąd. Kolejną ważną informacją jest to, że wartości obliczeniowe (Calculated Members) nie zostaną zwrócone w wyniku tego polecenia. Aby otrzymać je w wyniku należy użyć polecenia.allmembers 1.9.2. Składnia Prosty przykład ilustrujący składnie oraz wynik użycia polecenia: select {[Measures].Members} ON COLUMNS, {[CZAS].[2009]} ON ROWS W wyniku ww. polecenia otrzymamy wartości dla 2009 roku wszystkich dostępnych wskaźników: Strona 4 z 15

Rys. 6.4 Wynik działania zapytania Pozostałe funkcje należące do rodziny funkcji.member możemy podzielić na dwie grupy z perspektywy wyników jakie zwracają. Można powiedzieć, że funkcje z pierwszej grupy działają pionowo, tzn. poruszają się w hierarchii w górę i w dół. Do tej grupy należą funkcje: - Ancestor() -.Children -.Parent -.FirstChild -.LastChild Druga grupa natomiast działa poziomo. Te funkcje poruszają się w obrębie tego samego poziomu w hierarchii i są to funkcje: -.Cousin() -.FirstSibling -.LastSibling 1.10. Funkcja.Parent Zadaniem tej funkcji jest zwrócenie rodzica danego element. Jest ona często przydatna w przypadku wartości obliczeniowych. 1.10.1. Składnia Składnia użycia tej funkcji wygląda następująco: <element>.parent Przykład użycia wraz z wynikiem wygląda następująco: select {[Measures].[WASN]} ON COLUMNS, {[CZAS].[2009].[Q1].[1].Parent} ON ROWS W wyniku otrzymamy: Rys. 6.5 Wynik działania zapytania Jak widać dane są dla całego pierwszego kwartału, a nie dla stycznia. W tym przypadku też, ciężko jest zobaczyć użyteczność takiej funkcji, widać ją będzie natomiast w powiązaniu z relatywną funkcją.currentmember 1.11. Funkcja.Children Podobnie jak poprzednia funkcja i ta działa pionowo. Jak wskazuje jej nazwa zwraca ona dzieci (czyli elementy leżące w hierarchii poniżej) wybranego elementu. 1.11.1. Składania <element>.children Przykład ilustrujący działanie: select {[Measures].[WASN], [Measures].[ILZK]} ON COLUMNS, [APTEKA].Children ON ROWS where [CZAS].[2009] Wynik wykonania powyższego polecenia: Strona 5 z 15

Rys. 6.6 Wynik działania zapytania Jak widać otrzymaliśmy listę wszystkich elementów należących do hierarchii [APTEKA] (czyli wszystkie apteki), wraz z wybranymi wskaźnikami. Po raz pierwszy została także użyta klauzula WHERE. Ogranicza ona nam wyświetlane dane w tym przypadku wartości wskaźników są obliczone dla roku 2009. 1.12. Funkcja Ancestor() Funkcja zwraca element znajdujący się na zadanym poziomie lub w zadanej odległości od wybranego element. 1.12.1. Składnia Składnia polecenia wygląda nieco inaczej niż w poprzednich przypadkach. Polecenie nie jest dodawane za wybranym elementem lecz wybrany element jest umieszczany wewnątrz funkcji: Ancestor(element, poziom) lub Ancestor(element, odleglość) Przykład użycia funkcji wygląda następująco: select {[Measures].[WZCN]} ON COLUMNS, {Ancestor([CZAS].[2009].[Q1].[2], 1.0)} ON ROWS W wyniku otrzymujemy: Rys. 6.7 Wynik działania zapytania 1.13. Funkcja.FirstChild Polecenie zwraca pierwsze dziecko wybranego elementu (pierwszy element, znajdujący się na poziomie niżej niż wybrany). 1.13.1. Składnia Strona 6 z 15

<element>.firstchild Przykład użycia: select {[Measures].[WZCN]} ON COLUMNS, {[CZAS].[2008].[Q3].FirstChild} ON ROWS W wyniku otrzymujemy: Rys. 6.8 Wynik działania zapytania W zrozumieniu działania tych funkcji może pomóc nam poniższy diagram przedstawiający zależności które każdy z nas zna doskonale zależności pomiędzy latami, kwartałami i miesiącami. Mając je przestawione w takiej postaci, możemy zauważyć, że funkcje odpowiednio przesuwają się po drzewie. Akurat w przypadku funkcji.firstchild funkcja wybiera pierwszy element z poziomu niżej, czyli w naszym przypadku dla elementu Q3 będzie to Lipiec, co widać na drzewie. 2008 Q1 Q4 Styczeń Luty Marzec Październik Listopad Grudzień Q2 Kwiecień Maj Czerwiec Q3 Lipiec Sierpień Wrzesień Rys. 6.9 Uproszczony diagram hierarchii wymiaru czasu 1.14. Funkcja.LastChild Funkcja działa podobnie do.firstchild z tym, że zwraca ostatni element znajdujący się na poziomie niżej niż wybrany. 1.14.1. Składnia <element>.lastchild Przykład: select {[Measures].[WZCN]} ON COLUMNS, {[CZAS].[2008].[Q3].LastChild} ON ROWS Wynik: Strona 7 z 15

Rys. 6.10 Wynik działania zapytania 1.15. Funkcja.FirstSibling Działanie tej funkcji może być trochę bardziej mylące niż.firstchild. Jak zostało wspomniane na wstępie funkcje.firstsibling i.lastsibling działają poziomo, tzn. poruszają się w obrębie wybranego poziomu. Dlatego też elementy zwracane przez tą funkcję będą z tego samego poziomu. 1.15.1. Składnia <element>.firstsibling Przykład: select {[Measures].[WZCN]} ON COLUMNS, {[CZAS].[2008].[Q3].FirstSibling} ON ROWS Wynik: Rys. 6.11 Wynik działania zapytania 1.16. Funkcja.LastSibling Podobnie jak w poprzedniej funkcji, ta funkcja działa poziomo i zwraca ostatni element znajdujący się na tym samym poziomie co element na którym wywołujemy tą funkcję. 1.16.1. Składnia <element>.lastsibling Przykład: select {[Measures].[WZCN]} ON COLUMNS, {[CZAS].[2008].[Q3].LastSibling} ON ROWS Wynik: Rys. 6.12 Wynik działania zapytania 1.17. Funkcja Cousin() Ta funkcja zwraca element leżący równolegle względem danego elementu. Powiedzmy, że istnieją dwa wymiary. Wymiar pierwszy ma 3 poziomy, wymiar drugi 5. W tym przypadku gdy wywołamy funkcję Cousin() podając jako argument drugi poziom pierwszego wymiaru otrzymamy w wyniku drugi poziom drugiego wymiaru. Wymiar czasu bardzo dobrze nadaje się do pokazania działania funkcji Cousin(), gdyż w większości przypadków dany element posiada taką samą ilość potomków (elementów leżących na niższym poziomie) co pozostali. Są oczywiście drobne wyjątki np. odpowiednik 31 maja we wrześniu (wrzesień nie ma 31 dni, dlatego też nie będzie odpowiednika dla 31 maja). Strona 8 z 15

1.17.1. Składnia Cousin(element,poziom) Przykład użycia: select {[Measures].[WZCN]} ON COLUMNS, {Cousin([CZAS].[2008].[Q1].[3],[CZAS].[2008].[Q2])} ON ROWS Wynik Rys. 6.13 Wynik działania zapytania Jak możemy zauważyć, w wyniku otrzymaliśmy dane dla czerwca jest on odpowiednikiem marca w 3 kwartale. Marzec jest 3 miesiącem kwartału pierwszego, natomiast czerwiec jest 3 miesiącem kwartału drugiego, więc dane dla niego zostały wyświetlone. RELATYWNE FUNKCJE Z RODZINY MEMBER 1.18. Wartości obliczeniowe (Calculated Members) Wartości obliczeniowe pozwalają nam zdefiniować nowe element bazując na wymiarze bądź elementach które istnieją w kostce w której chcemy utworzyć nowy element. Są to elementy których wartość zależy od wyrażenia, a nie od wartości znajdującej się w komórce kostki. Potencjalne użycie takich elementów ograniczone jest tylko przez wyobraźnie i wiedzę użytkownika. 1.18.1. Składnia Aby utworzyć nowy element należy użyć klauzuli WITH, której składnia przedstawiona jest poniżej: WITH MEMBER wymiar.nazwa AS 'wyrażenie' Wymiar reprezentowany jest przez wymiar w którym zostanie utworzony nowy element, nazwa jest nazwą dla elementu natomiast wyrażenie jest wyrażeniem z którego tworzony jest element. Przykład: with member [Measures].[Roznica] as '([Measures].[WZCN] - [Measures].[WASN])' select {[Measures].[WZCN], [Measures].[WASN], [Measures].[Roznica]} ON COLUMNS, {[CZAS].[2008].Children} ON ROWS Wynik: Rys. 7.14 Wynik działania zapytania Przykład demonstruje nam, jak w prosty sposób obliczyć interesujące nas wartości i wyświetlić je. Obliczyliśmy różnicę pomiędzy wartością zakupów a sprzedaży, która została wyświetlona w kolumnie Roznica. 1.19. Funkcja.PrevMember Funkcja zwraca poprzedni element istniejący na tym samym poziomie co dany element. Innymi słowy funkcja zwraca element w wielowymiarowej hierarchii, który wystąpił wcześniej na tym samym poziomie co dany element. Użyteczność funkcji jest oczywista, gdy rozważymy potrzeby biznesowe np. obrębie księgowości i finansów. Strona 9 z 15

Przykładowym użyciem tutaj może być porównanie zmian w zadanym czasie z okresem poprzedzającym (np. rok bieżący oraz poprzedni, miesiąc bieżący i poprzedni itd). 1.19.1. Składnia <element>.prevmember Przykład użycia: with member [Measures].[PR] as '(([CZAS].PrevMember, [Measures].[WZCN]) - ([CZAS].PrevMember,[Measures].[WASN]))' select {[Measures].[PR]} ON COLUMNS, [Apteka].children ON ROWS where [CZAS].[2008] Powyższy przykład wyświetli nam różnicę miedzy wartością zakupów a sprzedaży dla roku 2007, mimo, że klauzula WHERE wskazuje na rok 2008. Rys. 7.15 Wynik działania zapytania Można łatwo zweryfikować, że dane za 2008 rok będą inne wykonując poniższe zapytanie: with member [Measures].[CR] as '([Measures].[WZCN] - [Measures].[WASN])' select {[Measures].[CR]} ON COLUMNS, [Apteka].children ON ROWS where [CZAS].[2008] Dodając do tego możliwości funkcji.currentmember która zwróci nam aktualny rok, możemy w łatwy sposób porównać sobie wartości z roku bieżącego z rokiem poprzednim: with member [Measures].[PR] as '(([CZAS].PrevMember, [Measures].[WZCN]) - ([CZAS].PrevMember,[Measures].[WASN]))' member [Measures].[CR] as '(([CZAS].CurrentMember,[Measures].[WZCN])-([CZAS].CurrentMember,[Measures].[WASN]))' select {[Measures].[CR], [Measures].[PR]} ON COLUMNS, [Apteka].children ON ROWS where [CZAS].[2008] Powyższe zapytanie wyświetli nam dane z roku wybranego (2008) w kolumnie CR, oraz z roku poprzedniego w kolumnie PR. Oczywiście zakres czasowy można zmienić, wybierając np. drugi kwartał. 1.20. Funkcja.NextMember Strona 10 z 15

Funkcja zwraca następny element istniejący na tym samym poziomie co dany element. Innymi słowy funkcja zwraca element w wielowymiarowej hierarchii, który wystąpi później na tym samym poziomie co dany element. Użyteczność funkcji jest oczywista, gdy rozważymy potrzeby biznesowe np. obrębie księgowości i finansów. Przykładowym użyciem tutaj może być porównanie zmian w zadanym czasie z okresem poprzedzającym (np. rok następny oraz bieżący, miesiąc następny i poprzedni itd). 1.20.1. Składnia <element>.nextmember Przykład użycia: with member [Measures].[PR] as '(([CZAS].NextMember, [Measures].[WZCN]) - ([CZAS].NextMember,[Measures].[WASN]))' select {[Measures].[PR]} ON COLUMNS, [Apteka].children ON ROWS where [CZAS].[2008] Wynik: Rys. 7.16 Wynik działania zapytania Mimo, że w klauzuli WHERE były wybrany rok 2008, to dane pochodzą z roku 2009. Można to sprawdzić zapytaniem z przykładu w poprzedniej funkcji. FUNKCJE CZASOWE 1.21. Funkcja PeriodsToDate() Funkcja zwraca zbiór elementów na danym poziomie zaczynając od pierwszego istniejącego (.FirstSibling) kończąc na wybranym. Funkcja ta pozwala nam na obliczenie w prosty sposób takich wartości jak np. suma wydatków od początku roku do danego miesiąca. 1.21.1. Składnia PeriodsToDate([poziom[, element]]) Przykłady użycia: Strona 11 z 15

with MEMBER [Measures].[SUMA] AS 'Sum(PeriodsToDate([CZAS].[ROK]),[Measures].[WASN])' select {[Measures].[WASN],[Measures].[SUMA]} ON COLUMNS, [CZAS].[2008].[Q1].[1]:[CZAS].[2008].[Q4].[12] ON ROWS Wynik: Rys. 8.17 Wynik działania zapytania W wyniku otrzymaliśmy utworzony wskaźnik, który jest sumą wartości netto z miesiąca bieżącego i miesięcy poprzedzających go. Podobne zestawienie np. dla miesiąca stycznia możemy otrzymać zmieniając lekko zapytanie: with member [Measures].[SUMA] as 'Sum(PeriodsToDate([CZAS].[Miesiac]), [Measures].[WASN])' select {[Measures].[WASN], [Measures].[SUMA]} ON COLUMNS, ([CZAS].[2008].[Q1].[1].[1] : [CZAS].[2008].[Q1].[1].[30]) ON ROWS 1.22. Skróty funkcji PeriodsToDate() oferuje także kilka skrótów funkcji umożliwiając nam wykonywanie podsumowań w łatwiejszy sposób. Są to funkcje YTD(), QTD(), MTD(), WTD() i odpowiadają one odpowiednio latom, kwartałom, miesiącom i tygodniom. 1.22.1. Składnia Ytd ([element]) Qtd ([element]) Mtd ([element]) Wtd ([element]) Ww. Polecenia odpowiadają odpowiednio PeriodsToDate(Rok, element) PeriodsToDate(Kwartal, element) PeriodsToDate(Miesiac, element) PeriodsToDate(Tydzien, element) Czyli w wyniku otrzymamy zbiory zawierające elementy poczynając od pierwszego na danym poziomie (rok, kwartał, miesiąc, tydzień) a kończąc na aktualnym. Odpowiednio przerobione przykłady z poprzedniej funkcji wyglądają tak jak poniżej: Strona 12 z 15

with member [Measures].[SUMA] as 'Sum(Ytd(), [Measures].[WASN])' select {[Measures].[WASN], [Measures].[SUMA]} ON COLUMNS, ([CZAS].[2008].[Q1].[1] : [CZAS].[2008].[Q4].[12]) ON ROWS oraz with member [Measures].[SUMA] as 'Sum(Mtd(), [Measures].[WASN])' select {[Measures].[WASN], [Measures].[SUMA]} ON COLUMNS, ([CZAS].[2008].[Q1].[1].[1] : [CZAS].[2008].[Q1].[1].[30]) ON ROWS 1.23. Funkcje OpeningPeriod() i ClosingPeriod() Funkcje OpeningPeriod() i ClosingPeriod() zwracają odpowiednio pierwszy lub ostatni potomek elementu istniejącego na zadanym poziomie, bądź innymi słowy funkcje zwracają pierwszy lub ostatnie element, który posiada takiego samego rodzica na zadanym poziomie. 1.23.1. Składnia OpeningPeriod([poziom[, element]]) ClosingPeriod([poziom[, element]]) Przykład: OpeningPeriod ([CZAS].[MIESIAC], [2008] ) ClosingPeriod ([CZAS].[MIESIAC], [2008] ) Funkcje zwrócą odpowiednio: - Styczeń roku 1998, gdyż on jest pierwszym elementem należącym do hierarchii miesięcy 1998. - Grudzień roku 1998, gdyż jest on ostatnim elementem z hierarchii miesięcy 1998-1.24. Funkcja LastPeriods() Funkcja zwraca zbiór x-1 elementów poprzedzających wybrany element (włącznie z nim). 1.24.1. Składnia LastPeriods(index[, element]) Przykład LastPeriods (11, [Time].[1998].[Q3].[8]) Zwraca nam zbiór składający się z 11 elementów poprzedzających [Time].[1998].[Q3].[8], czyli dostaniemy: {[Time].[1997].[Q4].[10], [Time].[1997].[Q4].[11], [Time].[1997].[Q4].[12], [Time].[1998].[Q1].[1], [Time].[1998].[Q1].[2], [Time].[1998].[Q1].[3], [Time].[1998].[Q2].[4], [Time].[1998].[Q2].[5], [Time].[1998].[Q2].[6], [Time].[1998].[Q3].[7], [Time].[1998].[Q3].[8]} Przykładowe zapytanie wyświetlające wartość sprzedaży netto dla każdego z miesiąca, wraz ze średnią z ostanch 6 miesięcy wygląda tak: with member [Measures].[Sr] as 'Avg(LastPeriods (6, [CZAS].CurrentMember), [Measures].[WASN])' select {[Measures].[WASN], [Measures].[Sr]} ON COLUMNS, ([CZAS].[2008].[Q1].[1] : [CZAS].[2008].[Q4].[12]) ON ROWS 1.25. Funkcja ParallelPeriod() Zwraca element znajdujący się w odpowiedniej, relatywnej pozycji co zadany. Strona 13 z 15

1.25.1. Składnia ParallelPeriod([poziom[, wyrażenie_numeryczne[, element]]]) Domyslnie, wyrażenie_numeryczne =1, element Time.CurrentMember; Przykład użycia: select {[Measures].[WASN]} ON COLUMNS, {ParallelPeriod([CZAS].[Kwartal], 2.0, [CZAS].[2008].[Q3].[9])} ON ROWS from [FFN_SPRZ_KZAK] Funkcja przejdzie do Q3 i cofnie się o 2 kwartały (czyli znajdzie się w Q1). Następnie zwróci kuzyna (Cousin()) miesiąca września czyli w tym przypadku będzie to marzec. (gdyż marzec jest 3 miesiącem Q1, podobnie jak wrzesień jest trzecim miesiącem, z tym, że kwartału 3). Wynik: Rys. 8.18 Wynik działania zapytania FUNKCJE NA ZBIORACH 1.26. Funkcja TopCount() Funkcja zwraca X pierwszych elementów z danego zbioru, opcjonalnie posortowanych wg. podanego kryterium. 1.26.1. Składnia TopCount(zbiór, ilość [,kolejność]) Przykład with member [Measures].[Roznica] as '([Measures].[ILZK] - [Measures].[ILSP])' select Crossjoin({[CZAS].[2009]}, {[Measures].[ILZK], [Measures].[ILSP], [Measures].[Roznica]} ) ON COLUMNS, TopCount( {[TOWAR.Towar].[Razem].Children}, 50.0, ([CZAS].[2009], [Measures].[Roznica]) ) ON ROWS W wyniku otrzymamy listę 50 towarów, których różnica miedzy ilością zakupioną a sprzedaną jest największa. FUNKCJE TEKSTOWE 1.27. Funkcja.Properties Funkcja zwraca String zawierający własność danego elementu. Mogą to być nieodłączne własności takie jak NAZWA, ID, KLUCZ, WARTOSC_ELEMENTU czy też zdefiniowane przez użytkownika. 1.27.1. Składnia element.properties(nazwa_wlasnosci [, TYPED]) Domyślnie zwracane wartości są zwracane jako String (łańcuch tekstowy znaków), jeżeli potrzebujemy aby własność elementu została zwrócona jako taki sam typ w jakim jest przechowywana należy użyć flagi TYPED. Przykład: with member [Measures].[kod] as '[APTEKA].CurrentMember.Properties("KOD_POCZTOWY")' select {[Measures].[kod]} ON COLUMNS, [APTEKA].Children ON ROWS W wyniku otrzymujemy listę aptek wraz z ich kodem pocztowym: Strona 14 z 15

Rys. 10.19 Wynik działania zapytania Strona 15 z 15