Jezyk DAX – wstep
Na moim blogu umieściłem już kiedyś pierwszy post dotyczący nowego języka DAX – Data Analysis eXpressions.
Tym wpisem chciałbym jednak rozpocząć serie postów poświęconych szczegółom tego nowego języka dostępnego w PowerPivot. W kilku, może w kilkunastu kolejnych postach postaram się przybliżyć ten język wszystkim zainteresowanym.
Chcąc korzystać z dowolnego języka musimy zawsze na początku poznać podstawową składnie tego języka.
Zacznijmy od tego w jaki sposób możemy używać języka DAX:
-
Pierwszym podstawowym zastosowaniem jest wykorzystanie funkcji, czyli obliczanie średniej, zliczanie, badanie wartości logicznych itd.. Funkcja składa się z argumentu lub argumentów, argumentami mogą być wartości, kolumny czy też tabele. Ważną rzeczą jest fakt, iż funkcje można zagnieżdżać jedne w drugich.
-
Kolejnym użyciem języka DAX są wyrażenia, mogą one się odnosić zarówno do literału, jak i stałej, może to być test logiczny, lub odniesienie do wartości jakiejś kolumny. Wyrażenie mogą być wykorzystywane np.: w filtrowaniu danych - [Zakup] > 1000
-
Operatory, czyli powiązanie różnych wartości – wyrażeń
Przykładowe formuły w języku DAX
| Formuła | Opis |
| =12 | Wartość 12 |
| =”Słowo” | Słowo - tekst |
| =PI() | Stała – wartość PI |
| =’FALSE’ = 0 | Wyrażenie logiczne przyrównujące wartość logiczną FALSE z wartością 0. FALSE odpowiada wartości 0, a TRUE wartości 1, więc takie wyrażenie logiczne przyjmie wartość TRUE (prawda) |
| ='Sprzedaz’[Cena] | Wartość kolumny Cena w tabeli Sprzedaz |
| =[Cena]*1.22 | Obliczenie wartości – pomnożenie przez 1.22 wartości kolumny Cena |
| =[Cena]*[Vat]/100 | Wymnożnie kolumny Cena i kolumny Vat, następnie podzielenie tej wartości przez 100. Zakładając że w kolumna Cena zawiera cenę netto, a kolumna Vat stawkę Vat, wówczas takie wyrażenie zwróci nam wartość podatku Vat |
| =SUM([Cena]*[Ilosc]) | Suma wartości wyrażenia Cena * ilość, czyli suma wartości |
| =SUM(FILTER(Sprzedaz,Grupa=”MLEKO”),[Wartosc]) | Przykład pokazuje jako można obliczyć sumę wartości dla sprzedaży w grupie Mleko. Filtr działa w ten sposób, iż dla tabeli Sprzedaż sprawdza wartość kolumny grupa, tam gdzie grupa przyjmuje wartość MLEKO zwraca prawdę i wówczas dla tych wartości sumowane są wartości z kolumny Wartosc |
Zasadnicze działanie funkcji języka DAX jest bardzo zbliżone do funkcji znanych z programu Excel, z całą pewnością były one naturalną bazą do powstania języka DAX. Zasadniczą różnicą jest wejście danych do funkcji. W Excelu operujemy zakresem komórek, komórkami. Natomiast w języku DAX operujemy kolumnami, tabelami.
Kolejna ważną różnicą jest przedstawianie daty i czasu. Język DAX używa typu DateTime w przeciwieństwie do programu Excel gdzie czas jest reprezentowany jako liczba.
W programie Excel funkcje nie mogą zwracać tablic, a w przypadku języka DAX często jest to niezbędne.
Zasadniczą różnicą która znajduje sie w PowerPivot a nie ma w Excel jest to iż PowerPivot opiera się na modelu relacyjnym. Czyli występują relacje. O tym będzie szczegółowo później (w specjalnym poście na ten temat).
W poprzednim poście przedstawiłem też ważną różnicę jaka jest w języku DAX dotyczącą wartości BLANK i wyrażeń, które w programie Excel zakończyłyby się błędem.
Budując dowolne wyrażenie, funkcje, stałą w języku DAX - tak jak to widać w przykładach umieszczonych powyżej w tabeli musimy rozpocząć od znaku =.
Konwencja nazewnictwa
Kolejny ważnym element każdego języka jest konwencja nazewnictwa. Wszystkie nazwy w obrębie jednej tabeli muszą być unikatowe. PowerPivot i zarazem język DAX nie rozróżnia wielkości liter wiec tabela Sprzedaz, SPRZEDAZ, SpRzEdAz są dla niego tą samą nazwą kolumny/tabeli.
Tabele – nazwa tabeli jest wymagana, jeżeli kolumna dotyczy innej tabeli. Nazwy tabel nigdy nie mogą być w nawiasach. Nazwy tabel umieszczamy w pojedynczy cudzysłów, szczególnie jeżeli nazwy składają się ze spacji lub znaków specjalnych.
Kolumny – Nazwy kolumna zawsze są w kwadratowych nawiasach. Mogą również zawierać spacje. Nazwa musi być unikatowa w obrębie bazy więc nazwy kolumn wywołujemy z nazwą tabeli. W ramach jednej tabeli nazwa musi być unikatowa, wówczas połączenie nazwa tabeli i nazwa kolumny jest unikatowa. W przypadku gdy korzystamy z kolumn w tej samej tabeli w jednym wyrażeniu nie musimy podawać nazwy tabel np.: =[Cena]*[Ilosc]
Zawsze w każdym język jest zbiór nazw i znaków specjalnych zarezerwowanych. W przypadku języka DAX ograniczeni jest takie same jak w Analysis Services. Czyli te same słowa kluczowe i znaki są zarezerwowane. Spowodowane jest to tym, że tak naprawdę w pamięci lub na serwerze Analysis Services (w przypadku PowerPivot for SharePoint 2010) powstaje kostka OLAP, do której PowerPivot wysyła zapytania w języku MDX. Jeżeli słowo kluczowe z języka MDX (Analysis Services) użyjemy w nazwie kolumny i umieścimy w nawiasie kwadratowym to nie będzie błędu. W przypadku użycia słowa zarezerwowanego do nazwy tabeli wystąpi błąd.
Następujące znaki nie mogą być wykorzystywane w nazwach kolumn, tabel i miar:
- znaki sterujące
- Następujące znaki: .,;':/\*|?&%$!+=()[]{}<>
- początkowe lub końcowe spacje
Przykładowe nazwy obiektów
| Obiekt | Przykład | Opis |
| Nazwa tabeli | Zlecenia | Sam tekst zawsze oznacza nazwę. |
| Nazwa tabeli | ‘Sprzedaz wyslkowa’ | Nazwa tabeli zawierająca spację. |
| Pełna nazwa kolumny | Sprzedaz[Zlecenia] | Nazwa tabeli i nazwa kolumny |
| Pełna nazwa miary | Sprzedaz[Zysk] | Nazwa tabeli i nazwa miary |
| Nazwa kolumny | [Dane] | Nazwa kolumny lub miary |
| Pelna nazwa kolumny | ‘Sprzedaz archiwum’[Zlecenia'] | Nazwa tabeli zawierająca spację i nazwa kolumny |
Więcej szczegółów można znaleźć w dokumentacji do PowerPivot.
Biorąc pod uwagę te dwa posty o języku DAX mamy już pewne podstawy. W kolejnych postach będę starał się przedstawić pozostałe aspekty języka DAX, do celowo postaram się opisać szczegółowo w miarę cały język DAX.
Osoby zainteresowanych językiem DAX zapraszam już niebawem do lektury kolejnych postów dotyczących języka DAX, mam w planach już niebawem opublikować posty dotyczące kontekstu, relacji, typów w języku DAX, oraz operatorów.
