Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00081 007911 21003073 na godz. na dobę w sumie
Kompletny przewodnik po DAX, wyd. 2 rozszerzone. Analiza biznesowa przy użyciu Microsoft Power BI, SQL Server Analysis Services i Excel - ebook/pdf
Kompletny przewodnik po DAX, wyd. 2 rozszerzone. Analiza biznesowa przy użyciu Microsoft Power BI, SQL Server Analysis Services i Excel - ebook/pdf
Autor: , Liczba stron: 864
Wydawca: Promise Język publikacji: polski
ISBN: 978-83-754-1428-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> sql - programowanie
Porównaj ceny (książka, ebook, audiobook).

WYDANIE DRUGIE uzupełnione i rozszerzone Najbardziej wyczerpujący przewodnik po języku DAX, obecnie rozszerzony i uzupełniony o najnowsze funkcje i nowoczesne zalecane praktyki, prezentujący opracowany w firmie Microsoft język na potrzeby analiz biznesowych i modelowania danych. Czołowi eksperci w dziedzinie Microsoft BI pomagają opanować wszystkie elementy systemu, od funkcji tablicowych po zaawansowany kod i optymalizację modelu. Dowiedz, co naprawdę dzieje się przy wykonywaniu poleceń DAX i jak użyć tej wiedzy do pisania szybkiego i niezawodnego kodu. Wydanie to skupia się na przykładach, które można budować i uruchamiać przy użyciu bezpłatnego narzędzia Power BI Desktop i pomaga wydobyć najwięcej korzyści ze składni zmiennych (VAR) w Power BI, Excelu lub Analysis Services. Pragniesz wykorzystać wszystkie możliwości języka ? To książka, której potrzebujesz. Wykonuj skuteczną analizę danych w programach Power BI, SQL Server i Excel Poznaj podstawowe koncepcje DAX, w tym kolumny obliczane, miary i obsługę błędów Wydajnie korzystaj z zaawansowanych funkcji tablicowych Opanuj istotę kontekstów wykonania oraz funkcje ­CALCULATE i CALCULATETABLE Wykonuj obliczenia czasowe i oparte na niestandardowych hierarchiach Korzystaj z grup obliczeń i elementów obliczanych Używaj składni zmiennych do tworzenia bardziej czytelnego, zrozumiałego kodu Wyrażaj różnorodne nietypowe relacje, w tym relacje wiele-do-wielu i filtry dwukierunkowe Opanuj zaawansowane techniki optymalizacyjne, aby zwiększyć wydajność agregacji Optymalizuj modele danych Mierz wydajność zapytań przy użyciu DAX Studio i dowiedz się, jak optymalizować kod DAX O tej książce Dla zaawansowanych użytkowników programu Excel oraz anlityków BI używających SQL Server Analysis Services lub Power BI O autorach Marco Russo i Alberto Ferrari są współzałożycielami strony sqlbi.com, w której regularnie publikują artykuły na temat Microsoft PowerPivot, DAX, Power BI oraz SQL Server Analysis Services. Występują też na głównych międzynarodowych konferencjach, takich jak TechEd, Ignite, PASS Summit czy SQLBits. Obydwaj wykładają teorię analizy biznesowej (BI) oraz technologie Microsoft BI począwszy od roku 1999. Książki ich autorstwa obejmują Excel 2013: Budowanie modeli danych przy użyciu PowerPivot, Analyzing Data with Power BI and Power Pivot for Excel oraz Introducing Microsoft Power BI.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Strona tytułowa Kompletny przewodnik po DAX Analiza biznesowa przy użyciu Microsoft Power BI, SQL Server Analysis Services i Excel 2 wydanie UZUPEŁNIONE I ROZSZERZONE Marco Russo i Alberto Ferrari Przekład: Marek Włodarz APN Promise Warszawa 2019 Wstęp do drugiego wydania Kiedy postanowiliśmy, że czas już, aby odświeżyć tę książkę, sądziliśmy, że będzie to łatwe zadanie: ostatecznie nie tak wiele zmieniło się w języku DAX i teoretyczne podstawy tej książki nadal są bardzo dobre. Wydawało się nam, że wystarczy się skupić głównie na zmianie zrzutów ekranu z Excela na Power BI, dodanie kilku poprawek tu i tam i wszystko będzie zrobione. Jak bardzo się myliliśmy! Gdy tylko zaczęliśmy uaktualniać pierwszy i drugi rozdział, szybko odkryliśmy, że w rzeczywistości musimy przepisać niemal wszystko. Potrzeba ta narastała z każdą kolejną stroną. Dlatego w istocie nie jest to drugie wydanie; to zupełnie nowa książka. Powodem nie jest to, że język zmienił się aż tak drastycznie; narzędzia też nie. Przyczyna leży w tym, że w ciągu minionych paru lat to my – jako nauczyciele i auto- rzy – bardzo się zmieniliśmy, miejmy nadzieję na lepsze. Uczyliśmy języka DAX tysiące użytkowników i deweloperów na całym świecie; ciężko pracowaliśmy z naszymi stu- dentami, zawsze starając się znaleźć najlepszą metodę wyjaśniania trudnych zagadnień. W rezultacie znaleźliśmy różne sposoby opisywania języka, który tak lubimy. W tym wydaniu zwiększyliśmy liczbę przykładów, pokazując praktyczne zasto- sowania funkcjonalności po przedstawieniu teoretycznych fundamentów DAX. Staraliśmy się używać prostszego stylu, ale bez rezygnowania z precyzji. Stale kłóci- liśmy się z redaktorem o zwiększenie liczby stron, co było konieczne dla omówienia wszystkich tematów, którymi chcieliśmy się podzielić. Nie zmieniliśmy jednak pod- stawowej myśli przewodniej tej książki: nie zakładamy żadnej wcześniejszej wiedzy na temat DAX, mimo że książka nie jest adresowana do osób, które jedynie okazjo- nalnie używają tego języka. Naszymi odbiorcami powinni być ci, którzy chcą się go nauczyć, aby zdobyć pogłębione zrozumienie i umiejętności wykorzystywania całej mocy i złożoności języka DAX. Tak, jeśli ktoś chce wykorzystać prawdziwą moc DAX, musi przygotować się na długą drogę, czytając tę książkę od deski do deski, a później jeszcze raz, szukając wielu detali, które nie były oczywiste na pierwszy rzut oka. xvii Spis treści Przedmowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xv Wstęp do drugiego wydania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvii Wstęp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Podziękowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xxv O autorach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xxvii 1 Czym jest DAX? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Istota modelu danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Zrozumienie kierunku relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 DAX dla użytkowników Excela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Komórki kontra tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Excel i DAX: dwa języki funkcyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Korzystanie z iteratorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 DAX wymaga nieco teorii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 DAX dla programistów SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Obsługiwanie relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 DAX jest językiem funkcyjnym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 DAX jako język programowania i zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Podzapytania i warunki w DAX i SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 DAX dla programistów MDX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Model wielowymiarowy kontra tabelaryczny . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 DAX jako język programowania i zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Hierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Obliczenia na poziomie liści . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 DAX dla użytkowników Power BI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2 Wprowadzenie do DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Istota obliczeń DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Typy danych DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Operatory języka DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Konstruktory tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Wyrażenia warunkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Istota kolumn obliczanych i miar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Kolumny obliczane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Miary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 v Zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Obsługa błędów w wyrażeniach DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Błędy konwersji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Błędy w operacjach arytmetycznych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Przechwytywanie błędów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Generowanie błędów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Formatowanie kodu DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Wprowadzenie do iteratorów i funkcji agregujących . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Korzystanie z podstawowych funkcji DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Funkcje agregujące . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Funkcje logiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Funkcje informacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Funkcje matematyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Funkcje trygonometryczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Funkcje tekstowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Funkcje konwersji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Funkcje daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Funkcje relacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3 Podstawowe funkcje tablicowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Wprowadzenie do funkcji tablicowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Wprowadzenie do składni polecenia EVALUATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Istota funkcji FILTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Funkcje ALL i ALLEXCEPT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Funkcje VALUES, DISTINCT i puste wiersze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Używanie tabel jako wartości skalarnych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Funkcja ALLSELECTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 4 Istota kontekstów wykonania. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Wprowadzenie do kontekstów wykonania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Istota kontekstów filtru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Kontekst wiersza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Sprawdzenie zrozumienia kontekstów wykonania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Użycie funkcji SUM w kolumnie obliczanej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Użycie kolumn w mierze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Tworzenie kontekstu wiersza poprzez iteratory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Zagnieżdżone konteksty wiersza w różnych tabelach . . . . . . . . . . . . . . . . . . . 102 Zagnieżdżone konteksty wiersza w tej samej tabeli . . . . . . . . . . . . . . . . . . . . . 104 Korzystanie z funkcji EARLIER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Iteratory FILTER, ALL i interakcje kontekstów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Praca z wieloma tabelami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 vi Spis treści Kontekst wiersza a relacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Kontekst filtru a relacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Stosowanie funkcji DISTINCT i SUMMARIZE w kontekstach filtru . . . . . . . . . . . . . . . 123 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 5 Funkcje CALCULATE i CALCULATETABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Funkcja CALCULATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Tworzenie kontekstu filtru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Przedstawiamy funkcję CALCULATE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Wykorzystanie CALCULATE do obliczania udziału procentowego . . . . . . . . . 139 Funkcja KEEPFILTERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Filtrowanie pojedynczej kolumny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Złożone warunki filtrowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Kolejność przetwarzania w funkcji CALCULATE . . . . . . . . . . . . . . . . . . . . . . . . . 161 Przejście kontekstu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Przypomnienie wiadomości o kontekście wiersza i kontekście filtru . . . . . . . 166 Wprowadzenie do przejścia kontekstu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Przejście kontekstu w kolumnach obliczanych . . . . . . . . . . . . . . . . . . . . . . . . . 172 Przejście kontekstu dla miar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Zależności cykliczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Modyfikatory funkcji CALCULATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Modyfikator USERELATIONSHIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Modyfikator CROSSFILTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Modyfikator KEEPFILTERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Istota funkcji ALL w CALCULATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 ALL i ALLSELECTED bez żadnych parametrów . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Reguły dotyczące CALCULATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 6 Zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Wprowadzenie do składni VAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Zmienne są stałymi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Zakres zmiennej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Korzystanie ze zmiennych tablicowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Istota leniwego wartościowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Typowe wzorce wykorzystania zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 7 Korzystanie z iteratorów i CALCULATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Korzystanie z iteratorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Istota kardynalności iteratora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Wykorzystywanie przejścia kontekstu w iteratorach . . . . . . . . . . . . . . . . . . . . . 213 Korzystanie z CONCATENATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Iteratory zwracające tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 vii Rozwiązywanie typowych scenariuszy przy użyciu iteratorów . . . . . . . . . . . . . . . . . . 223 Obliczanie średnich i średnich kroczących . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Korzystanie z funkcji RANKX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Zmienianie granularności obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 8 Funkcje analizy czasowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Wprowadzenie do analizy czasowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Automatyczne funkcje Daty/czasu w Power BI . . . . . . . . . . . . . . . . . . . . . . . . . 242 Automatyczne kolumny dat w Power Pivot for Excel . . . . . . . . . . . . . . . . . . . . 243 Szablon tabeli kalendarzowej w Power Pivot for Excel . . . . . . . . . . . . . . . . . . . 243 Budowanie tabeli kalendarzowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Korzystanie z funkcji CALENDAR i CALENDARAUTO . . . . . . . . . . . . . . . . . . . . 246 Praca z wieloma datami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Obsługa wielu relacji do tabeli Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Obsługiwanie wielu tabel kalendarzowych. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Wprowadzenie do analizy czasowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Ustawienie Mark as Date Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Przedstawiamy podstawowe funkcje analizy czasowej . . . . . . . . . . . . . . . . . . . . . . . . 260 Od początku okresu (roku, kwartału, miesiąca) . . . . . . . . . . . . . . . . . . . . . . . . . 261 Obliczanie wartości dla wcześniejszych okresów . . . . . . . . . . . . . . . . . . . . . . . . 264 Łączenie funkcji analizy czasowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Obliczanie różnic względem wcześniejszych okresów . . . . . . . . . . . . . . . . . . . 270 Obliczanie rocznej sumy kroczącej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Właściwa kolejność wywoływania zagnieżdżonych funkcji analizy czasowej 274 Miary częściowo agregowalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Funkcje LASTDATE i LASTNONBLANK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Obliczanie sald początkowych i końcowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Zaawansowana analiza czasowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Przedziały „do dzisiaj” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Funkcja DATEADD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Funkcje FIRSTDATE, LASTDATE, FIRSTNONBLANK i LASTNONBLANK. . . . . . 300 Drążenie danych w analizie czasowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Niestandardowe kalendarze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Praca z tygodniami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Niestandardowe obliczenia od początku roku, kwartału i miesiąca . . . . . . . . 308 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 9 Grupy obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Wprowadzenie do grup obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Tworzenie grup obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Istota grup obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Stosowanie elementów obliczanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 viii Spis treści Pierwszeństwo grup obliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Dołączanie i wykluczanie miar z elementów obliczanych . . . . . . . . . . . . . . . . 339 Istota rekurencji pobocznej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 Najlepsze praktyki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 10 Posługiwanie się kontekstem filtru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Korzystanie z funkcji HASONEVALUE i SELECTEDVALUE . . . . . . . . . . . . . . . . . . . . . . . 350 Funkcje ISFILTERED i ISCROSSFILTERED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Różnice pomiędzy funkcjami VALUES i FILTERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Różnice pomiędzy funkcją ALLEXCEPT a ALL/VALUES . . . . . . . . . . . . . . . . . . . . . . . . . 361 Wykorzystanie ALL w celu uniknięcia przejścia kontekstu . . . . . . . . . . . . . . . . . . . . . . 366 Korzystanie z funkcji ISEMPTY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Wprowadzenie do rodowodu danych i TREATAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 Arbitralnie ukształtowane filtry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 11 Hierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Obliczanie procentowych udziałów w hierarchiach . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Obsługa hierarchii rodzic-dziecko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 12 Praca z tabelami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Funkcja CALCULATETABLE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Przekształcanie tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Funkcja ADDCOLUMNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Funkcja SUMMARIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 Funkcja CROSSJOIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Funkcja UNION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Funkcja INTERSECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 Funkcja EXCEPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Wykorzystywanie tabel jako filtrów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 Implementowanie alternatywy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 Zawężanie obliczeń do klientów z pierwszego roku . . . . . . . . . . . . . . . . . . . . . 428 Znajdowanie nowych klientów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Ponowne wykorzystanie wyrażeń tablicowych dzięki DETAILROWS . . . . . . . 432 Tworzenie tabel obliczanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 Funkcja SELECTCOLUMNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 Tworzenie tabel statycznych przy użyciu funkcji ROW . . . . . . . . . . . . . . . . . . . 436 Tworzenie tabel statycznych przy użyciu DATATABLE . . . . . . . . . . . . . . . . . . . . 437 Funkcja GENERATESERIES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 ix 13 Budowanie zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Wprowadzenie do DAX Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Istota funkcji EVALUATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 Składnia EVALUATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 Używanie VAR w sekcji DEFINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 Korzystanie z MEASURE w sekcji DEFINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Implementowanie typowych wzorców zapytań. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 Wykorzystanie funkcji ROW do testowania miar . . . . . . . . . . . . . . . . . . . . . . . . 447 Korzystanie z funkcji SUMMARIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 Korzystanie z funkcji SUMMARIZECOLUMNS . . . . . . . . . . . . . . . . . . . . . . . . . . 450 Korzystanie z funkcji TOPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 Korzystanie z funkcji GENERATE i GENERATEALL . . . . . . . . . . . . . . . . . . . . . . . 464 Korzystanie z funkcji ISONORAFTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 Korzystanie z funkcji ADDMISSINGITEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 Korzystanie z funkcji TOPNSKIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Funkcja GROUPBY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Korzystanie z funkcji NATURALINNERJOIN i NATURALLEFTOUTERJOIN . . . . 474 Korzystanie z funkcji SUBSTITUTEWITHINDEX . . . . . . . . . . . . . . . . . . . . . . . . . . 477 Korzystanie z funkcji SAMPLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 Istota zachowania auto-exists w zapytaniach DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 14 Zaawansowane koncepcje języka DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 Wprowadzenie do tabel rozszerzonych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 Istota funkcji RELATED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 Używanie funkcji RELATED w kolumnach obliczanych . . . . . . . . . . . . . . . . . . . 496 Istota różnicy pomiędzy filtrami tabel a filtrami kolumn . . . . . . . . . . . . . . . . . . . . . . . 497 Używanie filtrów tablicowych w miarach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 Relacje aktywne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 Rozróżnienie pomiędzy rozszerzaniem tabel a filtrowaniem . . . . . . . . . . . . . 507 Przejście kontekstu w tabelach rozszerzonych. . . . . . . . . . . . . . . . . . . . . . . . . . 509 Istota funkcji ALLSELECTED i przesłanianych kontekstów filtru . . . . . . . . . . . . . . . . . 510 Pojęcie przesłanianych kontekstów filtru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 ALLSELECTED zwraca iterowane wiersze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 ALLSELECTED bez parametrów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Rodzina funkcji ALL* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 ALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 ALLEXCEPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 ALLNOBLANKROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 ALLSELECTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 ALLCROSSFILTERED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 Istota rodowodu danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 x Spis treści 15 Zaawansowana obsługa relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 Stosowanie obliczanych relacji fizycznych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 Tworzenie relacji wielokolumnowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528 Implementowanie relacji opartych na zakresach . . . . . . . . . . . . . . . . . . . . . . . . 530 Zależności cykliczne w fizycznych relacjach obliczanych . . . . . . . . . . . . . . . . . 533 Implementowanie relacji wirtualnych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 Przenoszenie filtrów w DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 Transferowanie filtru przy użyciu TREATAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 Transferowanie filtru przy użyciu INTERSECT . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 Transferowanie filtru przy użyciu FILTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 Implementacja dynamicznej segmentacji przy użyciu relacji wirtualnych . . 543 Istota mechanizmu relacji fizycznych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 Używanie dwukierunkowego filtrowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 Istota relacji jeden-do-wielu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Istota relacji jeden-do-jednego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Istota relacji wiele-do-wielu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553 Implementowanie relacji wiele-do-wielu przy użyciu tabeli mostka . . . . . . . 553 Implementowanie relacji wiele-do-wielu przy użyciu wspólnego wymiaru . 559 Implementowanie wiele-do-wielu przy użyciu słabych relacji mmr . . . . . . . . 564 Wybieranie właściwego typu relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 Zarządzanie granularnościami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 Zarządzanie niejednoznacznościami w relacjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 Niejednoznaczność w aktywnych relacjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 Rozwiązywanie niejednoznaczności w nieaktywnych relacjach. . . . . . . . . . . . 577 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 16 Zaawansowane obliczenia w języku DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . 581 Obliczanie liczby dni roboczych pomiędzy dwiema datami . . . . . . . . . . . . . . . . . . . . 581 Pokazywanie łącznie danych budżetu i sprzedaży . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Obliczanie sprzedaży w tym samym sklepie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 Numerowanie sekwencji zdarzeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600 Obliczanie wartości sprzedaży z poprzedniego roku do wskazanej daty . . . . . . . . . 603 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609 17 Silniki DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 Architektura silników DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 Istota silnika zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 Istota silnika magazynowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 Wprowadzenie do silnika magazynowego VertiPaq . . . . . . . . . . . . . . . . . . . . . 615 Wprowadzenie do silnika magazynowego DirectQuery . . . . . . . . . . . . . . . . . 616 Istota odświeżania danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616 Działanie silnika magazynowego VertiPaq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 Wprowadzenie do kolumnowych baz danych . . . . . . . . . . . . . . . . . . . . . . . . . . 618 xi Istota kompresji VertiPaq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621 Istota ponownego kodowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627 Znajdowanie najlepszego uporządkowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 Segmentacja i partycjonowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 Korzystanie z dynamicznych widoków zarządzania . . . . . . . . . . . . . . . . . . . . . 632 Wykorzystywanie relacji w VertiPaq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 Wprowadzenie do materializacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638 Wprowadzenie do agregacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641 Wybieranie sprzętu dla bazy danych VertiPaq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643 Czy możemy wybrać sprzęt? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644 Ustalanie priorytetów sprzętowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644 Model procesora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645 Szybkość pamięci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 Wielkość pamięci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 Liczba rdzeni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647 Dyskowe operacje I/O i stronicowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647 Najlepsze praktyki przy wybieraniu sprzętu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648 18 Optymalizowanie VertiPaq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 Gromadzenie informacji o modelu danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650 Denormalizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655 Kardynalność kolumn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662 Obsługa daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663 Kolumny obliczane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 Optymalizowanie złożonych filtrów przy użyciu logicznych kolumn obliczanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670 Przetwarzanie kolumn obliczanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 Wybieranie właściwych kolumn do przechowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 Optymalizowanie przechowywania kolumn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 Optymalizacja przez podział kolumny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 Optymalizowanie kolumn o wysokiej kardynalności . . . . . . . . . . . . . . . . . . . . . 677 Wyłączanie hierarchii atrybutów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 Optymalizowanie atrybutów drążenia w głąb . . . . . . . . . . . . . . . . . . . . . . . . . . 678 Zarządzanie agregacjami VertiPaq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 19 Analizowanie planów zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 Przechwytywanie zapytań DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 Wprowadzenie do planów zapytań DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 Gromadzenie planów zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688 Logiczny plan zapytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 Fizyczny plan zapytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 xii Spis treści Zapytanie do silnika magazynowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691 Przechwytywanie informacji profilowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692 Korzystanie z DAX Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693 Korzystanie z SQL Server Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696 Czytanie zapytań do silnika magazynowego VertiPaq . . . . . . . . . . . . . . . . . . . . . . . . . 700 Wprowadzenie do składni xmSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701 Czas skanowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710 Wewnętrzne mechanizmy funkcji DISTINCTCOUNT . . . . . . . . . . . . . . . . . . . . . 712 Istota równoległości i buforów danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713 Pamięć podręczna VertiPaq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715 Istota elementu CallbackDataID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718 Czytanie zapytań do silnika DirectQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724 Analizowanie modeli kompozytowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726 Używanie agregacji w modelu danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727 Czytanie planów zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 20 Optymalizowanie kodu DAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 Definiowanie strategii optymalizacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740 Identyfikacja pojedynczego wyrażenia DAX, które wymaga optymalizacji . . 740 Utworzenie zapytania reprodukującego problem . . . . . . . . . . . . . . . . . . . . . . . 744 Analiza czasów wykonania i informacji zawartych w planie zapytania . . . . . 748 Identyfikacja wąskich gardeł w silniku magazynowym lub silniku formuł . . . 751 Implementowanie zmian i ponowne uruchamianie zapytania testowego . . 752 Optymalizowanie wąskich gardeł silnika magazynowego . . . . . . . . . . . . . . . . . . . . . . 752 Optymalizowanie warunków filtrowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 Optymalizowanie przejść kontekstu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757 Optymalizowanie warunków IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 Redukowanie wpływu CallbackDataID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777 Optymalizowanie zagnieżdżonych iteratorów . . . . . . . . . . . . . . . . . . . . . . . . . . 781 Unikanie filtrów tablicowych dla funkcji DISTINCTCOUNT . . . . . . . . . . . . . . . 788 Unikanie wielokrotnego obliczania przy użyciu zmiennych . . . . . . . . . . . . . . 793 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798 Indeks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799 xiii
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Kompletny przewodnik po DAX, wyd. 2 rozszerzone. Analiza biznesowa przy użyciu Microsoft Power BI, SQL Server Analysis Services i Excel
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: