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.
Pierwsze kroki z PowerPivot for Excel – zrodla danych
Postanowiłem kontynuować serie postów przeznaczoną dla początkujących użytkowników PowerPivot for Excel. Już przedstawiłem jak zainstalować sobie PowerPivot, następnie przydałyby się jakieś dane do analizy. W tym poście skorzystam z demonstracyjnej bazy danych AdventureWorks, którą można pobrać ze stron CODEPLEX. Czyli w poście tym będzie mowa o źródłach danych.
Zakładam, iż każdy pobrał sobie bazę danych i posiada dowolną wersje SQL Server z podłączoną bazą danych AdventureWorks (oczywiście można to ćwiczenie zrobić z dowolnym źródłem danych n.p.: bazą danych Microsoft Access). Uruchamiamy program Microsoft Excel 2010. Następnie w zakładce PowerPivot wybieramy PowerPivot Window.
Po wybraniu przycisku PowerPivot Window uruchamia nam się kolejny program, bardzo podobny do programu Excel.
Wstążka do programu PowerPivot posiada w wersji CTP November trzy zakładki: Home, Table i Column. W pierwszej kolejności przedstawię część właśnie tej zakładki, a dokładnie sekcje dotyczącą źródeł danych.
PowerPivot daje duże możliwości jeśli chodzi o dostępne źródła danych. Spis typów dostępnych przy użyciu tego narzędzia dostępne w tabeli poniżej.
Źródła |
Wersja |
Plik |
Dostawca |
| Bazy danych Access | Microsoft Access 2003, 2007, 2010 | .accdb, .mdb | ACE14 OLE DB provider |
| Relacyjne bazy danych SQL Server | Micorsoft SQL Server 2005, 2008, 2008R2 | .mdf, .ldf | OLDE DB Provider for SQL Server SQL Server Native Client OLE DB Provider SQL Server Native 10.0 Client OLE DB Provider .NET Framework Data Provider for SQL Client |
| Relacyjne bazy danych Oracle | Oracle 9i, 10g, 11g | .db | .NET Framework Data Provider for Oracle .NET Framework Data Provider for SQL Server MSDAORA OLE DB provider OraOLEDB MSDASQL |
| Relacyjne bazy danych Teradata | Teradata V2R6, V12 | - | TDOLEDB OLE DB provider .NET Data Provider for Teradata |
| Relacyjne bazy danych Informix | - | - | Informix OLE DB provider |
| Relacyjne bazy danych IBM DB2 | 8.1 | .db2 | DB2OLEDB |
| Relacyjne bazy danych Sybase | - | .db | Sybase OLEDB provider |
| Inne serwery relacyjnych baz danych | - | - | OLE DB provider ODBC driver |
| Pliki tekstowe | - | .txt, .csv, .tab | ACE14 OLE DB provider |
| Pliki Microsoft Excel | Excel 97-2003, 2007, 2010 | .xls, .xlsm, .xlsb, .xltx, .xltm | ACE14 OLE DB provider |
| Skoroszyt PowerPivot (workbook) | Microsoft SQL Server 2008R2 Analysis Services | .xlsx | ASOLEDB 10.5 (używane tylko i wyłącznie w wersji PowerPivot for SharePoint) |
| Kostki Analysis Services | Microsoft SQL Server 2005,2008, 2008R2 – Analysis Services | - | ASOLEDB 10 ASOLEDB 10.5 |
| Data feeds | Atom 1.0 format | .atomsvc | - |
Chcąc pobrać dane z baz danych relacyjnych, kostek danych, czy też bazy danych Acces wybieramy “From Databes”.
Jeżeli chcielibyśmy wczytać z dowolnego pliku wybieramy opcje “From Files”
lub jeżeli źródlo danych to “Data feeds” wybieramy ostatnią z dostępnych opcji “From Data Feeds”. Tam mamy do dyspozycji Reporting Services jako źródło danych, lub inny dowolne źródło danych.
W naszym przykładzie wybierzemy pierwszą opcje “From Databes” - “From SQL Server”. Po jej wybraniu pojawia się następujące okienko.
Musimy wybrać serwer SQL z którym chcemy się połączyć, następnie wybrać metodę autoryzacji, oraz bazę danych do której chcemy się podłączyć. ![]()
Jest możliwość wyświetlenia szczegółowych informacji dotyczących tego połączenia, a także wykonać test poprawności połączenia do wybranej bazy danych.
Wskazane byłoby wprowadzić nazwę połączenia, byśmy w przyszłości po niej mogli rozpoznać z jakiego połączenia korzystamy. Po wprowadzeniu wszystkich danych wybieramy dalej (NEXT). Pojawi nam się okienko pozwalające określić jakie dokładnie dane chcemy pobrać z naszego źródła do PowerPivot.
Mamy w przypadku bazy danych SQL Server do dyspozycji dwa rodzaje wyboru danych. Pierwszy to użycie kreatora wyboru tabel i widoków, drugi to stworzenie zapytania SQL.
Wybierając opcje zapytania i przechodząc dalej otrzymujemy poniższe okno kreatora.
W oknie tym możemy wprowadzić zapytanie, nazwać je i co ważne również walidować jego poprawność. Jeżeli wolimy utworzyć zapytanie przy użyciu “Designera” jest również taka możliwość.
Wówczas mamy możliwość podejrzenia przykładowych danych uzyskiwanych przy użyciu utworzonego zapytania.
W naszym przykładzie pobierzemy dane nie przy użyciu zapytań SQL, tylko przy użyciu kreatora. Czyli wybieramy opcje “select from a list of tables and views to choose the data to import”.
Kreator wyświetli nam okienko w którym mamy do dyspozycji listę wszystkich tabel i widoków dostępnych w bazie z którą się łączymy. Obiekty którymi jesteśmy zainteresowani zaznaczmy z boku każdego obiektu. Można zaznaczyć wszystkie wybierając kwadracik u góry tabeli. W przypadku gdy wybierzemy pojedyncze tabele, którymi jesteśmy zainteresowani możemy wybrać opcje podpowiedzi powiązanych tabel do wybranych. Kreator wówczas sprawdza relacje pomiędzy tabelami w bazie danych i podpowiada nam które jeszcze mogą być nam potrzebne.
Jeżeli już wybierzemy tabele które chcemy użyć możemy podejrzeć dane, albo założyć na nie odpowiednie filtry. W tym celu wybieramy przycisk “Preview & Filter”, pojawi się wówczas poniższe okienko.
Wybierając filtr na danej kolumnie pojawia nam sie interfejs znany wcześniej np.: z programu Excel.
Po wybraniu tabel i widoków, założeniu ewentualnych ograniczeń przechodzimy dalej.
Pojawia się okno kreatora pokazujące postęp pobierania danych, a także informacje dotyczące ewentualnych błędów, czy też statystyk dotyczących ilości wierszy w poszczególnych tabelach czy też widokach.
Po zakończeniu importu można przejrzeć te rezultaty.
I tak mamy już dane zaimportowane…
Teraz możemy przeanalizować co można zrobić z poszczególnymi tabelami, czy też kolumnami.
W zakładce TABLE mamy poszczególne informacje:
- Source Name – nazwa tabeli
- Last Refreshed – data i czas kiedy ostatnio dane były odświeżane
- Connection – Nazwa połączenia przy użyciu którego pobraliśmy dane
- Edit Connection – można zmienić ustawienia dotyczące połączenia (Serwer, metodę autoryzacji, bazę danych)
- Edit Table Properties – właściwości tabeli (widoczne na rysunku poniżej)
Przy użyciu tego okna można zmienić podstawowe ustawienia, a także dodać lub zlikwidować filtry założone na tej tabeli.
Kolejne opcje w zakładce TABLE to ustawienia dotyczące połączonej tabeli, a także zarządzanie relacjami.
O zarządzaniu relacjami i relacjach w PowerPivot zamierzam napisać oddzielny post, bo to ważny temat, tak że tutaj tylko w skrócie.
Wybierając przycisk “Manage Relationships” otrzymujemy okno:
Widzimy w tym oknie wszystkie utworzone relacje (w naszym przypadku wszystkie relacja automatycznie zostały utworzone przez PowerPivot na podstawie danych w relacyjnej bazie danych). Chcąc utworzyć nową, edytować lub usunąć istniejącą wybieramy odpowiedni przycisk. Po wybraniu edycja
mamy możliwość zmienić ustawienia dotyczące konkretnej relacji.
Tyle o możliwościach dotyczących zakładki TABLE, teraz przedstawię możliwości zarządzania i edycji kolumn.
W tej zakładce mamy trzy sekcje:
- Column Options
- Add Column – dodawanie kolumny
- Delete Column –usuwanie kolumny
- Freeze, Unfreeze - mrożenie (blokowanie) kolumny
- Hide and Unhide – ukrywanie i pokazywanie kolumn
- Data Type and Formating
- Przyciski dotyczące walut, procent, przecinka, precyzji – znane z programu Excel
- Data Type – ustawienie typu danych (mamy do dyspozycji tekst, liczby, waluty lub dane logiczne)
- �
- Format – ustawienie formatu danych (np.: waluta, liczby całkowite…)
- Sort and Filter – sortowanie i filtrowanie danych w kolumnie
W ten o to sposób mamy przygotowane źródło danych. W kolejnym poście opiszę przykłady jak można skorzystać z tak przygotowanych danych źródłowych.
UWAGA!
W powyższym poście korzystam z wersji CTP, już wiadomo, iż wersja finalna, która niebawem ma być opublikowana nieznacznie różni się od tej wersji. Można to było zobaczyć między innymi na konferencji MCT VIRTUALSUMMIT 2010.
Po wyjściu wersji RC lub RTM przedstawię na blogu zmiany w paskach narzędzi.
