PowerPivot's Blog Techniczny blog na temat PowerPivot

11Aug/100

Jezyk DAX – wstep

Na moim blogu umieściłem już kiedyś pierwszy post dotyczący nowego języka DAXData 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.

   
Better Tag Cloud