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.

1May/100

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.

001

Po wybraniu przycisku PowerPivot Window uruchamia nam się kolejny program, bardzo podobny do programu Excel.

002

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”.

003

Jeżeli chcielibyśmy wczytać z dowolnego pliku wybieramy opcje “From Files”

005

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.

004

W naszym przykładzie wybierzemy pierwszą opcje “From Databes” - “From SQL Server”. Po jej wybraniu pojawia się następujące okienko.

006

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ć. 007

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.

009

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.

010

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.

011 

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ść.

012

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”.

013

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.

014 

Wybierając filtr na danej kolumnie pojawia nam sie interfejs znany wcześniej np.: z programu Excel.

015

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.

016

Po zakończeniu importu można przejrzeć te rezultaty.

017

I tak mamy już dane zaimportowane…

025 

Teraz możemy przeanalizować co można zrobić z poszczególnymi tabelami, czy też kolumnami.

019

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)

018

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:

020

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

021

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.

022

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)

023

    • Format – ustawienie formatu danych (np.: waluta, liczby całkowite…)

024

  • 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.

   
Better Tag Cloud