Professional Documents
Culture Documents
Power Query W Excelu I Power Bi Zbieranie I Przeksztalcanie Danych Gil Raviv Ebookpoint - PL
Power Query W Excelu I Power Bi Zbieranie I Przeksztalcanie Danych Gil Raviv Ebookpoint - PL
ISBN: 978-83-8322-472-5
Authorized translation from the English language edition, entitled COLLECT, COMBINE, AND
TRANSFORM DATA USING POWER QUERY IN EXCEL AND POWER BI, 1st Edition by RAVIV, GIL,
published by Pearson Education, Inc, publishing as Microsoft Press, Copyright © 2019 by Gil Raviv.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval
system, without permission from Pearson Education, Inc.
Electronic POLISH language edition published by HELION S.A., Copyright © 2020, 2023.
Microsoft and the trademarks listed at http://www.microsoft.com on the “Trademarks” web page are
trademarks of the Microsoft group of companies. All other marks are the property of their respective owners.
Autor oraz wydawca dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne
i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym
ewentualne naruszenie praw patentowych lub autorskich. Autor oraz wydawca nie ponoszą również
żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Helion S.A.
ul. Kościuszki 1c, 44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
WWW: https://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
https://helion.pl/user/opinie/poquev_ebook
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
4650570396d9eb2765da56c12eb840b5
4
Spis treści
Przedmowa ......................................................................................................11
O autorze ..........................................................................................................13
Podziękowania .................................................................................................14
Wprowadzenie .................................................................................................17
Rozdział 1. Wprowadzenie do Power Query .......................................................................27
Czym jest Power Query? ...............................................................................................................28
Historia Power Query w skrócie ...........................................................................................29
Gdzie znajduje się Power Query? .........................................................................................32
Główne komponenty Power Query ............................................................................................33
Pobieranie danych i tworzenie połączeń .............................................................................33
Najważniejsze elementy edytora Power Query ..................................................................34
Ćwiczenie 1.1. Pierwsze kroki z Power Query ..........................................................................39
Podsumowanie ...............................................................................................................................43
4650570396d9eb2765da56c12eb840b5
4
SPIS TREŚCI
4650570396d9eb2765da56c12eb840b5
4
SPIS TREŚCI
4650570396d9eb2765da56c12eb840b5
4
SPIS TREŚCI
4650570396d9eb2765da56c12eb840b5
4
SPIS TREŚCI
4650570396d9eb2765da56c12eb840b5
4
SPIS TREŚCI
4650570396d9eb2765da56c12eb840b5
4
SPIS TREŚCI
4650570396d9eb2765da56c12eb840b5
4
O ilustracjach
Rozdział 1.: rysunki 1.1 – 1.9 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 2.: rysunki 2.1 – 2.16 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 3.: rysunki 3.1 – 3.8 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 4.: rysunki 4.1 – 4.11 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 5.: rysunki 5.1 – 5.11 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 6.: rysunki 6.1 – 6.9 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 7.: rysunki 7.1 – 7.5 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 8.: rysunki 8.1 – 8.10 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 9.: rysunki 9.2 – 9.10 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 10.: rysunki 10.2 – 10.9 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 11.: rysunki 11.1 – 11.14 oraz 11.16 – 11.17 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 12.: rysunki 12.3 – 12.8 oraz 12.10 – 12.14 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 13.: rysunki 13.1 – 13.11 zamieszczono dzięki uprzejmości firmy Microsoft.
Rozdział 14.: rysunki 14.1 – 14.3 zamieszczono dzięki uprzejmości firmy Microsoft.
4650570396d9eb2765da56c12eb840b5
4
Przedmowa
Decydując się na utworzenie dodatku Power Query do Excela, postawiliśmy sobie prosty, ale
ambitny cel: zrobić narzędzie do łączenia i przekształcania wszelkiego rodzaju danych. Po upływie
pięciu lat wyszliśmy daleko poza natywny dodatek do Excela, Power BI, Power Apps i wielu innych
programów do wyodrębniania i przekształcania danych, ale główny cel pozostał niemal niezmieniony.
Zważywszy na coraz większą różnorodność danych, nasza misja pod wieloma względami stała się
jeszcze bardziej ambitna i angażująca. Dzisiaj informatyka polega w dużej mierze na przetwarzaniu
danych, ale dane te nie zawsze są tam, gdzie byśmy chcieli, i często nie mają potrzebnej nam postaci.
Dlatego wciąż rozwijamy narzędzie Power Query, a naszym celem jest wypełnienie luki pomiędzy
danymi w surowej i żądanej postaci.
W naszej podróży z Power Query zawsze bardzo ważna była społeczność użytkowników, ich
sugestie i opinie. Nie tylko mieli oni wpływ na kształt produktu, ale również odgrywali główną rolę
w opracowywaniu wartościowych treści edukacyjnych. Autor tej książki był główną siłą napędową
w integracji Power Query z Excelem, służył wieloma cennymi opiniami oraz radami i nawet
po zakończeniu swojej kadencji w Microsoft wciąż jest aktywnym i wpływowym członkiem
społeczności użytkowników Power Query.
Udanego kwerendowania!
— Sid Jayadevan, kierownik inżynierii Power Query, Microsoft Corporation
Power Query jest potężnym i elastycznym programem stanowiącym rdzeń narzędzi Microsoft BI
(ang. Business Intelligence — analityka biznesowa). Wyposażony w intuicyjny i przemyślany interfejs
umożliwia pozyskiwanie, konsolidowanie i filtrowanie danych pochodzących z bardzo różnych źródeł.
W analityce biznesowej przygotowanie danych zajmuje nawet 80% czasu, dlatego pierwszym krokiem
do wszelkiego rodzaju projektów obejmujących przetwarzanie i raportowanie danych powinno być
dogłębne poznanie Power Query. W tej książce oprócz podstawowych funkcjonalności tego narzędzia
opisane są bardziej zaawansowane tematy, takie jak automatyczne przygotowywanie i oczyszczanie
danych, pozyskiwanie z serwisów społecznościowych opinii użytkowników o firmie, zastosowanie
uczenia maszynowego do analizy wydźwięku tekstu, pozyskiwanie za pomocą języka M wartościowych
informacji z praktycznie dowolnych źródeł surowych danych. Do książki dołączone są pliki zawierające
gotowe próbki i źródła danych wraz ze szczegółowymi instrukcjami.
4650570396d9eb2765da56c12eb840b5
4
PRZEDMOWA
Autor jest byłym członkiem zespołu rozwijającego program Excel i członkiem grupy Microsoft
Data Team. Ponieważ bezpośrednio angażował się w kształt funkcjonalności Power Query, zna
dogłębnie jego użytkowanie i potrafi pokazać, jak łatwo można rozwiązywać skomplikowane
problemy integracji danych. Choć Power Query jest niezwykle elastycznym i prostym w użyciu
dodatkiem, opanowanie go w stopniu umożliwiającym przetwarzanie danych biznesowych może
być trudnym zadaniem. Jednakże autor, jako aktywny członek społeczności użytkowników,
uczestnik forów dyskusyjnych, prezenter na konferencjach, mentor i certyfikowany ekspert Power
BI, potrafi po mistrzowsku dzielić skomplikowane problemy na bardzo proste kroki. Ta książka jest
kluczem do sukcesu i obowiązkową lekturą dla każdego analityka biznesowego, administratora
systemów danych i przedsiębiorcy, który chce czerpać korzyści z otaczających go danych.
— Charles Sterling, Starszy Kierownik Programu, Microsoft Corporation
12
4650570396d9eb2765da56c12eb840b5
4
O autorze
4650570396d9eb2765da56c12eb840b5
4
PODZIĘKOWANIA
Podziękowania
Pisanie tej książki było jednym z najstraszniejszych doświadczeń, na które dobrowolnie się
zdecydowałem. Wiedziałem, że wyruszam w podróż do nieznanej krainy, w której przede mną byli
tylko nieliczni, krainy nieustannie rozwijającej się technologii, która choć jeszcze mało znana, może
radykalnie ułatwić życie wielu specjalistom. Jak mógłbym się z nimi bezboleśnie podzielić wiedzą,
aby mogli poznać istotę tej technologii i praktycznie wykorzystywać ją w biznesie?
Napisanie tej książki nie byłoby możliwe bez pomocy i inspiracji wielu osób.
Przede wszystkim chciałbym podziękować gościom mojej strony DataChant.com. Dzięki
waszym opiniom i wsparciu to przedsięwzięcie okazało się możliwe do zrealizowania. Daliście mi
moc dzielenia się wiedzą.
Dziękuję mojej żonie i dzieciom za pozostanie ze mną w domu i wsparcie w pracy pod koniec
roku 2017 i w chłodne dni roku 2018. Mam nadzieję, że winę za spędzenie wielu weekendów
w domu ponosi też zima w Chicago.
Proszę o przyjęcie specjalnych podziękowań Trinę MacDonald, starszą redaktor w wydawnictwie
Pearson, za kontakt, pomysł napisania książki i ciągłe wsparcie, dzięki któremu powstała zupełnie
inna książka. Życzę szczęścia na nowej drodze.
Na moją wdzięczność zasłużył również Justin DeVault, mój pierwszy klient z tytułem Six Sigma
Master Black Belt i korektor merytoryczny, który przejrzał 14 rozdziałów, 71 ćwiczeń i 211 plików,
a dzięki jego doświadczeniu biznesowemu i wiedzy technicznej książka jest tym, czym powinna być.
Nie poradziłbym sobie bez jego wiedzy. Jest to najwłaściwsza osoba do takich zadań.
Podziękowania otrzymuje też Loretta Yates oraz członkowie zespołu wydawnictwa Microsoft
Press i firmy Pearson biorący udział w tym projekcie. Wśród nich są Songlin Qiu, Ellie Bru i Kitty
Wilson, którzy zredagowali i sprawdzili tekst, oraz Tonya Simpson nadzorująca cały proces wydawniczy.
Wszyscy oni w magiczny sposób zamienili 14 plików Worda w książkę.
Podziękowania niech przyjmie mój drogi przyjaciel, Yohai Nir, za otuchę i wskazówki udzielane
na początku pracy nad książką.
Dziękuję Luisowi Cabrerze-Cordonowi za przejrzenie rozdziału 12. Mam nadzieję, że ułatwi on
analitykom korzystanie z usług Microsoft Cognitive Services i pozyskiwanie informacji bez pomocy
programistów i badaczy danych.
Podziękowania kieruję do niezwykłych menedżerów programu. Są to Guy Hunkin, Miguel
Llopis, Matt Masson i Chuck Sterling, którzy nieustannie mnie wspierali i udzielali technicznych
porad. Ich zaangażowanie było naprawdę inspirujące.
14
4650570396d9eb2765da56c12eb840b5
4
. PODZIĘKOWANIA
Sid Jayadevan, Eli Schwarz, Vladik Branevich i zespoły programistów w Redmond i Israeli to
niesamowici ludzie, z którymi praca nad dodatkiem Power Query do Excela 2016 była prawdziwą
przyjemnością.
Specjalne podziękowania kieruję do Yigal Edery za przyjęcie mnie w szeregi zespołu Microsoft
Excel i zagrzewanie do większego zaangażowania. Nigdy nie zapomnę tego wieczoru, kiedy
zatrzymał się na poboczu, aby podzielić się ze mną swoją opinią.
Tej książki nie byłoby, gdyby nie Rob Collie, który zaprosił mnie do grona blogerów
i konsultantów w serwisie PowerPivotPro.com i pomógł wejść do nowego, wspaniałego świata.
Marco Russo, Ken Puls, Chris Webb, Matt Allington i Reza Rad to specjaliści Microsoft MVP
i blogerzy Power BI, którzy są moimi wzorami do naśladowania. Dziękuję im za inspirację
i dzielenie się swoją ogromną wiedzą.
Ponieważ do zespołu Avanade Analytics dołączyłem na początku roku 2017, zdążyłem się już
wiele nauczyć. Na moją szczególną wdzięczność zasłużył mój mentor i szef Neelesh Raheja, który
otworzył przede mną szerokie horyzonty na oceanie analiz biznesowych.
Na koniec dziękuję moim rodzicom. Choć teraz dzieli mnie od nich odległość prawie 10 tysięcy
kilometrów, chcę podziękować Tacie za nauczenie mnie wiele lat temu żonglowania liczbami
i formułami w Excelu, a Mamie za artystyczny talent, który codziennie inspirował mnie w pracy
nad wyglądem Power BI.
— Gil Raviv
15
4650570396d9eb2765da56c12eb840b5
4
PODZIĘKOWANIA
16
4650570396d9eb2765da56c12eb840b5
4
Wprowadzenie
Czy wiesz, że Microsoft Excel zawiera narzędzie Power BI i inne dodatki, które pozwalają
dokonywać cudów z danymi, unikać powtarzalnej pracy i oszczędzać nawet 80% czasu?
Zawsze, gdy kopiujesz i wklejasz do arkusza podobne dane, a potem ręcznie je oczyszczasz,
tracisz cenny czas; prawdopodobnie nawet nie wiesz, że to samo można zrobić inaczej,
lepiej i szybciej.
Zawsze, zdając się na innych w doprowadzeniu danych do odpowiedniego kształtu i stanu,
pamiętaj, że są proste sposoby, z pomocą których dane możesz przetworzyć raz, a potem
cieszyć się automatyzacją procesu.
Zawsze, gdy musisz podjąć racjonalną decyzję opartą na ogromnej ilości danych
wymagających oczyszczenia, wiedz, że możesz łatwo sprostać takim wyzwaniom, osiągnąć
niezwykłe rezultaty i skrócić czas ich analizy.
Jesteś gotowy na zmiany? Za chwilę zamienisz frustrujące, powtarzalne, ręczne oczyszczanie
danych w naprawdę ekscytującą zabawę, podczas której dodatkowo poprawisz jakość danych
i wydobędziesz z nich nowe informacje.
Excel, Power BI, Analysis Services i PowerApps wykorzystują narzędzie Power BI, która zmienia
zasady gry w łączeniu i przekształcaniu danych. Wykorzystując to narzędzie, każda osoba z podstawową
znajomością Excela może automatyzować importowanie, przetwarzanie i oczyszczanie danych.
Narzędzie jest wyposażone w prosty, uniwersalny interfejs graficzny dla szerokiego spektrum źródeł
i formatów danych, pozwalający rozwiązywać wszelkie problemy związane z przygotowaniem
danych i po mistrzowsku nimi żonglować.
W tej książce zmierzysz się z prawdziwymi wyzwaniami związanymi z przetwarzaniem danych
i dowiesz się, jak dzięki Power Query można im sprostać. Książka zawiera ponad 70 ćwiczeń i 200
plików, dzięki którym nauczysz się importować bezładne, rozdzielone tabele danych i automatycznie
przekształcać je w ustrukturyzowane zbiory gotowe do analizy. Większość opisanych tu technik
z łatwością zapamiętasz i wykorzystasz we własnym środowisku pracy.
4650570396d9eb2765da56c12eb840b5
4
WPROWADZENIE
Założenia
Podczas pracy z książką przydatna będzie znajomość Excela i Power BI. Wprawdzie z tej książki
skorzysta każdy użytkownik Excela, ale jeszcze więcej zyska ten, który spełnia jeden z poniższych
warunków (pamiętaj, że wystarczy tylko jeden).
Często kopiuje i wkleja do Excela dane z tego samego źródła, a potem je oczyszcza.
Tworzy i chce tworzyć coraz lepsze raporty w Excelu i Power BI połączone z zewnętrznymi
źródłami danych.
Zna tabele przestawne w Excelu.
Zna dodatek Power Pivot do Excela i chce upraszczać swoje modele danych.
Zna dodatek Power Query i chce osiągnąć wyższy stopień wtajemniczenia.
Tworzy aplikacje biznesowe PowerApps i chce wykorzystywać źródła
nieuporządkowanych danych.
Korzysta z usług Analysis Services i chce efektywniej kodować w języku ETL.
Układ książki
Książka składa się z czternastu rozdziałów, stopniowo przechodzących od podstawowych, prostych
operacji przetwarzania danych do zaawansowanych, specyficznych scenariuszy. Każdy rozdział
zawiera wiele praktycznych ćwiczeń wraz z opisami, jak krok po kroku je wykonać. Z ich pomocą
poznasz techniki skutecznego przetwarzania danych. Książka jest podręcznikiem, który będzie Ci
towarzyszył przez długi czas, niezależnie od tego, ile nowych funkcjonalności pojawi się w Power
Query w przyszłości.
18
4650570396d9eb2765da56c12eb840b5
4
WPROWADZENIE
19
4650570396d9eb2765da56c12eb840b5
4
WPROWADZENIE
Umiejętność posługiwania się edytorem Power Query w Excelu i Power BI jest niezwykle cenna,
ponieważ można prozaiczne, ale ważne operacje przygotowywania danych zamienić w zautomatyzowany
proces. Jednak w miarę robienia postępów w przetwarzaniu danych możesz w edytorze Power Query
zacząć popełniać często spotykane błędy, skutkujące powstawaniem nieudanych zapytań, które nie
odświeżają danych lub dają niewłaściwe wyniki w przypadku zmiany danych. Dlatego w rozdziale
10., „Od złych do dobrych zapytań”, dowiesz się, jakie błędy są najczęściej popełniane, jak ich unikać
i tworzyć niezawodne zapytania prawidłowo odświeżające dane i dostarczające właściwych wyników.
W rozdziale 11., „Podstawy analizy tekstu”, wykorzystasz Power Query do pozyskiwania cennych
informacji ze źródeł danych tekstowych. Na pewno wiele tabel w Twoich raportach zawiera tekstowe
kolumny, które zazwyczaj pomija się w analizach. W tym rozdziale poznasz często stosowne
przekształcenia umożliwiające wyodrębnianie ważnych słów, wykrywanie słów kluczowych,
pomijanie powszechnie używanych słów (np. spójników) i wykorzystywanie iloczynu
kartezjańskiego do zaawansowanego przeszukiwania tekstu.
W rozdziale 12., „Zaawansowana analiza tekstu: rozpoznawanie znaczenia”, poczynisz postępy
w analizie tekstu, dowiesz się, jak za pomocą Microsoft Cognitive Services tłumaczyć tekst,
analizować jego wydźwięk i wyszukiwać kluczowe frazy. Za pomocą konektora Power Query Web
i kilku prostych funkcji języka M wykorzystasz sztuczną inteligencję do rozpoznawania treści tekstu
bez angażowania badaczy danych i programistów.
W rozdziale 13., „Analiza sieci społecznościowych”, nauczysz się pozyskiwać dane z portali
społecznościowych. Przekonasz się, jak łatwo można połączyć się z serwisem Facebook i uzyskiwać
z niego informacje o aktywności użytkowników, opinie społeczności o markach, firmach i produktach.
Dowiesz się też, jak pracować z danymi JSON bez określonej struktury i przetwarzać publicznie
dostępne dane za pomocą Power Query.
W rozdziale 14., „Końcowy projekt: wszystko razem”, zmierzysz się z ostatnim wyzwaniem w tej
książce. Wykorzystasz całą nabytą wiedzę do przetworzenia danych na szeroką skalę. Zastosujesz opisane
techniki do złączenia kilkunastu skoroszytów, przestawienia tabel, anulowania przestawienia i uchronienia
strony „Kupcy z szerokiego świata” przed zmasowanym cyberatakiem!
20
4650570396d9eb2765da56c12eb840b5
4
WPROWADZENIE
Rozdział Pliki
1. „Wprowadzenie do Power Query” R01-01.xlsx
R01-01 - rozwiązanie.pbix
R01-01 - rozwiązanie.xlsx
2. „Podstawowe operacje R02-01.xlsx
przygotowywania danych” R02-01 - rozwiązanie.xlsx
R02-02.xlsx
R02-02 - rozwiązanie - część 1.pbix
R02-02 - rozwiązanie - część 1.xlsx
R02-02 - rozwiązanie - część 2.pbix
R02-02 - rozwiązanie - część 2.xlsx
R02-02 - rozwiązanie - część 3.pbix
R02-02 - rozwiązanie - część 3.xlsx
R02-03 - rozwiązanie - część 1.pbix
R02-03 - rozwiązanie - część 1.xlsx
R02-03 - rozwiązanie - część 2.pbix
R02-03 - rozwiązanie - część 2.xlsx
R02-04.xlsx
R02-04 - rozwiązanie.pbix
R02-04 - rozwiązanie.xlsx
R02-05.xlsx
R02-05 - rozwiązanie.pbix
R02-05 - rozwiązanie.xlsx
R02-06.xlsx
R02-06 - rozwiązanie.pbix
R02-06 - rozwiązanie.xlsx
R02-07.xlsx
R02-07 - rozwiązanie.pbix
R02-07 - rozwiązanie.xlsx
R02-08.xlsx
R02-08 - rozwiązanie.pbix
R02-08 - rozwiązanie.xlsx
3. „Łączenie danych z kilku źródeł” R03-01 - akcesoria.xlsx
R03-01 - komponenty.xlsx
R03-01 - rowery.xlsx
R03-01 - ubrania.xlsx
R03-01 - rozwiązanie.pbix
R03-01 - rozwiązanie.xlsx
R03-02 - rozwiązanie - część 1.pbix
R03-02 - rozwiązanie - część 1.xlsx
R03-02 - rozwiązanie - część 2.pbix
R03-02 - rozwiązanie - część 2.xlsx
R03-02 - rozwiązanie - część 3.pbix
R03-02 - rozwiązanie - część 3.xlsx
R03-02 - rozwiązanie - część 4.pbix
R03-02 - rozwiązanie - część 4.xlsx
21
4650570396d9eb2765da56c12eb840b5
4
WPROWADZENIE
Rozdział Pliki
3. „Łączenie danych z kilku źródeł” — ciąg dalszy R03-03 - rozwiązanie.pbix
R03-03 - rozwiązanie.xlsx
R03-04 - lata w osobnych arkuszach.xlsx
R03-04 - rozwiązanie 1.pbix
R03-04 - rozwiązanie 1.xlsx
R03-04 - rozwiązanie 2.pbix
R03-04 - rozwiązanie 2.xlsx
Produkty\R03-03 - 2015.xlsx
Produkty\R03-03 - 2016.xlsx
Produkty\R03-03 - 2017.xlsx
4. „Łączenie niezgodnych tabel” R04-01 - akcesoria.xlsx
R04-01 - rowery.xlsx
R04-01 - rozwiązanie.pbix
R04-01 - rozwiązanie.xlsx
R04-02 - rozwiązanie.pbix
R04-02 - rozwiązanie.xlsx
R04-03 - rozwiązanie.pbix
R04-03 - rozwiązanie.xlsx
R04-04 - tabela konwersji.xlsx
R04-04 - rozwiązanie - transpozycja.pbix
R04-04 - rozwiązanie - transpozycja.xlsx
R04-05 - rozwiązanie - anulowanie
przestawienia.pbix
R04-05 - rozwiązanie - anulowanie
przestawienia.xlsx
R04-06 - rozwiązanie - transpozycja
nagłówków.pbix
R04-06 - rozwiązanie - transpozycja
nagłówków.xlsx
R04-07 - rozwiązanie - język M.pbix
R04-07 - rozwiązanie - język M.xlsx
R04-02 - produkty\R04-02 - akcesoria.xlsx
R04-02 - produkty\R04-02 - komponenty.xlsx
R04-02 - produkty\R04-02 - rowery.xlsx
R04-02 - produkty\R04-02 - ubrania.xlsx
R04-03 - produkty\R04-03 - akcesoria.xlsx
R04-03 - produkty\R04-03 - komponenty.xlsx
R04-03 - produkty\R04-03 - rowery.xlsx
R04-03 - produkty\R04-03 - ubrania.xlsx
R04-04 - produkty\R04-04 - akcesoria.xlsx
R04-04 - produkty\R04-04 - komponenty.xlsx
R04-04 - produkty\R04-04 - rowery.xlsx
R04-04 - produkty\R04-04 - ubrania.xlsx
22
4650570396d9eb2765da56c12eb840b5
4
WPROWADZENIE
Rozdział Pliki
5. „Pozyskiwanie kontekstu” R05-01 - akcesoria.xlsx
R05-01 - rowery i akcesoria.xlsx
R05-01 - rowery.xlsx
R05-01 - rozwiązanie - część 1.pbix
R05-01 - rozwiązanie - część 1.xlsx
R05-01 - rozwiązanie - część 2.pbix
R05-01 - rozwiązanie - część 2.xlsx
R05-02 - rowery.xlsx
R05-02 - rozwiązanie.pbix
R05-02 - rozwiązanie.xlsx
R05-03 - rozwiązanie.pbix
R05-03 - rozwiązanie.xlsx
R05-04 - produkty.xlsx
R05-04 - rozwiązanie.pbix
R05-04 - rozwiązanie.xlsx
R05-05 - produkty.xlsx
R05-05 - rozwiązanie.pbix
R05-05 - rozwiązanie.xlsx
R05-06 - produkty.xlsx
R05-06 - rozwiązanie.pbix
R05-06 - rozwiązanie.xlsx
R05-06 - szybki start.pbix
R05-06 - szybki start.xlsx
R05-03 - produkty\R05-03-01.xlsx
R05-03 - produkty\R05-03-02.xlsx
R05-03 - produkty\R05-03-03.xlsx
R05-03 - produkty\R05-03-04.xlsx
6. „Dekomponowanie tabel” R06-01.xlsx
R06-02.xlsx
R06-03 - rozwiązanie.pbix
R06-03 - rozwiązanie.xlsx
R06-03 - złe rozwiązanie.pbix
R06-03.xlsx
R06-04.xlsx
R06-04 - rozwiązanie.pbix
R06-04 - rozwiązanie.xlsx
R06-05.xlsx
R06-05 - rozwiązanie.pbix
R06-05 - rozwiązanie.xlsx
R06-06.xlsx
R06-06 - rozwiązanie.pbix
R06-06 - rozwiązanie.xlsx
23
4650570396d9eb2765da56c12eb840b5
4
WPROWADZENIE
Rozdział Pliki
7. „Zaawansowane metody dekomponowania R07-01.xlsx
i agregowania tabel” R07-01 - rozwiązanie.pbix
R07-01 - rozwiązanie.xlsx
R07-02.pbix
R07-02.xlsx
R07-03 - rozwiązanie.pbix
R07-03 - rozwiązanie.xlsx
R07-04.xlsx
R07-04 - rozwiązanie.pbix
R07-04 - rozwiązanie.xlsx
R07-05 - rozwiązanie.pbix
R07-05 - rozwiązanie.xlsx
8. „Praca grupowa” R08-01.xlsx
R08-01 - Alicja.pbix
R08-01 - Alicja.xlsx
R08-01 - rozwiązanie.pbix
R08-01 - rozwiązanie.xlsx
R08-02 - rozwiązanie.pbit
R08-02 - rozwiązanie 2.pbit
R08-03 - rozwiązanie.xlsx
R08-03 - rozwiązanie 2.xlsx
R08-04 - rozwiązanie.pbix
R08-04 - rozwiązanie.xlsx
R08-05.pbix
R08-05.xlsx
R08-05 - rozwiązanie.pbix
R08-05 - rozwiązanie.xlsx
R08-05 - folder\R08-05 - 2015.xlsx
R08-05 - folder\R08-05 - 2016.xlsx
R08-05 - folder\R08-05 - 2017.xlsx
9. „Wprowadzenie do języka M” R09-01 - rozwiązanie.pbix
R09-01 - rozwiązanie.xlsx
10. „Od złych do dobrych zapytań” R10-01.xlsx
R10-01 - rozwiązanie.pbix
R10-01 - rozwiązanie.xlsx
R10-02 - rozwiązanie.pbix
R10-02 - rozwiązanie.xlsx
R10-03 - rozwiązanie.pbix
R10-03 - rozwiązanie.xlsx
R10-04 - rozwiązanie.pbix
R10-04 - rozwiązanie.xlsx
R10-05.xlsx
R10-05 - rozwiązanie.pbix
R10-05 - rozwiązanie.xlsx
R10-06.xlsx
R10-06-v2.xlsx
R10-06 - rozwiązanie.pbix
R10-06 - rozwiązanie.xlsx
24
4650570396d9eb2765da56c12eb840b5
4
WPROWADZENIE
Rozdział Pliki
11. „Podstawy analizy tekstu” R11-01.xlsx
R11-01 - rozwiązanie.pbix
R11-01 - rozwiązanie.xlsx
R11-02 - porównanie.xlsx
R11-02 - rozwiązanie.pbix
R11-02 - rozwiązanie.xlsx
R11-03 - rozwiązanie.xlsx
R11-04 - rozwiązanie.pbix
R11-04 - rozwiązanie.xlsx
R11-05 - rozwiązanie.pbix
R11-05 - rozwiązanie.xlsx
R11-06 - rozwiązanie.pbix
R11-06 - rozwiązanie.xlsx
R11-07 - rozwiązanie.pbix
Stop-słowa.txt
Słowa kluczowe.txt
12. „Zaawansowana analiza tekstu: R12-02.xlsx
rozpoznawanie znaczenia” R12-01 - rozwiązanie.pbix
R12-01 - rozwiązanie.xlsx
R12-02 - rozwiązanie.pbit
R12-02 - rozwiązanie.pbix
R12-02 - rozwiązanie.xlsx
R12-03 - rozwiązanie.pbix
R12-03 - rozwiązanie.xlsx
R12-04 - rozwiązanie.pbix
R12-04 - rozwiązanie.xlsx
R12-05 - rozwiązanie.pbix
R12-05 - rozwiązanie.xlsx
R12-06 - rozwiązanie.pbix
R12-06 - rozwiązanie.xlsx
13. „Analiza sieci społecznościowych” R13-01 - rozwiązanie.pbit
R13-01 - rozwiązanie.xlsx
R13-02 - rozwiązanie.pbit
R13-02 - rozwiązanie.xlsx
R13-03 - rozwiązanie.pbit
R13-03 - rozwiązanie.xlsx
R13-04 - rozwiązanie.pbix
R13-04 - rozwiązanie.xlsx
R13-05 - rozwiązanie.pbix
R13-05 - rozwiązanie.xlsx
14. „Końcowy projekt: wszystko razem” R14-01 - cel.xlsx
R14-01 - rozwiązanie.pbix
R14-01 - rozwiązanie.xlsx
R14-02 - zhakowane dane.xlsx
R14-02 - rozwiązanie.pbix
R14-02 - rozwiązanie.xlsx
Przychody\2015.xlsx
Przychody\2016.xlsx
Przychody\2017.xlsx
Przychody\2018.csv
25
4650570396d9eb2765da56c12eb840b5
4
WPROWADZENIE
Wymagania systemowe
Do wykonania ćwiczeń opisanych w tej książce będziesz potrzebował następującego
oprogramowania:
system operacyjny Windows 10, Windows 8, Windows 7, Windows Server 2008 R2
lub Windows Server 2012,
pakiet Office 365, program Excel 2016 lub nowszy, Power BI Desktop, Excel 2013 lub 2010
z dodatkiem Power Query.
26
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 1.
W TYM ROZDZIALE:
poznasz narzędzie Power Query i jego początki,
poznasz podstawowe komponenty Power Query i edytora zapytań,
nauczysz się posługiwać narzędziami i przygotujesz proste dane do analizy.
W tej książce poznasz funkcjonalności narzędzia Power Query do przetwarzania danych, z pomocą
których będziesz mógł skrócić czas przygotowania danych nawet o 80%. Rozdział rozpoczyna się
od formalnego wprowadzenia, ponieważ narzędzie Power Query na to zasługuje. Kiedy czytasz ten
tekst, prawdopodobnie pół miliona użytkowników na całym świecie z zaciśniętymi zębami wykonuje
ręczne, powtarzalne, ale niezwykle ważne operacje związane z przygotowaniem danych do analizy
w Excelu. Robią tak dzień w dzień, tydzień w tydzień, miesiąc w miesiąc.
Kiedy przeczytasz tę książkę, około pięćdziesięciu milionów osób zakończy żmudne ręczne
przygotowywanie danych, nie wiedząc nawet o tym, że w Excelu są ukryte narzędzia, które tylko
czekają, aby ich użyć i ułatwić sobie pracę. Część użytkowników nauczy się oczyszczać dane za
pomocą zaawansowanych narzędzi, takich jak Python lub R, inni zdadzą się na swoje działy IT,
czekając miesiącami na zrealizowanie wniosków. Większość z nich chce po prostu wykonać zadanie
bez spędzania setek czy nawet tysięcy godzin na przygotowywaniu danych do analizy. Jeżeli
znajdujesz się wśród tych pięćdziesięciu milionów użytkowników, czas najwyższy, abyś poznał
narzędzie Power Query i przekonał się, jak może zmienić Twoją pracę, gdyż analiza danych będzie
wyglądała tak, jak ją sobie wyobrażasz.
Niezależnie od tego, czy jesteś początkującym, czy zaawansowanym użytkownikiem
Power Query, ten rozdział pomoże Ci przygotować się do drogi. W trakcie podróży nauczysz się
po mistrzowsku przetwarzać dane i samodzielnie wyciągać na ich podstawie wnioski.
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zobacz też. Od chwili pojawienia się Power Query z tego narzędzia korzystają miliony
użytkowników. Ponieważ zaczęło ono odgrywać istotną rolę w pracy analityków
i administratorów danych, Microsoft postanowił zintegrować je ze swoimi innymi
produktami, m.in. z:
Microsoft SQL Server Data Tools (SSDT) dla SQL Server 2017 Analysis Services oraz
Azure Analysis Services (patrz https://docs.microsoft.com/pl-pl/analysis-services/
what-s-new-in-analysis-services),
Common Data Service for Apps, wykorzystywane w Microsoft PowerApps
(patrz https://docs.microsoft.com/en-us/powerapps/maker/common-data-service/
data-platform-cds-newentity-pq).
Podczas przygotowywania danych w edytorze Power Query, tj. głównym interfejsie tego
narzędzia, rejestrowane są wykonywane przez Ciebie operacje, zatem następnym razem będziesz
mógł je automatycznie odtworzyć. Jeżeli jesteś zaawansowanym użytkownikiem Excela, będzie to
operacja podobna do rejestrowania makra, ale znacznie prostsza. Po wykonaniu przekształceń dane
można załadować do raportu. Od tej chwili, za każdym razem gdy odświeżysz raport, zostanie wykonana
sekwencja operacji, dzięki czemu zaoszczędzisz wiele godzin, a nawet dni, które musiałbyś poświęcić
na powtarzalne, ręczne przygotowywanie danych.
Narzędzie Power Query jest naprawdę proste w użyciu. Zostało wyposażone w jednolity interfejs,
niezależnie od tego, z jakiego źródła importowane są dane i jaki mają format. Skomplikowane
scenariusze przygotowywania danych zapisywane są w postaci sekwencji prostych kroków, które
możesz edytować i śledzić. W bardziej złożonych przypadkach poszczególne kroki można
modyfikować za pomocą paska formuły lub zaawansowanego edytora (wykorzystując język M
opisany w rozdziale 9., „Wprowadzenie do języka M”). Każda sekwencja przekształceń jest
zapisywana w formie zapytania, które następnie możesz załadować do raportu lub wykorzystać
w innych kwerendach, tworząc w ten sposób kompletny proces przetwarzania danych.
Zanim zajmiemy się najważniejszymi komponentami narzędzia Power Query, cofnijmy się
kilka lat i poznajmy jego początki. Krótka historia pozwoli Ci dowiedzieć się, jak długo istnieje
ta technologia i jak wygląda dzisiaj.
28
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 1. WPROWADZENIE DO POWER QUERY
RYSUNEK 1.1. Pod roboczą nazwą Data Explorer firma Microsoft udostępniła pierwszą wersję narzędzia
Power Query
29
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 1.2. Historia punktów zespołu rozwijającego dodatek Data Explorer dowodzi, że po przeniesieniu
dodatku z SQL Azure Labs do Excela zaczęło z niego korzystać coraz więcej użytkowników
30
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 1. WPROWADZENIE DO POWER QUERY
W marcu 2017 r. Microsoft udostępnił aktualizację pakietu Office 365 zawierającą kolejne
udoskonalenia narzędzia do przetwarzania danych. Technologia Power Query stała się
podstawową funkcjonalnością Excela służącą do tego celu (https://support.office.com/en-us/
article/unified-get-transform-experience-ad78befd-eb1c-4ea7-a55d-79d1d67cf9b3). Aktualizacja
ujednolicała interfejs zapytań i połączeń ze skoroszytami, jak również lepiej obsługiwała pliki ODC.
Ponadto zawierała rozwijane menu Pobierz dane, zlokalizowane w karcie Dane w grupie Pobieranie
i przekształcanie danych, będące głównym punktem wejścia do Power Query.
W kwietniu 2017 r. Microsoft udostępnił narzędzia SQL Server Data Tools (SSDT) i nowy interfejs
Pobierz dane w modelach danych Tabular 1400 usługi Analysis Services (https://blogs.msdn.microsoft.com/
ssdt/2017/04/19/announcing-the-general-availability-ga-release-of-ssdt-17-0-april-2017). W wersji SSDT 17.0
można było za pomocą Power Query importować i przygotowywać dane w tabelarycznych modelach
dla usług SQL Server 2017 Analysis Services i Azure Analysis Services. Jeżeli znasz usługi Analysis
Services, na stronie https://docs.microsoft.com/en-us/sql/analysis-services/tutorial-tabular-1400/
as-lesson-2-get-data?view=sql-analysis-services-2017 znajdziesz informacje, jak zacząć używać Power Query.
Uwaga. Książka skupia się głównie na programach Excel i Power BI Desktop, ale większość
rozdziałów i ćwiczeń, szczególnie dotyczących początkowych etapów projektów, gdy trzeba
porządkować dane, odnosi się również do usługi Analysis Services.
W marcu 2018 r. Microsoft udostępnił usługę Common Data Service (CDS) for Apps
(https://powerapps.microsoft.com/en-us/blog/cds-for-apps-march), w której głównymi narzędziami
do importowania danych były Power Query oraz Microsoft Flow (patrz rysunek 1.3). Narzędzie
Power Query zostało rozbudowane o funkcjonalności wykraczające poza analizę biznesową i od
teraz można go używać w charakterze prostego narzędzia ETL do tworzenia aplikacji dla pakietu
Microsoft Office 365 i Dynamics 365. Nie są przy tym wymagane umiejętności programistyczne.
RYSUNEK 1.3. Narzędzie Power Query w usłudze CDS for Apps udostępnionej w marcu 2018 r.
31
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Również w marcu 2018 r. Microsoft przywrócił termin „Power Query” w programach Power BI
Desktop i Excel, zmieniając tytuł okna edytora z Edytor zapytań na Edytor Power Query. Aby uruchomić
edytor, należy w rozwijanym menu Pobierz dane wybrać opcję Uruchom edytora dodatku Power Query.
W lipcu 2018 r. Microsoft ogłosił, że internetowa wersja Power Query będzie częścią nowego
rozwiązania ETL o nazwie dataflows, przy użyciu którego będzie można samodzielnie i łatwo
przygotowywać dane, zapisywać wyniki w chmurze i wykorzystywać je w Power BI i innych
aplikacjach (https://www.microsoft.com/en-us/businessapplicationssummit/video/BAS2018-2117).
RYSUNEK 1.4. Narzędzie Power Query można w Excelu i Power BI uruchamiać na kilka sposobów
Aby importować i przekształcać dane w Excelu 2010 lub 2013, pobierz dodatek Power Query
ze strony https://www.microsoft.com/pl-pl/download/details.aspx?id=39379. Dodatek jest dostępny
w programie Excel Standalone oraz pakietach Office 2010 i 2013. Po zainstalowaniu pojawi się karta
Power Query. Aby zaimportować dane, wybierz jedno z połączeń dostępnych w grupie Pobierz dane
zewnętrzne. Aby edytować istniejące zapytanie, wybierz Pokaż okienko, a następnie odpowiednie
zapytanie. Ewentualnie możesz wybrać polecenie Uruchom edytor, a następnie odpowiednie
zapytanie w panelu Zapytania.
Uwaga. W Excelu 2010 lub 2013 po kliknięciu ikony w grupie Pobieranie danych zewnętrznych
w karcie Dane pojawi się stary interfejs, a nie Power Query.
Zanim zaczniesz importować i przekształcać dane w Excelu 2016 przy użyciu technologii Power
Query, sprawdź zawartość karty Dane. Jeżeli znajduje się w niej grupa Pobieranie i przekształcanie,
kliknij ikonę Nowe zapytanie, a następnie wybierz żądane źródło danych. Jeżeli używasz nowszej
wersji Excela, w karcie Dane znajdziesz grupę Pobieranie i przekształcanie danych, w której jest ikona
32
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 1. WPROWADZENIE DO POWER QUERY
Pobierz dane umożliwiająca importowanie danych. Aby edytować istniejące zapytania, kliknij
polecenie Pokaż zapytania (w wersji Excel 2016 lub starszej) albo w karcie Dane w grupie
Zapytania i połączenia polecenie Zapytania i połączenia.
Uwaga. Jeżeli używasz Excela 2016 i w karcie Dane znajduje się zarówno grupa Pobieranie
danych zewnętrznych, jak i Pobieranie i przekształcanie, pamiętaj, że pierwsza zawiera stare
opcje do importu danych. Aby korzystać z technologii Power Query, kliknij rozwijane menu
Nowe zapytanie w grupie Pobieranie i przekształcanie. W najnowszych wersjach Excela 2016,
2019 i Office 365 powyższe funkcjonalności znajdują się w rozwijanym menu Pobierz dane.
W programie Power BI Desktop kliknij w karcie Strona główna ikonę Pobierz dane. W oknie,
które się pojawi, będziesz mógł wybrać źródło danych. W rozwijanym menu Pobierz dane znajdują
się najczęściej stosowane źródła, takie jak Excel, Power BI Service, SQL Server czy Analysis Services.
Aby edytować istniejące zapytanie w raporcie, kliknij w karcie Strona główna ikonę Edytuj zapytania.
W ten sposób uruchomisz edytor zapytań Power Query. Następnie w panelu Zapytania po lewej
stronie wybierz żądane zapytanie.
Teraz znasz już główne punkty wejścia do Power Query. W następnym podrozdziale poznasz
podstawowe komponenty tego narzędzia.
33
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
34
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 1. WPROWADZENIE DO POWER QUERY
RYSUNEK 1.6. Okno edytora Power Query składa się z kilku części
Panel podglądu
Panel podglądu, znajdujący się w centralnej części rysunku 1.6, umożliwia przeglądanie danych,
ich badanie i przekształcanie przed umieszczeniem w raporcie. Dane są zazwyczaj prezentowane
w formie tabelarycznej. Nagłówki wykorzystuje się do wykonywania różnych przekształceń, takich
jak zmiany nazw lub usuwanie kolumn. Za pomocą rozwijanego menu można dodatkowo
filtrować dane.
Panel podglądu jest kontekstowy. Oznacza to, że w zależności od tego, jaki element tabeli kliknie
się prawym przyciskiem myszy, pojawi się podręczne menu zawierające przekształcenia właściwe
dla tego elementu. I tak po kliknięciu lewego górnego rogu tabeli dostępne będzie np. przekształcenie
Użyj pierwszego wiersza jako nagłówków.
Pamiętaj, że panel podglądu nie zawsze zawiera pełny zestaw danych. Pokazuje jedynie ich część,
abyś mógł pracować na dużych zbiorach. Długie i szerokie tabele danych możesz przeglądać za pomocą
pasków przewijania lub otworzyć panel filtru i przeglądać unikatowe wartości w poszczególnych
kolumnach.
Inną często wykonywaną operacją, obok przeglądania danych, jest wybieranie kolumn. Możesz
wybrać jedną lub kilka kolumn, a następnie zastosować przekształcenie. Gdy klikniesz nagłówek
prawym przyciskiem myszy, pojawi się kontekstowe menu z przekształceniami właściwymi dla
kolumny. Zwróć uwagę, że dane w kolumnach mają określony typ, od którego zależą przekształcenia
dostępne w podręcznym menu i we wstążce.
35
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Wstążka
Wygląd interfejsu edytora Power Query jest spójny z interfejsem całego pakietu Microsoft Office.
Jak pokazuje rysunek 1.7, składa się on ze wstążki złożonej z kart. Każda karta zawiera przekształcenia
i inne operacje, które można wykorzystywać w zapytaniach. Oto opis poszczególnych kart.
RYSUNEK 1.7. Wstążka edytora Power Query składa się z wielu przydatnych kart
Plik: w tej karcie można zapisać raport, zamknąć edytor, otworzyć okno Opcje zapytania
oraz Ustawienia źródła danych.
Strona główna: ta karta zawiera większość przekształceń, m.in. Wybieranie kolumn,
Usuń kolumny, Zachowaj wiersze, Usuń wiersze. Można tutaj również odświeżyć dane
prezentowane w panelu podglądu i zamknąć edytor. Polecenie Nowe źródło służy
do tworzenia zapytań importujących nowe dane.
Uwaga. W edytorze Power Query można pracować z wieloma zapytaniami jednocześnie. Każde
z nich można załadować jako osobną tabelę lub wykorzystać w innym zapytaniu. Łączenie zapytań
jest niezwykle przydatną funkcjonalnością, opisaną w rozdziale 3., „Łączenie danych z kilku źródeł”.
36
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 1. WPROWADZENIE DO POWER QUERY
Panel zapytań
W panelu zapytań, znajdującym się po lewej stronie okna edytora (patrz rysunek 1.6), można wybrać
zapytanie do edycji lub utworzyć nowe zapytanie poprzez zduplikowanie istniejącego zapytania lub
odwołanie się do niego. Po kliknięciu panelu prawym przyciskiem myszy pojawią się polecenia
właściwe dla zapytań.
Zapytania można łączyć w grupy. Grupowane nie wpływa na przetwarzane dane ani zawartość
raportu. Grupy pełnią rolę folderów w tym panelu. Kolejność zapytań można zmieniać, przeciągając
je za pomocą myszy.
Uwaga. Czasami po otwarciu edytora za pomocą menu Excela panel zapytań jest zwinięty.
Można go w każdej chwili rozwinąć. Po zamknięciu edytora zapytaniami można zarządzać
w Excelu za pomocą polecenia menu Zapytania i połączenia.
Uwaga. Jeżeli programowanie nie jest Twoją mocną stroną, nie przejmuj się. W większości
ćwiczeń nie będziesz musiał używać języka M.
37
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 1.8. Okno Opcje zapytania w Excelu zawiera ogólne ustawienia zapisywane w systemie
oraz bieżące zapisywane w raporcie
Aby otworzyć okno Opcje zapytania w Excelu, kliknij kartę Dane, następnie ikonę Pobierz dane
i Opcje dodatku Query. Okno to możesz również otworzyć w edytorze, klikając kartę Plik, następnie
Opcje i ustawienia i Opcje zapytania. W programie Power BI Desktop kliknij kartę Plik, następnie
Opcje i ustawienia i Opcje.
Opcje będziesz zmieniał dość rzadko, ponieważ większość domyślnych ustawień będzie
odpowiednia do Twoich potrzeb. Jeżeli jesteś zaawansowanym użytkownikiem Excela i pracujesz
z modelami danych, możesz w sekcji Ładowanie danych wybrać opcję Określ niestandardowe
domyślne ustawienia ładowania, a następnie Załaduj do modelu danych.
38
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 1. WPROWADZENIE DO POWER QUERY
Uwaga. Podczas wykonywania ćwiczeń będzie pojawiało się pytanie o zapisanie plików
w podfolderze folderu C:\Dane. Pliki są zapisane w podfolderach o nazwach od R01 dla
rozdziału 1. do R14 dla rozdziału 14. Większość ćwiczeń zawiera rozwiązania, w których
przyjęte jest założenie, że dane źródłowe znajdują się w folderze C:\Dane\Rxx, gdzie xx
oznacza numer rozdziału.
39
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Jak pokazuje rysunek 1.9, domyślnym przyciskiem jest Załaduj, a nie Przekształć dane. Wielu
użytkowników, korzystając z domyślnych ustawień, nie dowiaduje się o funkcjonalnościach
edytora Power Query. Klikając przycisk Załaduj, pomijają etap przygotowania danych i ładują
tabelę do raportu w takiej postaci, w jakiej się ona znajduje.
Uwaga. Jeżeli w oknie nawigatora obok przycisku Załaduj nie ma przycisku o nazwie Przekształć
dane (patrz rysunek 1.9), oznacza to, że nazwa jest inna, np. Edytuj. Microsoft zmienia nazwy
przycisków, aby jak najlepiej odpowiadały oczekiwaniom użytkowników. W tej książce używana
jest nazwa Przekształć dane. Jeżeli jej nie znajdziesz, kliknij przycisk znajdujący się po prawej
stronie przycisku Załaduj.
Wskazówka. Jeśli nawet dane mają uporządkowaną strukturę, warto w oknie nawigatora
kliknąć przycisk Przekształć dane, a nie Załaduj. Otworzy się wtedy edytor Power Query,
w którym można przejrzeć dane i upewnić się, że mają żądany format.
5. Zaznacz Arkusz1, a następnie kliknij Przekształć dane. Otworzy się edytor Power Query.
Teraz jest dobry moment, abyś wrócił do rysunku 1.6 i sprawdził, gdzie w edytorze znajdują
się poszczególne komponenty. Zwróć uwagę, że edytor w Excelu i Power BI Desktop wygląda
niemal tak samo. Pomiędzy obydwoma produktami jest tylko kilka niewielkich różnic.
Jeżeli nie jest widoczny pasek formuły, możesz go wyświetlić, zaznaczając w karcie Widok
opcję Pasek formuły. Od tej chwili pasek będzie zawsze widoczny.
40
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 1. WPROWADZENIE DO POWER QUERY
6. W panelu Zapytania lub Ustawienia zapytania zmień nazwę z Arkusz1 na Produkty. W tym
celu w panelu Zapytania kliknij dwukrotnie nazwę i wpisz nową. Natomiast w panelu
Ustawienia zapytania w sekcji Właściwości wpisz nową nazwę w polu Nazwa.
7. W panelu podglądu widoczne są dwie kolumny o nazwach Koszt i Cena. Załóżmy, że chcesz
dodać nową kolumnę zawierającą zysk, czyli różnicę pomiędzy ceną a kosztem. Aby utworzyć
nową kolumnę zawierającą wyniki operacji wykonanych na dwóch innych kolumnach,
musisz najpierw te kolumny zaznaczyć. Aby zaznaczyć jedną kolumnę, kliknij jej nagłówek,
ewentualnie użyj klawiszy kursora. Aby zaznaczyć kilka kolumn, naciśnij dodatkowo klawisz
Shift (zaznaczysz przylegające kolumny) lub Ctrl (zaznaczysz oddzielne kolumny).
Zaznacz kolumnę Cena, a następnie trzymając klawisz Shift lub Ctrl, zaznacz kolumnę Koszt.
8. Aby utworzyć nową kolumnę, przejrzyj przekształcenia dostępne w karcie Dodaj kolumnę.
Kliknij ikonę Standardowy. Pojawi się menu operacji arytmetycznych, jakie można wykonać
na zaznaczonych kolumnach. Aby od ceny odjąć koszt, wybierz z menu opcję Odejmij.
9. W panelu podglądu pojawi się nowa kolumna o nazwie Odejmowanie. Zmień ją na Zysk.
W tym celu kliknij dwukrotnie nagłówek kolumny i wpisz nową nazwę. Ewentualnie kliknij
nagłówek prawym przyciskiem myszy. Pojawi się długie podręczne menu zawierające różne
przekształcenia, które można wykonać na wybranej kolumnie. Wśród nich znajduje się
przekształcenie Zmień nazwę.
10. Przyjrzyj się wartościom w kolumnie Zysk. Czy widzisz liczby ujemne? Nie powinno ich być.
Pojawiły się w wyniku operacji wykonanej w kroku 7., ponieważ najpierw zaznaczyłeś
kolumnę Zysk, a następnie Cena, a nie odwrotnie. Aby poprawić błąd (albo sprawdzić,
czy formuła jest poprawna), wykonaj poniższe kroki.
a. Spójrz na panel Zastosowane kroki po prawej stronie okna edytora. Widoczne są w nim
wszystkie kroki, które do tej pory wykonałeś. Kliknij dowolny krok i sprawdź zawartość
panelu podglądu. Dane, które się tam pojawiają, są jedynie zapamiętanymi podglądami
rzeczywistych danych. Żadna z pośrednich tabel nie jest zapisywana w raporcie.
b. W panelu Zastosowane kroki kliknij krok Wstawiono odejmowanie.
c. W pasku formuły pojawi się długi kod. Odszukaj w nim następujący fragment:
[Koszt] - [Cena]
i zmień go na:
[Cena] - [Koszt]
Formuła powinna wyglądać tak:
= Table.AddColumn(#"Zmieniono typ", "Odejmowanie", each [Koszt] - [Cena], type number)
Uwaga. Jeżeli jesteś początkującym użytkownikiem edytora Power Query, nie zgłębiaj zanadto
składni tej formuły. Jest ona napisana w języku M. W tej książce nauczysz się, kiedy i jak zmieniać
formuły bez znajomości ich składni. Gdy dojdziesz do rozdziału 9., który zawiera wprowadzenie
do języka M, będziesz gotowy do zagłębienia się w ten język i poznania jego tajemnic.
11. Usuń kolumnę Kod produktu. W tym celu zaznacz kolumnę i naciśnij klawisz Delete.
Ewentualnie w karcie Strona główna kliknij ikonę Usuń kolumny.
41
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
12. Wypróbuj filtrowanie danych. Załóżmy, że chcesz zachować jedynie wiersze zawierające słowo
„górski”. Kliknij ikonę trójkąta w nagłówku kolumny Produkt i przejrzyj dostępne opcje.
Kliknij opcję Filtry tekstu, a następnie Zawiera. W oknie Filtrowanie wierszy, które się
pojawi, w polu obok listy zawiera wpisz słowo „górski” i kliknij OK.
Uwaga. Domyślnie narzędzie Power Query przetwarza testy z rozróżnieniem wielkości liter.
Gdybyś wpisał słowo „Górski”, uzyskałbyś pustą listę, ponieważ nie ma produktów, które w nazwie
mają takie słowo zaczynające się z wielkiej litery. Aby filtr nie rozróżniał wielkości liter, musisz
zmienić formułę. Oryginalna formuła wygląda tak:
= Table.SelectRows(#"Usunięto kolumny", each Text.Contains([Produkt], "górski"))
W tym momencie zapewne modyfikacja wydaje Ci się bardzo skomplikowana, ale nie
przejmuj się. W większości przypadków przekształcenia można wykonywać bez modyfikowania
formuł. Z tej książki dowiesz się, kiedy takie operacje należy wykonywać i w jaki sposób,
bez konieczności poznawania całej składni języka M. W rozdziale 10., „Od złych do dobrych
zapytań”, nabierzesz większego doświadczenia i będziesz mógł zagłębić się w zawiłości tego języka.
13. Na koniec załaduj dane do raportu. Jeżeli używasz programu Power BI Desktop, kliknij
w karcie Strona główna ikonę Zamknij i zastosuj. Teraz możesz przekształconą tabelę
wykorzystać do przygotowania elementów wizualnych. Jeżeli korzystasz z Excela, kliknij
w karcie Strona główna ikonę Zamknij i załaduj, aby umieścić tabelę w arkuszu.
Uwaga. W Excelu, inaczej niż w Power BI Desktop, udostępniono wiele opcji ładowania danych.
Można je załadować do skoroszytu lub do modelu danych albo zachować połączenie do późniejszego
wykorzystania. W wersji Excel 2016 lub nowszej dane można załadować bezpośrednio do tabeli
lub wykresu przestawnego.
14. Otwórz plik R01-01.xlsx i wprowadź w nim dowolne zmiany. Następnie zapisz plik i odśwież
raport. Zwróć uwagę, że zostaną w nim uwzględnione zmiany. Aby odświeżyć zapytanie
w Excelu, kliknij w karcie Dane ikonę Odśwież wszystko, natomiast w Power BI Desktop
w karcie Strona główna kliknij ikonę Odśwież.
Na tym polega istota automatyzacji w Power Query, z pomocą której można oszczędzić
mnóstwo czasu. Dane wystarczy przygotować raz, a potem w dowolnej chwili przetworzyć
dane, odświeżając raport.
Zobacz też. Jeżeli korzystasz z usługi Power BI, możesz zaplanować automatyczne odświeżanie
raportów, w tym opartych na lokalnych źródłach danych. Więcej informacji na ten temat
znajdziesz na stronie https://docs.microsoft.com/pl-pl/power-bi/refresh-scheduled-refresh.
42
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 1. WPROWADZENIE DO POWER QUERY
Podsumowanie
Ten rozdział stanowił wprowadzenie do narzędzia Power Query i krótki przegląd jego funkcjonalności.
Poznałeś historię narzędzia i jego rozwój od prostego programu do badania danych do ważnej
technologii przetwarzania danych w Excelu, Power BI, Analysis Services, CDS i PowerApps.
Prawdopodobnie w czasie, gdy czytasz tę książkę, rola narzędzia Power Query wzrosła jeszcze
bardziej, a jego interfejs został zintegrowany z następnymi programami firmy Microsoft.
W pierwszym ćwiczeniu zaimportowałeś tabelę danych i wykonałeś kilka podstawowych
przekształceń. W następnym rozdziale nauczysz się wykonywać w edytorze Power Query
najważniejsze operacje przygotowywania danych, przy użyciu których zaoszczędzisz sporo
czasu i unikniesz wykonywania powtarzalnych czynności.
43
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
44
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2.
Podstawowe operacje
przygotowywania danych
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
W tym rozdziale poznasz kilka technik dostępnych w edytorze Power Query w Excelu i Power BI
Desktop, umożliwiających uporządkowanie źle sformatowanych danych w kilka minut. Jeżeli nie
masz doświadczenia z edytorem Power Query, ten rozdział będzie dla Ciebie bardzo ważny. Kiedy
zastosujesz proste techniki, które tu poznasz, zaoszczędzisz mnóstwo czasu, przygotowując dane,
i szybciej będziesz wykonywał na nich skomplikowane operacje.
Dane mogą Ci być potrzebne do doraźnej analizy lub regularnego tworzenia raportów dla
szerokiej rzeszy odbiorców. W tym rozdziale opisane zostały najbardziej podstawowe i najczęściej
stosowane techniki, które pozwolą Ci oszczędzić czas, jak również zautomatyzować i usprawnić
proces tworzenia raportów.
Fabryka Przygód
W tym rozdziale będziesz pracował na bazie danych zawierającej katalog produktów fikcyjnej firmy
Fabryka Przygód produkującej rowery.
Zobacz też. Fabryka Przygód (AdventureWorks) została wymyślona przez Microsoft na potrzeby
demonstrowania zastosowania różnych aplikacji w sytuacjach zbliżonych do rzeczywistych. Bazę
danych można uruchomić w usłudze Azure SQL Database. W tym celu należy wykonać kroki
opisane na stronie https://docs.microsoft.com/en-us/azure/sql-database/sql-database-get-started-portal.
Nie jest to konieczne do wykonania ćwiczeń opisanych w tej książce, ale można nauczyć się
posługiwania narzędziem Power Query na większej próbce danych.
Wyobraź sobie, że zacząłeś pracę jako analityk w Fabryce Przygód. Twoim pierwszym zadaniem
jest przeanalizowanie katalogu produktów i policzenie ich według kategorii, wielkości i kolorów.
Lista produktów została wyeksportowana ze starej bazy danych i zapisana w skoroszycie Excela
R02-01.xlsx.
46
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
Niestety, katalog nie zawiera kolumn Kategoria, Wielkość i Kolor. Jest natomiast kolumna
Kod produktu zawierająca potrzebne wartości oddzielone myślnikami. Rysunek 2.1 przedstawia
powiązania pomiędzy kolumną Kod produktu a potrzebnymi kolumnami.
Twój poprzednik, który ostatnio awansował i obecnie szefuje działowi analiz biznesowych, poradził
sobie z tym zadaniem, wykorzystując formuły Excela. W poniższym ćwiczeniu poznasz jego sposób.
Uwaga. Celem ćwiczenia 2.1 jest zilustrowanie typowego rozwiązania problemu za pomocą
Excela, bez użycia Power Query. Nie musisz wykonywać opisanych operacji ani nawet starać się
ich zrozumieć. Przekonasz się wkrótce, że sposób z wykorzystaniem Power Query jest znacznie
prostszy.
=LEWY(C2;2)
Formuła ta zwraca dwa pierwsze znaki tekstu zawartego w kolumnie C (kod produktu).
Stanowią one kod kategorii.
4. Kliknij komórkę G2. W pasku formuły pojawi formuła:
=PRAWY(C2;2)
Formuła zwraca dwa ostatnie znaki tekstu zawartego w kolumnie C stanowiące kod koloru.
47
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
=WYSZUKAJ.PIONOWO(F2;Kategorie!A:B; 2;FAŁSZ)
Formuła wyszukuje w arkuszu Kategorie nazwę kategorii odpowiadającą kodowi zapisanemu
w komórce F2.
7. Kliknij komórkę J2. W pasku formuły pojawi się następująca formuła:
=WYSZUKAJ.PIONOWO(G2;Kolory!A:B; 2;FAŁSZ)
Formuła ta wyszukuje w arkuszu Kolory nazwę koloru odpowiadającą kodowi zapisanemu
w komórce G2.
Jeżeli jesteś zaawansowanym użytkownikiem Excela, bez problemu zaimplementujesz te same
formuły w nowym arkuszu, np. R02-01.xlsx. Ewentualnie możesz skopiować do niego niezbędne
arkusze i formuły z kolumn od F do J.
Co jednak robić, kiedy dane są aktualizowane co tydzień? Jeżeli dane zmieniają się regularnie,
trzeba wykonywać powtarzające się operacje ich kopiowania i wklejania, co może skutkować
pomyłkami i błędnymi wynikami. W następnych dwóch ćwiczeniach poznasz lepszy sposób
osiągnięcia celu przy użyciu Power Query.
48
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
Uwaga. Ponieważ wstążki w różnych wersjach Excela różnią się, w tej książce przyjęte jest założenie,
że korzystasz z Excela z pakietu Office 365, w którym wejście do wszystkich funkcjonalności
znajduje się w rozwijanym menu Pobierz dane. Ćwiczenie możesz również wykonać w wersji
Excela 2010 lub 2013 z dodatkiem Power Query. Różnice w wykonywanych operacjach są
minimalne i dotyczą tylko początkowych kroków wykonywanych przy użyciu karty Dane
lub Power Query. Szczegóły zawarte są w rozdziale 1., „Wprowadzenie do Power Query”,
w podrozdziale „Gdzie znajduje się Power Query?”.
Wskazówka. Jeżeli wolisz używać podręcznego menu, kliknij ikonę w lewym górnym rogu
panelu podglądu i wybierz polecenie Użyj pierwszego wiersza jako nagłówków.
49
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 2.2. Okno „Dzielenie kolumny według ogranicznika” domyślnie wykorzystuje myślnik; dodatkowe
opcje znajdują się w sekcji Opcje zaawansowane, warto je przejrzeć i sprawdzić, czy są odpowiednie
Wskazówka. Jeżeli każda wartość zawiera taką samą liczbę ograniczników, wtedy funkcjonalność
dzielenia kolumn jest bardzo pomocna. Jeżeli liczba ograniczników nie jest znana, wtedy należy
rozważyć podział kolumny na wiersze. Dalej w tym rozdziale dowiesz się, kiedy taki podział
się przydaje.
Jak widać, wybrany jest również znak cudzysłowu. Do czego jest potrzebny? Jak zostałyby
podzielone wartości, gdyby jedna z nich zawierała myślnik, który nie powinien być
potraktowany jako ogranicznik? W takim przypadku autor danych może ująć tekst
zawierający myślnik w cudzysłowy, a Power Query nie podzieli takiego tekstu. Jedyny
problem może pojawić się wtedy, gdy nie ma cudzysłowu zamykającego. Wtedy cały tekst,
począwszy od cudzysłowu, jest pozostawiany w oryginalnej formie.
50
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
8. Po zamknięciu okna Dzielenie kolumny według ogranicznika w panelu podglądu pojawią się
kolumny Kod produktu.1, Kod produktu.2, Kod produktu.3 i Kod produktu.4. Zmień ich
nazwy odpowiednio na Kod kategorii, Krótki kod produktu, Wielkość i Kod koloru. W tym
celu kliknij dwukrotnie nagłówek odpowiedniej kolumny i wpisz nową nazwę. Ewentualnie
zaznacz kolumnę, a następnie w karcie Przekształć kliknij ikonę Zmień nazwę. Zostanie
zaznaczona nazwa kolumny, którą będziesz mógł zmienić.
W ten sposób utworzyłeś kolumnę Wielkość oraz kolumny zawierające kody kategorii
i kolorów produktów. Teraz poznasz dwie metody dodawania kolumny z rzeczywistymi
kategoriami i kolorami zamiast ich kodów. W części II ćwiczenia 2.2 dowiesz się, jak scalić
tabele Kategorie i Kolory z tabelą Produkty, a w części III ćwiczenia 2.2 — jak przekształcić
trzy tabele w tabelę faktów i tabele wyszukiwania.
9. Aby zapisać skoroszyt Excela lub raport Power BI Desktop, wykonaj następne kroki.
Excel
a. W karcie Strona główna rozwiń menu Zamknij i załaduj, a następnie wybierz
polecenie Zamknij i załaduj do. Pojawi się okno Importowanie danych.
b. Zaznacz opcję Utwórz tylko połączenie i sprawdź, czy nie jest zaznaczona opcja
Dodaj te dane do modelu danych (tej opcji użyjesz w III części ćwiczenia).
c. Zapisz skoroszyt pod nazwą R02-02 - rozwiązanie - część 1.xlsx.
Power BI Desktop: kliknij ikonę Zamknij i zastosuj, a następnie zapisz raport pod nazwą
R02-02 - rozwiązanie - część 1.pbix.
51
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 2.3. W oknie Scalanie można połączyć tabele Kategorie i Produkty przy użyciu kodów kategorii
4. Rozwiń kolumnę Kategorie (w tym celu kliknij ikonę z prawej strony nagłówka lub w karcie
Przekształć, rozwiń menu Kolumna strukturalna i wybierz polecenie Rozwiń).
5. W oknie, które się pojawi, usuń zaznaczenie Kod kategorii i zaznaczenie opcji Użyj
oryginalnej nazwy kolumny jako prefiksu. Na koniec kliknij OK. Kolumna Kategorie
zostanie zamieniona na nową kolumnę o nazwie Kategoria zawierającą nazwy kategorii.
6. Ponieważ masz kolumnę z nazwami kategorii, usuń kolumnę Kod kategorii poprzez jej
zaznaczenie i naciśnięcie klawisza Delete.
Uwaga. Użytkownikom przyzwyczajonym do Excela krok 6. może wydawać się dość uciążliwy.
Możesz się dziwić, dlaczego kolumna Kategorie nie zmieniła się po usunięciu kolumny Kod kategorii.
Pamiętaj jednak, że edytor Power Query nie działa tak jak Excel. W kroku 3. wykorzystałeś
kolumnę Kod kategorii do scalenia dwóch tabel za pomocą kodu kategorii. Natomiast w kroku
6. usunąłeś tę kolumnę. W Excelu arkusz można traktować jak jedną płaszczyznę, natomiast
w edytorze Power Query tworzone są wielowarstwowe przekształcenia, czyli stany. Każdy stan
można traktować jak pośrednią płaszczyznę lub tabelę, która stanowi jedynie podstawę dla
następnej płaszczyzny.
52
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
7. Aby scalić tabelę Kolory z tabelą Produkty, kliknij ponownie w karcie Strona główna ikonę
Scal zapytania. W oknie Scalanie wykonaj poniższe kroki (patrz rysunek 2.4).
RYSUNEK 2.4. W oknie Scalanie można połączyć tabele Kolory i Produkty przy użyciu kodów kolorów
a. W tabeli Produkty zaznacz kolumnę Kod koloru, a w rozwijanej liście pod tabelą
wybierz pozycję Kolory. Następnie w nowej tabeli zaznacz kolumnę Kod koloru.
b. W rozwijanej liście Rodzaj sprzężenia wybierz pozycję Lewe zewnętrzne
(wszystkie z pierwszej, pasujące z drugiej) i kliknij OK.
W edytorze Power Query pojawi się nowa kolumna Kolory z wartościami Table.
Zatrzymaj się teraz na chwilę, aby dowiedzieć się, czym jest obiekt Table i jak się go używa.
Oprócz rozwijania można na nim wykonywać trzy popularne operacje.
Zagłębiać się w tabelę, klikając odnośniki zawarte w komórkach. W panelu Zastosowane
kroki będą się wtedy pojawiać nowe kroki. Od tego momentu można dalej przygotowywać
dane zawarte w obiekcie Table. Wypróbuj teraz tę funkcjonalność. Kliknij dowolną
komórkę w kolumnie Kolory. W panelu podglądu pojawi się tabela zawierająca jeden
wiersz z kodem koloru i jego nazwą. Aby wrócić do tabeli Produkty, usuń ostatni krok
z panelu Zastosowane kroki.
53
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zagłębiać się w tabelę i tworzyć nowe zapytania. W ten sposób można badać dane,
zachowując nienaruszoną oryginalną tabelę. Aby to zrobić, kliknij prawym przyciskiem
myszy dowolny obiekt Table i wybierz polecenie Dodaj jako nowe zapytanie. Utworzysz
nowe zapytanie i nowy krok odpowiadający zagłębieniu się w tabelę w poprzednim
punkcie. Na koniec usuń ostatni krok.
Doraźnie sprawdzać zawartość wybranego obiektu Table. W tym celu kliknij puste
miejsce w komórce. W dolnej części panelu pojawi się podgląd obiektu.
Teraz, gdy poznałeś dokładniej obiekt Table, rozwiń kolumnę Kolory.
Uwaga. Jak się przekonasz, praca z innymi strukturalnymi obiektami — rekordami, listami
i obiektami binarnymi — wygląda podobnie. W obiekt można się zagłębiać, tworzyć z niego
nowe zapytania i podglądać zawartość, klikając puste miejsce w komórce.
8. Rozwiń kolumnę Kolory (w tym celu kliknij ikonę z prawej strony nagłówka lub w karcie
Przekształć rozwiń menu Kolumna strukturalna i wybierz polecenie Rozwiń).
9. W oknie, które się pojawi, usuń zaznaczenie Kod koloru i zaznaczenie opcji Użyj oryginalnej
nazwy kolumny jako prefiksu. Na koniec kliknij OK. Kolumna Kolory zostanie zamieniona
na nową kolumnę o nazwie Kolor zawierającą nazwy kolorów.
10. Ponieważ masz kolumnę z nazwami kolorów, usuń kolumnę Kod koloru. Zapytanie Produkty
jest gotowe, czas je załadować do raportu.
11. Aby załadować zapytanie Produkty do modelu danych w Excelu, wykonaj następujące kroki.
a. W karcie Strona główna kliknij ikonę Zamknij i załaduj.
b. W karcie Dane kliknij ikonę Zapytania i połączenia, aby otworzyć panel zapytań.
Kliknij prawym przyciskiem myszy zapytanie Produkty i wybierz polecenie Załaduj do.
c. W oknie Importowanie danych, które się pojawi, zaznacz opcję Dodaj te dane do modelu
danych i kliknij OK.
d. Teraz utworzysz tabelę przestawną opartą na modelu danych i przeanalizujesz liczby
kolorów i kategorii produktów. W karcie Wstawianie kliknij ikonę Tabela przestawna.
Pojawi się okno Tworzenie tabeli przestawnej. Sprawdź, czy jest zaznaczona opcja
Użyj modelu danych tego skoroszytu i kliknij OK, aby zamknąć okno.
W Power BI Desktop wykonaj następujące kroki.
a. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Kategorie i usuń
zaznaczenie polecenia Włącz ładowanie.
b. Kliknij prawym przyciskiem myszy zapytanie Kolory i usuń zaznaczenie polecenia
Włącz ładowanie.
Powyższe dwa kroki powodują, że wybrane zapytania będą stanowiły podstawę dla
innych zapytań. Ponieważ z tabel Kategorie i Kolory wyodrębniłeś nazwy kategorii
i kolorów, możesz w raporcie umieścić jedną tabelę Produkty. Usunięcie zaznaczenia
polecenia Włącz ładowanie spowoduje, że dane zapytanie nie zostanie załadowane do
raportu Power BI. Jest to równoważne wykonaniu w Excelu kroku 9b w części I ćwiczenia 2.2,
w którym w oknie Importowanie danych zaznaczyłeś opcję Utwórz tylko połączenie.
c. W karcie Strona główna kliknij ikonę Zamknij i zastosuj.
54
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
Część III ćwiczenia 2.2 zaczniesz od miejsca, w którym skończyłeś część I. Załaduj do modelu
danych trzy zapytania jako osobne tabele.
1. W Excelu otwórz skoroszyt R02-02 - rozwiązanie - część 1.xlsx. W kolejnych krokach załadujesz
wszystkie zapytania do modelu danych; wtedy będziesz mógł tworzyć tabele i wykresy przestawne
oparte na kilku tabelach. W tym celu kliknij w karcie Dane ikonę Zapytania i połączenia.
a. W panelu Zapytania i połączenia, który się pojawi, kliknij prawym przyciskiem myszy
zapytanie Kategorie i wybierz polecenie Załaduj do.
b. W oknie Importowanie danych zaznacz opcję Dodaj te dane do modelu danych i kliknij OK.
c. Kliknij prawym przyciskiem myszy zapytanie Kolory i wybierz polecenie Załaduj do.
d. W oknie Importowanie danych zaznacz opcję Dodaj te dane do modelu danych i kliknij OK.
e. Kliknij prawym przyciskiem myszy zapytanie Produkty i wybierz polecenie Załaduj do.
f. W oknie Importowanie danych zaznacz opcję Dodaj te dane do modelu danych i kliknij OK.
Załadowałeś do modelu danych wszystkie trzy tabele. Teraz pora na utworzenie relacji
pomiędzy nimi.
g. W karcie Dane kliknij ikonę Zarządzaj modelem danych. Pojawi się okno Power Pivot dla
programu Excel.
h. W karcie Narzędzia główne kliknij ikonę Widok diagramu.
W programie Power BI Desktop otwórz plik R02-02 - rozwiązanie - część 1.pbix i w pasku
po lewej stronie kliknij ikonę Model.
2. Przeciągnij kolumnę Kod kategorii z tabeli Kategorie do kolumny Kod kategorii w tabeli Produkty.
3. Przeciągnij kolumnę Kod koloru z tabeli Kolory do kolumny Kod koloru w tabeli Produkty.
Twój model danych składa się teraz z tabeli faktów zawierającej listę produktów oraz dwóch
tabel wyszukiwania z dodatkowymi informacjami o kategoriach i kolorach. Jak pokazuje
rysunek 2.5, relacje typu „jeden do wielu” istnieją pomiędzy kolumną Kod kategorii w tabeli
Kategorie a kolumną Kod kategorii w tabeli Produkty oraz kolumną Kod koloru w tabeli
Kolory a kolumną Kod koloru w tabeli Produkty.
55
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 2.5. Widok diagramu prezentuje relacje w modelu danych pomiędzy tabelami Kategorie i Produkty
oraz Kolory i Produkty
Zobacz też. Modelowanie danych nie jest przedmiotem tej książki. Aby dowiedzieć się więcej
na temat Power Pivot, modelu danych i relacji w Excelu i Power BI Desktop, sięgnij po książkę
Analyzing Data with Power BI and Power Pivot for Excel (Analiza danych za pomocą Power BI
i Power Pivot w Excelu, Alberto Ferrari, Marco Russo, wyd. Microsoft Press).
4. Po zdefiniowaniu relacji pomiędzy tabelami ukryj kolumny Kod kategorii i Kod koloru,
aby nie pojawiały się w tabelach i wykresach przestawnych ani w wizualizacjach Power BI.
Raporty będą wtedy bardziej czytelne. W innych sytuacjach, gdy jest wiele tabel faktów
połączonych z tabelą wyszukiwania za pomocą tej samej kolumny, ukrywając kolumny,
można tworzyć bardziej elastyczne raporty, w których jedna kolumna z tabeli wyszukiwania
może pełnić rolę fragmentatora lub filtru danych pochodzących z kilku tabel faktów.
W Excelu kliknij prawym przyciskiem myszy kolumnę Kod koloru w tabeli Kolory i wybierz
polecenie Ukryj przed narzędziami klienta. Tę samą operację wykonaj na kolumnie Kod
koloru w tabeli Produkty oraz kolumnach Kod kategorii w tabelach Kategorie i Produkty.
W Power BI Desktop kliknij prawym przyciskiem myszy kolumnę Kod koloru w tabeli
Kolory i wybierz polecenie Ukryj w widoku raportu. Tę samą operację wykonaj na kolumnie
Kod koloru w tabeli Produkty oraz kolumnach Kod kategorii w tabelach Kategorie i Produkty.
Teraz możesz tworzyć tabele i wykresy przestawne i wizualizacje, tak jak w załączonych
do książki plikach R02-02 - rozwiązanie - część 3.xlsx i R02-02 - rozwiązanie - część 3.pbix.
56
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
Kolumna z przykładów
Zazwyczaj pierwsze polecenie w karcie, licząc od lewej strony, oferuje najważniejszą funkcjonalność.
Dlatego w Excelu w karcie Wstaw pierwszym poleceniem jest Tabela przypisania. W edytorze Power
Query pierwszą ikoną w karcie Dodaj kolumnę jest Kolumna z przykładów. Oferuje ona niezwykle
przydatną funkcjonalność umożliwiającą wyodrębnianie potrzebnych informacji z istniejących
kolumn i umieszczanie ich w nowych kolumnach. Nie jest przy tym wymagana znajomość różnych
przekształceń dostępnych w edytorze.
Za pomocą funkcjonalności Kolumna z przykładów można tworzyć nowe kolumny, wpisując po
prostu jedną lub kilka przykładowych wartości. Na tej podstawie edytor określi operacje niezbędne
do utworzenia kolumny z nowymi wartościami. Tę funkcjonalność można wykorzystywać do
szybkiego wyodrębniania potrzebnych danych. Jest ona szczególnie przydatna dla początkujących
użytkowników, ponieważ nie wymaga opanowania niezbędnych przekształceń dostępnych we
wstążce ani kodowania formuł w języku M. Wystarczy podać kilka przykładowych wartości dla
nowej kolumny, a resztę wykona edytor Power Query.
Ćwiczenie 2.3 stanowi prostą demonstrację funkcjonalności Kolumna z przykładów opartą
na danych wykorzystanych w ćwiczeniu 2.2.
57
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zaznacz kolumnę Kod produktu, a następnie w karcie Dodaj kolumnę rozwiń menu
Kolumna z przykładów. Pojawią się dwa polecenia:
Ze wszystkich kolumn,
Z zaznaczenia.
W tym ćwiczeniu musisz wyodrębnić z kolumny Kod produktu tylko jego wielkość,
więc wybierz polecenie Z zaznaczenia.
Wskazówka. Jeżeli wiesz, jakie kolumny mają być użyte do utworzenia nowej kolumny, wtedy
wybierając je i używając polecenia Kolumna z przykładów/Z zaznaczenia, zwiększysz szansę,
że edytor Power Query przedstawi Ci poprawne propozycje.
Edytor Power Query przejdzie w nowy tryb. Panel podglądu przesunie się w dół, a w jego
górnej części pojawi się komunikat Wprowadź przykładowe wartości, aby utworzyć nową
kolumnę. Po prawej stronie tej sekcji znajdują się przyciski OK i Anuluj umożliwiające
wyjście ze specjalnego trybu edytora.
Po prawej stronie panelu podglądu znajduje się pusta kolumna, w której możesz wpisywać przykłady.
Zanim zaczniesz, kliknij dwukrotnie nagłówek tej kolumny i zmień jej nazwę na Wielkość.
4. Kliknij dwukrotnie pierwszą pustą komórkę w kolumnie Wielkość. Pojawi się rozwijane menu
zawierające proponowane przykłady, które można wykorzystać do utworzenia nowej kolumny.
Wartości te można traktować jako sugestie przekształceń do wykorzystania przy wypełnianiu kolumny.
5. W pierwszej pustej komórce wpisz literę S oznaczającą wielkość produktu w kodzie VE-C304-S-BE
i naciśnij Enter. Jak pokazuje rysunek 2.6, edytor Power Query wypełni wszystkie wiersze
w kolumnie Wielkość proponowanymi wartościami. Naciśnij klawisze Ctrl+Enter lub kliknij
przycisk OK, aby utworzyć nową kolumnę.
58
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
Zobacz też. Aktualna lista funkcji wykorzystywanych w funkcjonalności Kolumna z przykładów jest
dostępna na stronie https://docs.microsoft.com/en-us/power-bi/desktop-add-column-from-example.
59
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
60
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
Dalej w tym ćwiczeniu utworzysz osobną tabelę produktów zawierającą liczbowe oznaczenia
wielkości, które podzielisz na cztery zakresy (S, M, L i X oznaczające odpowiednio mały,
średni, duży i bardzo duży), wykorzystując funkcjonalność Kolumna z przykładów.
5. W panelu Zapytania kliknij prawym przyciskiem myszy Produkty i wybierz polecenie
Odwołanie. Zmień nazwę nowego zapytania. W tym celu kliknij je prawym przyciskiem
myszy i wybierz polecenie Zmień nazwę i wpisz Produkty, wielkości liczbowe. Ewentualnie
wpisz nową nazwę w panelu Ustawienia zapytania w polu Nazwa.
6. Usuń z nowego zapytania wszystkie wiersze zawierające puste wielkości (null). W tym celu
w nagłówku kolumny Wielkość liczbowa kliknij ikonę filtru i wybierz polecenie Usuń puste.
7. Załóżmy, że chcesz zamienić wszystkie wielkości liczbowe na oznaczenia S, M, L i X według
następujących reguł: wielkość większa lub równa 70 ma być zamieniona na literę X, większa
lub równa 60 na literę L, większa lub równa 50 na literę M, a większa lub równa 40 na literę S.
Poniżej opisane są kroki osiągnięcia tego celu za pomocą funkcjonalności Kolumna z przykładów
(sprawdź, wykorzystując rysunek 2.7, czy wykonałeś je poprawnie).
RYSUNEK 2.7. Za pomocą funkcjonalności Kolumna z przykładów można wielkości liczbowe zamienić
na oznaczenia zakresów
61
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
a. Zaznacz kolumnę Wielkość liczbowa, a następnie w karcie Dodaj kolumnę rozwiń menu
Kolumna z przykładów i wybierz polecenie Z zaznaczenia.
b. Zmień nazwę nowej kolumny na Symbol wielkości.
c. W wierszu 1. wpisz X, ponieważ kolumna Wielkość liczbowa zawiera wartość 70.
d. W wierszach 2. i 3. wpisz L, ponieważ kolumna Wielkość liczbowa zawiera odpowiednio
wartości 60 i 62.
e. W wierszu 5. wpisz M, ponieważ kolumna Wielkość liczbowa zawiera wartość 50.
f. W wierszu 20. wpisz S, ponieważ kolumna Wielkość liczbowa zawiera wartość 40.
g. Naciśnij Ctrl+Enter, aby utworzyć kolumnę Symbol wielkości zawierającą oznaczenia
zakresów wielkości.
8. Dla praktyki kliknij dwukrotnie w panelu Zastosowane kroki krok Dodano kolumnę
warunkową. Pojawi się okno Dodawanie kolumny warunkowej. Przejrzyj zawarte w nim
warunki definiujące poszczególne zakresy wielkości. Na koniec zamknij okno.
9. Przyjrzyj się kodowi w pasku formuły. Jest to język M, który zostanie dokładniej opisany
w rozdziale 9., „Wprowadzenie do języka M”.
62
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
63
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
64
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
W wierszu 29. pojawi się odnośnik /containersebook. W kolejnych krokach dodasz kolumnę
warunkową, w której umieścisz brakującą nazwę domeny „aka.ms”, jeżeli pierwszym
znakiem w kolumnie Odnośnik będzie ukośnik (/).
14. W panelu Zastosowane kroki kliknij ostatni krok. Usuń kolumnę Odnośnik.1, a następnie
zmień nazwę kolumny Odnośnik.2.1 na Odnośnik stary.
15. W karcie Dodaj kolumnę kliknij ikonę Kolumna warunkowa. W oknie Dodawanie kolumny
warunkowej, które się pojawi, wykonaj poniższe kroki (patrz rysunek 2.9).
RYSUNEK 2.9. Dodanie kolumny warunkowej ma na celu przywrócenie nazwy domeny „aka.ms”; pamiętaj,
że warunki zdefiniowane w tym oknie służą jedynie do przygotowania ostatecznego warunku
Uwaga. Za pomocą okna Dodawanie kolumny warunkowej przygotowuje się materiał do utworzenia
ostatecznego warunku. Funkcjonalności tego okna są ograniczone i należy je traktować jako
narzędzie do przygotowania żądanych fragmentów końcowego warunku. Na koniec, w kroku
16., niezbędna będzie nieznaczna modyfikacja w pasku formuły uzyskanego kodu.
65
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
i. W rozwijanej liście ABC123 w dolnej części okna wybierz polecenie Wprowadź kolumnę,
a następnie w rozwijanej liście obok wybierz Odnośnik stary.
j. Sprawdź, czy ustawienia są takie same jak na rysunku 2.9 i kliknij OK, aby zamknąć okno.
16. Zwróć uwagę na pasek formuły. Teraz pora zmienić kod formuły tak, aby dodawała prefiks
„aka.ms”, gdy pierwszym znakiem odnośnika jest ukośnik. Poniżej przedstawiona jest
formuła utworzona w kroku 15.:
= Table.AddColumn(#"Zmieniono nazwy kolumn1", "Odnośnik", each if [Odnośnik stary] =
null then null else if Text.StartsWith([Odnośnik stary], "/") then [Odnośnik stary]
else [Odnośnik stary])
Aby skorygować formułę, musisz złączyć tekst "aka.ms" z wyróżnionym fragmentem
[Odnośnik stary]. Podobnie jak w Excelu, użyj w tym celu operatora &. Poniżej
przedstawiona jest poprawiona formuła z wyróżnioną zmianą:
= Table.AddColumn(#"Zmieniono nazwy kolumn1", "Odnośnik", each if [Odnośnik stary] =
null then null else if Text.StartsWith([Odnośnik stary], "/") then "aka.ms" &
[Odnośnik stary] else [Odnośnik stary])
Uwaga. Pierwszy warunek zdefiniowany w kroku 15. zabezpiecza przed wywołaniem funkcji
Text.StartsWith w przypadku, gdy kolumna [Odnośnik stary] zawiera wartość null,
co spowodowałoby pojawienie się błędu.
66
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
W tej chwili, jak pokazuje rysunek 2.10, żądany odnośnik znajduje się w kolumnie
Odnośnik.2 lub Odnośnik.3 (wiersz 149.). Jeżeli scalisz obie kolumny, wtedy odzyskasz
brakujące odnośniki i poprawisz zapytanie.
RYSUNEK 2.10. Aby wyodrębnić odnośniki rozpoczynające się od „https://www.”, musisz scalić kolumny
Odnośnik.2 i Odnośnik.3
19. Upewnij się, że zaznaczony jest krok Podzielono kolumnę według ogranicznika, a następnie
wstaw do sekwencji poniższe kroki.
a. Zaznacz kolumny Odnośnik.2 i Odnośnik.3.
b. W karcie Przekształć kliknij ikonę Scal kolumny.
c. Pojawi się okno Wstawianie kroku z ostrzeżeniem, że wstawienie nowego kroku może
zakłócić działanie pozostałych kroków. Kliknij przycisk Wstaw.
d. W oknie Scal kolumny, które się pojawi, pozostaw domyślne ustawienia i kliknij OK.
e. Zmień nazwę kolumny Scalone na Odnośnik.2.
f. Gdy pojawi się okno Wstawianie kroku, ponownie kliknij Wstaw.
20. Zaznacz ostatni krok w panelu Zastosowane kroki i upewnij się, że wszystkie operacje zostały
wykonane poprawnie.
Pozostały jeszcze dwa błędnie obsłużone przypadki. Po pierwsze, zwróć uwagę, że na końcu
odnośnika w wierszu 149. nie znajduje się spacja, tylko kropka. Z tego powodu w kroku 11.
nie został usunięty tekst znajdujący się po odnośniku. Aby to poprawić, usuń znaki
interpunkcyjne ze wszystkich odnośników.
67
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
21. Zaznacz kolumnę Odnośnik, a następnie w karcie Przekształć rozwiń menu Format i wybierz
polecenie Przycięcie. Ewentualnie kliknij prawym przyciskiem myszy nagłówek kolumny
Odnośnik i z podręcznego menu wybierz polecenie Przekształć i Przycięcie.
Domyślnie polecenie Przycięcie usuwa z początku i końca tekstu spacje. Możesz jednak
zmienić je tak, aby usuwało znaki interpunkcyjne. Wymagane jest w tym celu wprowadzenie
pewnych zmian w formule. Zwróć uwagę na wyróżniony fragment Text.Trim w poniższym
kodzie:
= Table.TransformColumns(#"Usunięto kolumny2",{{"Odnośnik", Text.Trim, type text}})
Drugim argumentem funkcji Text.Trim jest lista znaków, jakie mają być usunięte z początku
i końca tekstu. W języku M listę złożoną z kropki, przecinka i nawiasu zamykającego
definiuje się w następujący sposób: { ".", ",", ")" }.
Aby zdefiniować drugi argument funkcji, trzeba również zdefiniować jej pierwszy argument,
czyli wskazać zawartość komórki w kolumnie Odnośnik. W tym celu należy użyć słowa
kluczowego each oraz znaku podkreślenia (składnia ta jest dokładniej opisana w rozdziale 9.).
Wpisz poniższy kod w pasku formuły, aby usunąć z kolumny Odnośnik dodatkowe znaki:
= Table.TransformColumns(#"Usunięto kolumny2",{{"Odnośnik", each Text.Trim(_,
{".",",",")"}), type text}})
22. Ostatni problem ujawnia się w wierszu 174., w którym po odnośniku następuje znak nowego
wiersza i dodatkowy tekst. W drugim przekształceniu Podzielono kolumnę według ogranicznika
wykorzystującym spację ten odnośnik nie został poprawnie wyodrębniony. Aby to poprawić,
kliknij w panelu Zastosowane kroki powyższy krok.
23. W pasku formuły znajduje się następujący kod:
68
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
d. Rozwiń sekcję Opcje zaawansowane i zaznacz opcję Dopasuj do całej zawartości kolumny.
Jest to bardzo ważne. Jeżeli tego nie zrobisz, prefiks „http://” zostanie usunięty ze
wszystkich komórek.
e. Kliknij OK, aby zamknąć okno. Następnie kliknij ikonę Zamknij i załaduj (jeżeli używasz
Excela) lub Zamknij i zastosuj (jeżeli używasz Power BI Desktop), aby załadować do
raportu komunikaty i wyodrębnione odnośniki.
Rozwiązałeś większość problemów dotyczących przetwarzania danych tekstowych
i wyodrębniłeś odnośniki. Gotowe rozwiązanie znajduje się w plikach R02-04 - rozwiązanie.xlsx
i R02-04 - rozwiązanie.pbix.
Zobacz też. W kolumnie Komunikaty wciąż znajdują się niewyodrębnione odnośniki, które nie
rozpoczynają się od „www.”, „http”, „https” ani „aka.ms”. Potrafisz je znaleźć? W rozdziale 11.,
„Podstawy analizy tekstu”, poznasz zaawansowane techniki wyszukiwania słów kluczowych w tekście;
przy ich użyciu będziesz mógł wykrywać więcej nazw domen i skuteczniej wyodrębniać odnośniki.
Operacje na datach
Podczas przygotowywania danych bardzo często trzeba wykonywać operacje na datach. Kolumny
tekstowe są dość proste w obsłudze, ale przekształcanie liczb i dat nawet w najprostszych zbiorach
danych może być bardzo frustrującym zajęciem. W tym podrozdziale dowiesz się, jak wykonuje się
operacje na datach. Zaczniesz od najczęściej spotykanego problemu, tj. zamiany tekstu na datę,
a następnie przejdziesz do bardziej ambitnych przypadków obejmujących sprawdzanie poprawności
daty. Na końcu tego podrozdziału nauczysz się wyodrębniać określone elementy daty i godziny.
Podczas ładowania tabeli danych Power Query przekształca kolumny zawierające datę i godzinę
na odpowiedni format. W ćwiczeniu 2.4 zaimportowałeś zbiór danych zawierający kolumnę Data
i edytor Power Query automatycznie nadał jej format Data/godzina. W ćwiczeniu 2.5 dowiesz się,
jak można przetwarzać daty zapisane w różnych formatach.
69
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Formuła ta zwiększa datę o 1 dzień, ale jej wynikiem jest liczba 43283, ponieważ Excel zapisuje
daty w postaci liczb całkowitych, aby mógł na nich wykonywać operacje. Data 1 stycznia
1900 jest zapisywana jako liczba 1, a data 1 stycznia 2018 jako 43282 (jest to liczba dni,
jakie upłynęły od 1 stycznia 1900 r.).
3. Aby data była poprawnie wyświetlana, zmień format kolumny H2 na Data. Następnie skopiuj
kolumnę H2 do schowka i wklej ją do komórek H3, H4, H5 i H6. W komórkach H2, H4 i H5 pojawi
się błąd #ARG!, ponieważ Excel nie będzie w stanie przekształcić zawartości tych komórek
na datę, aby później przesunąć je o jeden dzień.
4. Pora dowiedzieć się, jak w takiej sytuacji może się przydać Power Query. Utwórz pusty
skoroszyt w Excelu lub pusty raport w Power BI Desktop. Ponieważ dane źródłowe zapisane
są w zgodnie z polską konwencją, musisz w tym ćwiczeniu stosować odpowiednie ustawienia
regionalne. Dopóki nie zamknąłeś edytora Power Query, wykonaj następujące operacje.
W Excelu: kliknij kartę Plik, następnie Opcje i ustawienia i Opcje zapytania. W sekcji Bieżący
skoroszyt kliknij Ustawienia regionalne i w rozwijanej liście wybierz Polski (Polska).
W Power BI Desktop: kliknij kartę Plik, następnie Opcje i ustawienia i Opcje. Później w sekcji
Bieżący plik kliknij Ustawienia regionalne i w rozwijanej liście wybierz Polski (Polska).
5. Kliknij OK, aby zamknąć okno opcji.
6. Zaimportuj plik R02-05.xlsx do edytora Power Query.
a. W Excelu: w karcie Dane kliknij Pobierz dane, następnie Z pliku i Ze skoroszytu.
W Power BI Desktop: w karcie Dane rozwiń menu Pobierz dane i wybierz Excel.
b. Wybierz plik R02-05.xlsx i kliknij przycisk Importuj.
c. W oknie Nawigator zaznacz tabelę Arkusz1 i kliknij przycisk Przekształć dane.
7. Gdy pojawi się okno edytora, zwróć uwagę, że wszystkie daty w kolumnie Data produkcji
są zapisane poprawnie, co pokazuje rysunek 2.11.
RYSUNEK 2.11. Edytor Power Query automatycznie zmienia typ kolumny z Tekst na Data i przekształca
wartości zapisane w różnych formatach
8. Zamknij okno edytora i załaduj dane do raportu.
70
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
Wskazówka. Jeżeli importowane dane są zapisane w innym formacie regionalnym niż ustawiony
w Twoim systemie operacyjnym, wybierz odpowiednie ustawienia w opcjach zapytania (patrz
krok 4.). Po odświeżeniu panelu podglądu w edytorze dane powinny zostać poprawnie rozpoznane.
RYSUNEK 2.12. Po zmianie formatu w kolumnie Data produkcji z Tekst na Data, w niektórych komórkach,
w zależności od bieżących ustawień regionalnych, pojawią się błędy
Aby rozwiązać ten problem, nie można zdawać się na ustawienia regionalne. Zamiast tego należy
w opisany niżej sposób użyć funkcjonalności Dzielenie kolumny według ogranicznika i zastosować
kolumnę warunkową.
1. Utwórz nowy skoroszyt w Excelu lub nowy raport w Power BI Desktop.
2. Zaimportuj plik R02-06.xlsx do edytora Power Query.
71
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. W krokach od 6. do 10. poznasz inny sposób tworzenia dat. Wcześniej jednak utwórz
duplikat bieżącego zapytania, aby zachować obie wersje.
5. Aby utworzyć duplikat zapytania, kliknij w panelu zapytania prawym przyciskiem myszy
Produkty i z podręcznego menu wybierz polecenie Duplikuj. Pojawi się nowe zapytanie
Produkty (2). Zaznacz je, a następnie w panelu Zastosowane kroki usuń trzy ostatnie kroki
(włącznie z Dodano kolumnę niestandardową).
6. Naciśnij klawisz Ctrl i zaznacz trzy kolumny w następującej kolejności: Data produkcji.2,
Data produkcji.1 i Data produkcji.3. Następnie w karcie Dodaj kolumnę kliknij ikonę Scal
kolumny. Pojawi się okno o tej samej nazwie.
a. W rozwijanej liście Separator wybierz --Niestandardowe--, a w polu poniżej wpisz
ukośnik (/).
b. W polu Nowa nazwa kolumny (opcjonalnie) wpisz Data (US). Kliknij OK, aby zamknąć
okno.
72
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
RYSUNEK 2.13. Aby wybrać poprawną datę w zależności od ustawień regionalnych, można wykorzystać
kolumnę warunkową
73
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
74
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
Przygotowanie modelu
Kluczem do sukcesu są dobrze przygotowane dane. Przygotowując materiał do efektywnej analizy,
często trzeba dzielić dane na tabelę faktów lub transakcji (np. Zamówienia) oraz kilka tabel
dodatkowych (np. Produkty, Klienci itp.).
W części III ćwiczenia 2.2 dowiedziałeś się, jak utworzyć relacje pomiędzy tabelą faktów a tabelami
wyszukiwania. Modelowanie danych za pomocą Power Pivot i Power BI nie jest wprawdzie treścią
tej książki, ale za to jest nią przygotowywanie tabel spełniających potrzeby analityka. W kolejnych
trzech rozdziałach nauczysz się łączyć tabele, aby upraszczać model danych. W rozdziale 6.,
„Rozdzielanie tabel”, dowiesz się, jak dzielić tabele o skomplikowanych strukturach na kilka
prostszych, łatwiejszych do analizy.
W tym podrozdziale poznasz kilka fundamentalnych operacji umożliwiających dzielenie
zagregowanej tabeli na kilka mniejszych, tworzenie struktur gwiaździstych oraz kontrolowanie
rozmieszczania danych.
75
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 2.14. Tabelę Zamówienia możesz podzielić na tabelę faktów i tabelę wyszukiwania
7. Kliknij kolumnę Kod produktu, a następnie w karcie Strona główna kliknij ikonę
Usuń wiersze i Usuń duplikaty.
Utworzyłeś w ten sposób tabelę wyszukiwania zawierającą unikatowe wiersze z danymi
produktów.
Uwaga. Jeżeli w kolumnie Kod produktu będą powtarzały się kody, nie będziesz mógł utworzyć
relacji w kroku 12. W tym przypadku celowo zostały pominięte dwa ważne kroki. Są one opisane
na końcu ćwiczenia. Jeżeli ich nie wykonasz, wtedy polecenie Usuń duplikaty nie da pewności,
że kolumna Kod produktu będzie zawierała unikatowe wartości, przez co mogą pojawić się
problemy z odświeżaniem danych.
8. Aby utworzyć tabelę faktów, kliknij w panelu zapytania prawym przyciskiem myszy
zapytanie Zamówienia - baza i wybierz polecenie Odwołanie.
9. Zmień nazwę nowego zapytania na Zamówienia (w tym celu kliknij je prawym przyciskiem
myszy i z podręcznego menu wybierz polecenie Zmień nazwę albo w panelu Ustawienia
zapytania wpisz nową nazwę w polu Nazwa).
10. Kliknij zapytanie Zamówienia, a następnie w karcie Strona główna kliknij Wybieranie
kolumn. W oknie, które się pojawi, usuń zaznaczenia Nazwa produktu i Czas dostawy.
Kliknij OK, aby zamknąć okno.
11. W Excelu: w karcie Strona główna kliknij ikonę Zamknij i załaduj, aby zapobiec załadowaniu
głównego zapytania do modelu danych. Następnie w panelu Zapytania i połączenia załaduj
zapytania Produkty i Zamówienia w sposób opisany w części II ćwiczenia 2.2, w kroku 11.
W Power BI Desktop: zablokuj ładowanie zapytania Zamówienia - baza w sposób opisany
w części II ćwiczenia 2.2, w kroku 11.
12. Utwórz relację pomiędzy obiema tabelami, wykorzystując kolumnę Kod produktu.
76
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
77
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 2.15. Kolumnę Kolory możesz podzielić, aby określić, w ilu kolorach są oferowane poszczególne produkty
Plik R02-08.xlsx, wykorzystany w tym ćwiczeniu, zawiera takie informacje o produktach jak kod,
średni koszt, średnia cena i dostępne kolory. Aby utworzyć raport z liczbami produktów
w poszczególnych kolorach, wykonaj poniższe kroki.
1. Utwórz nowy skoroszyt w Excelu lub nowy raport w Power BI Desktop, a następnie
zaimportuj do edytora plik R02-08.xlsx.
2. W oknie Nawigator kliknij tabelę Produkty, a następnie przycisk Przekształć dane.
3. W oknie Nawigator kliknij zapytanie Produkty i wybierz polecenie Odwołanie. Celem jest
utworzenie tabeli wiążącej kody produktów z ich kolorami.
4. Zmień nazwę nowego zapytania na Produkty i kolory (w tym celu kliknij je prawym
przyciskiem myszy i z podręcznego menu wybierz polecenie Zmień nazwę albo w panelu
Ustawienia zapytania wpisz nową nazwę w polu Nazwa).
5. Kliknij nowe zapytanie, a następnie w karcie Strona główna kliknij Wybieranie kolumn.
6. W oknie, które się pojawi, usuń wszystkie zaznaczenia, a następnie zaznacz kolumny
Kod produktu i Kolory. Kliknij OK, aby zamknąć okno.
78
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 2. PODSTAWOWE OPERACJE PRZYGOTOWYWANIA DANYCH
7. Zaznacz kolumnę Kolory, a następnie w karcie Przekształć kliknij ikonę Podziel kolumny
i wybierz polecenie Według ogranicznika.
8. Zwróć uwagę, że w oknie, które się pojawi, domyślnie wybrany jest przecinek jako
ogranicznik i zaznaczona opcja Każde wystąpienie ogranicznika (patrz rysunek 2.16).
Rozwiń sekcję Opcje zaawansowane i zaznacz opcję Wiersze. Kliknij OK, aby zamknąć okno.
RYSUNEK 2.16. Nie zapomnij w oknie „Dzielenie kolumny według ogranicznika” wybrać w sekcji
„Opcje zaawansowane” opcji Wiersze
Wskazówka. Aby zmniejszyć plik z raportem, możesz z tabeli Produkty usunąć kolumnę Kolory.
W takim przypadku jednak, jeżeli odtworzysz wszystkie operacje, pojawi się błąd, ponieważ do
tabeli Produkty odwołuje się tabela Produkty i kolory. Musisz zatem utworzyć nowe odwołanie
do tabeli Produkty i usunąć z nowego zapytania kolumnę Kolory. Oryginalne zapytanie Produkty
będzie wtedy jedynie pełniło rolę bazy i nie trzeba go będzie ładować do modelu danych ani
do raportu. (W części II ćwiczenia 2.2 napisano, jak wyłączyć ładowanie danych).
79
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Podsumowanie
Przygotowywanie danych może być czynnością wyjątkowo czasochłonną. Jednak bogate funkcjonalności
edytora Power Query sprawiają, że można dane łatwo oczyszczać i przygotowywać do analizy. W tym
rozdziale poznałeś najczęściej spotykane problemy i sposoby ich rozwiązania za pomocą edytora
Power Query.
W ćwiczeniu 2.2 dowiedziałeś się, jak można wyodrębniać kody kolorów i nadawać im
znaczenie bez konieczności stosowania skomplikowanych formuł użytych w ćwiczeniu 2.1.
W ćwiczeniu 2.3 poznałeś bardzo przydatną funkcjonalność wyodrębniania informacji
z kolumny na podstawie przykładów. Polecenie Kolumna z przykładów pozwala wyodrębniać
z danych teksty, daty, godziny i liczby, jak również oferuje wiele różnych przekształceń
wykorzystujących wprowadzane przykłady. Jak się przekonałeś, można w ten sposób wyodrębniać
teksty rozdzielone ogranicznikami, tworzyć kolumny warunkowe i definiować zakresy wartości.
W ćwiczeniu 2.4 nauczyłeś się wyodrębnić odnośniki z tekstu bez określonej struktury i stosować
różne przekształcenia. Z tego ćwiczenia płynie bardzo ważny wniosek, że trzeba jak najczęściej
sprawdzać wyniki zapytań i wyszukiwać przypadki szczególne.
Często wykonywaną i czasochłonną operacją jest przetwarzanie dat zapisanych w różnych
formatach. W ćwiczeniach 2.5 i 2.6 przekonałeś się, jak łatwo się to robi za pomocą Power Query.
Na koniec, w ćwiczeniach 2.7 i 2.8 dowiedziałeś się, jak z pomocą przekształceń Odwołanie
i Usuń duplikaty dzielić dane na tabele faktów i tabele wyszukiwania. Nauczyłeś się również, jak
przy użyciu przekształceń Małe litery i Przycinanie można zapobiegać problemom z odświeżaniem
raportów oraz jak zamieniać wartości oddzielone przecinkami na wiersze i tworzyć tabele grup
i członków.
Choć wciąż znajdujesz się na początku książki, to wykorzystując zdobytą do tej pory wiedzę, już
teraz możesz skrócisz czas oczyszczania danych o wiele godzin. W następnym rozdziale dowiesz się,
jak można łączyć kilka tabel i jeszcze szybciej przygotowywać raporty.
80
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 3.
Próba połączenia mądrości i potęgi rzadko się udaje i tylko na krótką chwilę.
— Albert Einstein
Albert Einstein miał rację, mówiąc, że rzadko udaje się połączyć mądrość z potęgą, ale Power Query
oferuje potęgę pozwalającą zdobyć trwałą mądrość. W tym rozdziale dowiesz się, jak łączyć tabele
o odmiennych stopniach złożoności i tworzyć raporty wykorzystujące różne dane.
W rozdziale 2., „Podstawowe operacje przygotowywania danych”, opisane zostały przypadki
przetwarzania nieprzygotowanych, źle sformatowanych danych. Często jednak zdarza się, że dane są
właściwie sformatowane, ale znajdują się w różnych źródłach. Wtedy największym wyzwaniem jest
połączenie ich i utworzenie jednego źródła wiedzy. Treścią tego rozdziału jest łączenie wielu tabel.
Na początku opisane zostały podstawowe przypadki łączenia niewielkiej liczby tabel zapisanych
w jednym formacie. Dalej w rozdziale przedstawiono bardziej skomplikowane, z życia wzięte
sytuacje, w których źródła danych nieustannie się zmieniają.
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 3.1. Twoje zadanie polega na połączeniu tabel Rowery i Akcesoria w jedną o nazwie Produkty
82
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 3.. ŁĄCZENIE DANYCH Z KILKU ŹRÓDEŁ
83
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 3.2. Przekształcenie „Dołącz zapytania jako nowe” pozwala tworzyć nowe zapytania zawierające
połączone tabele lub ich części
Wskazówka. Jeżeli dołączane tabele są małe, zalecane jest stosowanie przekształcenia Dołącz
zapytania jako nowe zamiast Dołącz zapytania. Dzięki temu później można łatwo zmieniać
składniki wynikowego zapytania.
84
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 3.. ŁĄCZENIE DANYCH Z KILKU ŹRÓDEŁ
Aby zobaczyć zależności pomiędzy zapytaniami, otwórz utworzony w części I skoroszyt lub
raport i uruchom edytor Power Query. Następnie w kolumnie Widok kliknij ikonę Zależności
zapytań. Pojawi się okno o tej samej nazwie, pokazane na rysunku 3.3.
W oknie widoczny jest diagram przepływów, które rozpoczynają się od plików zawierających
katalogi rowerów i akcesoriów, następnie przechodzą przez zapytania Rowery i Akcesoria i kończą się
na zapytaniu Produkty zawierającym połączone tabele. Diagram ten przydaje się w skomplikowanych
operacjach przygotowywania danych.
Teraz, gdy wiesz już, jak wyświetlać zależności pomiędzy zapytaniami, omówię odwołania
umożliwiające tworzenie zaawansowanych, uniwersalnych przekształceń; z ich pomocą będziesz
mógł się mierzyć z rzeczywistymi wyzwaniami. Odwołania można użyć do utworzenia nowego
zapytania, którego źródło, czyli dane wejściowe, jest wynikiem innego zapytania.
W części I ćwiczenia 3.2 załadowałeś tabele Rowery i Akcesoria jako zapytania i przy użyciu
przekształcenia Dołącz zapytania jako nowe utworzyłeś nowe zapytanie zawierające połączone
dane. Inną metodą uzyskania tego samego efektu jest zastosowanie kombinacji przekształceń
Dołącz zapytania i Odwołanie.
1. Wykonaj kroki od 1. do 8. z ćwiczenia 3.1, aby załadować do edytora Power Query tabele
Rowery i Akcesoria.
2. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Akcesoria i wybierz
polecenie Odwołanie. Zwróć uwagę, że pojawiło się nowe zapytanie Akcesoria (2) oparte
na wyniku zapytania Akcesoria.
85
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zobacz też. W rozdziale 1., „Wprowadzenie do Power Query”, dowiedziałeś się o kodzie
w języku M, który jest tworzony przez Power Query podczas wykonywania przekształceń.
Każdy krok jest zamieniany na jeden wiersz kodu, który można zobaczyć w pasku formuły.
W karcie Widok zaznacz opcję Pasek formuły, a następnie kliknij w panelu Zastosowane kroki
pozycję Źródło. W pasku formuły pojawi się następujący kod:
= Akcesoria
Kod ten reprezentuje wyjście zapytania Akcesoria, stanowiące wejście dla nowego zapytania.
Jak się domyślasz, kod ten został utworzony w wyniku użycia przekształcenia Odwołanie
z zapytaniem Akcesoria.
W karcie Strona główna kliknij ikonę Edytor zaawansowany. Pojawi się następujące wyrażenie w języku M:
let
Źródło = Akcesoria,
#"Dołączone zapytanie" = Table.Combine({Źródło, Rowery})
in
#"Dołączone zapytanie"
W rozdziale 9., „Wprowadzenie do języka M”, opisałem dokładnie składnię tego języka i wyjaśniłem
znaczenie słów kluczowych let oraz in. Na razie jednak skupmy się na dwóch wierszach znajdujących
się pomiędzy tymi słowami.
W pierwszym z tych dwóch wierszy wynik zapytania Akcesoria jest przypisywany do obiektu
Źródło. (Zauważ, że obiekt ten jest również pierwszym krokiem w panelu Zastosowane kroki).
W drugim wierszu znajduje się funkcja Table.Combine łącząca zapytania Akcesoria i Rowery.
(Zapewne zauważyłeś, że zapytania te są umieszczone w nawiasach klamrowych, których
znaczenie jest opisane w następnym punkcie. Za pomocą takich nawiasów definiuje się listy).
Natomiast kod wygenerowany w części I ćwiczenia 3.2, gdzie wykorzystane było przekształcenie
Dołącz zapytania jako nowe, wygląda tak:
let
Źródło = Table.Combine({Akcesoria, Rowery})
in
Źródło
Jeżeli dokładnie przyjrzysz się obu kodom, zauważysz, że zwracają one ten sam wynik, tj.
połączone zapytania Akcesoria i Rowery.
A zatem kombinacja przekształceń Odwołanie i Dołącz zapytania daje ten sam wynik, co
przekształcenie Dołącz zapytania jako nowe. To drugie powoduje utworzenie krótszego kodu
w tylko jednym kroku, a nie w dwóch, ale w rzeczywistości pomiędzy obydwoma sposobami nie
ma istotnej różnicy. Dlaczego więc zajmujemy się przekształceniem Odwołanie? Jak się przekonasz
w następnych rozdziałach, bardzo się ono przydaje podczas tworzenia ciągów przekształceń lub
odgałęzień tego samego przekształcenia bazowego.
86
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 3.. ŁĄCZENIE DANYCH Z KILKU ŹRÓDEŁ
Teraz, mając połączone zapytania Rowery, Akcesoria i Komponenty, możesz się przekonać, jak
łatwo wykonuje się to samo przekształcenie w pasku formuły. Gdy zaznaczysz zapytanie Produkty,
pojawi się następująca formuła:
= Table.Combine({Komponenty, Rowery, Akcesoria})
87
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 3.4. W oknie Dołączanie po wybraniu opcji Co najmniej trzy tabele można wybierać kilka
zapytań do połączenia
Czy wygląda znajomo? Wcześniej, gdy łączyłeś dwie tabele, formuła wyglądała tak:
= Table.Combine({Akcesoria, Rowery})
Jak widać, do łączenia zapytań służy funkcja Table.Combine, której argumentem jest lista zapytań
zamknięta w nawiasach klamrowych.
Teraz, gdy wiesz już, jak połączyć trzy tabele, możesz dołączyć do nich czwartą, ale tym razem
zrobisz to wyłącznie za pomocą kodu. Nie zamykaj utworzonego skoroszytu ani raportu, ponieważ
użyjesz go w następnym ćwiczeniu.
Ćwiczenie 3.2.
Część IV. Rowery + Akcesoria + Komponenty + Ubrania
Wróćmy do naszej firmy. Po rozszerzeniu asortymentu produktów prezes zadecydował
o skonsolidowaniu działu produkującego ubrania z głównym oddziałem. Dostałeś czwartą tabelę
zawierającą katalog ubrań. W tej części ćwiczenia dowiesz się, jak połączyć wszystkie cztery tabele,
ale tym razem nie będziesz korzystał z okna Dołączanie, tylko użyjesz języka M.
88
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 3.. ŁĄCZENIE DANYCH Z KILKU ŹRÓDEŁ
Otwórz skoroszyt lub raport, który utworzyłeś w części III ćwiczenia 3.2, i zaimportuj do niego
plik R03-02 - ubrania.xlsx. (W ćwiczeniu 3.1 opisane są kroki importowania tabel Rowery i Akcesoria.
W podobny sposób zaimportuj tabelę Ubrania).
Zaznacz zapytanie Produkty i przyjrzyj się paskowi formuły. Znajdziesz w nim następujący kod:
= Table.Combine({Komponenty, Rowery, Akcesoria})
Umieść w dowolnym miejscu listy wewnątrz nawiasów klamrowych zapytanie Ubrania. Upewnij się,
że wszystkie są oddzielone przecinkami. Na koniec naciśnij Enter. Formuła powinna wyglądać tak:
= Table.Combine({Ubrania, Komponenty, Rowery, Akcesoria})
lub:
= Table.Combine({Komponenty, Ubrania, Rowery, Akcesoria})
lub:
= Table.Combine({Komponenty, Rowery, Ubrania, Akcesoria})
lub:
= Table.Combine({Komponenty, Rowery, Akcesoria, Ubrania})
Aby sprawdzić, czy funkcja Table.Combine działa poprawnie, kliknij ikonę filtru w kolumnie
Kategoria. W panelu, który się pojawi, powinny być widoczne cztery wartości: Akcesoria,
Komponenty, Rowery i Ubrania. Filtrowanie wartości jest prostym i praktycznym sposobem
weryfikowania poprawności przekształceń.
Teraz, po dołączeniu tabeli Ubrania do Produkty, możesz zająć się innym przypadkiem,
czyli łączeniem tabel na szerszą skalę.
89
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Co miesiąc w folderze pojawia się nowy skoroszyt, a Twoim zadaniem jest aktualizowanie
raportu, czyli dodanie nowych danych. Przyjmijmy, że utworzyłeś już raport, do którego
zaimportowałeś każdą tabelę z osobna i wszystkie połączyłeś, wykorzystując poznaną wcześniej
technikę. Gdy pojawi się nowy plik, np. Maj2019.xlsx, powinieneś wykonać sekwencję operacji
modyfikujących zapytanie: zaimportować plik jako nowe zapytanie, np. Maj2019, a następnie
zmodyfikować w panelu Zastosowane kroki krok łączący wszystkie tabele. Formuła wyglądałaby
wtedy tak (zmiany wyróżnione są pogrubioną czcionką):
= Table.Combine({Styczeń2019, Luty2019, Marzec2019, Kwiecień2019, Maj2019})
Szybko okaże się, że jest to bardzo żmudna metoda, ponieważ należy ją stosować co miesiąc.
Czy nie lepsze byłoby zapytanie, które automatycznie dołączałoby kolejne skoroszyty pojawiające się
w folderze i którego nie trzeba by w ogóle modyfikować, a raport wystarczyłoby po prostu odświeżać?
Przy użyciu opcji importowania skoroszytów z folderu jest to możliwe.
RYSUNEK 3.5. W tym przykładzie produkty firmy Fabryka Przygód są zapisane w osobnych skoroszytach
Excela w udostępnionym folderze
90
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 3.. ŁĄCZENIE DANYCH Z KILKU ŹRÓDEŁ
3. W oknie, które się pojawi (o takiej samej nazwie jak nazwa folderu), kliknij przycisk Połącz,
a następnie Połącz i edytuj.
Wskazówka. Nie zaleca się używać polecenia Połącz i załaduj, które łączy wszystkie pliki
i ładuje je do raportu bez uprzedniej edycji. Jeżeli nie wiadomo, które pliki należy wybrać, dobrą
praktyką jest kliknięcie w kroku 3. polecenia Przekształć dane. Otworzy się edytor Power Query
z podglądem folderu, w którym można zastosować filtry wybierające pliki do zaimportowania.
Jeżeli np. w folderze oprócz skoroszytów znajdują się inne pliki, można przefiltrować je według
rozszerzenia .xlsx, gdyż wtedy nie zaimportuje się niewłaściwych plików. Odfiltrowane pliki
można połączyć, klikając ikonę Połącz pliki w nagłówku kolumny Content (zawartość).
4. W oknie Połącz pliki zaznacz Arkusz1, tak jak na rysunku 3.6, i kliknij OK.
RYSUNEK 3.6. W oknie Połącz pliki można wskazać arkusz lub tabelę do połączenia; ze skoroszytów Excela
zapisanych w danym folderze zostaną załadowane wszystkie arkusze o wskazanej nazwie
Uwaga. Okno Połącz pliki jest odpowiednikiem okna Nawigator pojawiającego się podczas
importowania pojedynczego skoroszytu Excela. W oknie Nawigator wybiera się arkusz lub
tabelę do edycji albo załadowania do raportu, natomiast w oknie Połącz pliki wybiera się arkusz
lub tabelę ze wszystkich plików zapisanych we wskazanym folderze. Wybór wykonany na kilku
skoroszytach jest następnie stosowany w odniesieniu do wszystkich plików, jakie się pojawią
w folderze.
91
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Czasami kolumna Source.Name zawiera istotne dane. W opisanym przykładzie jest to rok
wprowadzenia produktu do sprzedaży. Jeżeli ta informacja jest potrzebna w raporcie, można ją z tej
kolumny wyodrębnić. Informacja kontekstowa zazwyczaj nie jest dostępna w osobnej kolumnie,
tylko w nazwie pliku. Na szczęście, z wykorzystaniem kolumny Source.Name ją pozyskać.
Aby wyodrębnić rok 2017 z nazwy R03-03 - 2017.xlsx, możesz zastosować jedno z dwóch
przekształceń. Podobny proces został szczegółowo opisany w rozdziale 2., dlatego tutaj wyróżnione
są tylko jego najważniejsze elementy. Nazwa pliku zawiera prefiks R03-03- oraz sufiks .xlsx.
Pomiędzy nimi znajduje się oznaczenie roku, które można wyodrębnić na dwa sposoby.
Zastąpić prefiks R03-03- i sufiks .xlsx pustymi ciągami znaków. W tym celu należy użyć
przekształcenia Zamień wartości opisanego w rozdziale 2.
Podzielić kolumnę Source.Name po dziewiątym znaku, licząc od początku ciągu (używając
przekształcenia Podziel kolumny według liczby znaków), a następnie dzieląc nową kolumnę
według kropki lub czwartego znaku od końca ciągu. Na koniec należy usunąć pierwszą
i trzecią kolumnę, aby pozostała tylko druga zawierająca wyodrębnione informacje o roku.
Teraz możesz załadować połączone tabele do skoroszytu Excela lub raportu Power BI Desktop.
Gotowe rozwiązanie jest zapisane w plikach R03-03 - rozwiązanie.xlsx i R03-03 - rozwiązanie.pbix.
92
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 3.. ŁĄCZENIE DANYCH Z KILKU ŹRÓDEŁ
zachowując informacje o roku, tak jak na rysunku 3.7? Czy można to zrobić tak, aby nie trzeba było
modyfikować zapytania za każdym razem, gdy zostanie utworzony nowy arkusz? Jak można
sprawić, aby produkty pojawiające się w kolejnych latach były automatycznie dołączane do raportu
po kliknięciu polecenia Odśwież?
RYSUNEK 3.7. Twoim zadaniem jest połączenie produktów zapisanych w osobnych arkuszach z zachowaniem
informacji o roku wprowadzenia do sprzedaży, bez konieczności modyfikowania zapytania w kolejnych latach
Uwaga. W oknie Nawigator nie zaznaczaj żadnego z arkuszy. Możesz wprawdzie tak zrobić
i dołączać kolejne arkusze, tak jak w ćwiczeniu 3.1, ale metoda ta w dłużnym okresie czasu
okaże się niewłaściwa. Za każdym razem, gdy w skoroszycie pojawi się nowy arkusz, będziesz
musiał modyfikować zapytanie. Dlatego w kroku 3. zaznacz cały skoroszyt, gdyż wtedy
utworzysz właściwe zapytanie.
93
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Wskazówka. Jeżeli skoroszyt zawiera ukryte arkusze, można je wykluczyć przed połączeniem
w kroku 5. Jest to dobry moment na zastosowanie niezbędnych filtrów. Przykładowo po
zastosowaniu w kolumnie Hidden filtru zawierającego wartość FALSE zostaną wykluczone
ukryte arkusze.
Uwaga. Jeżeli każdy skoroszyt zawiera tabelę danych, wtedy w kroku 6. możesz rozwinąć tabelę
z poprawnymi nazwami kolumn zamiast Column1, Column2 itd. (Aby w Excelu zamienić
zakres komórek na tabelę, zaznacz go lub kliknij komórkę wewnątrz zakresu, a następnie
naciśnij klawisze Ctrl+T).
94
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 3.. ŁĄCZENIE DANYCH Z KILKU ŹRÓDEŁ
Uwaga. Kroki od 7. do 9. w dłuższym okresie czasu mogą przestać działać poprawnie. Za chwilę
dowiesz się dlaczego i jak temu zapobiec.
Teraz możesz załadować połączoną tabelę do skoroszytu Excela lub raportu Power BI
Desktop. Pomyślnie połączyłeś trzy arkusze i z nazwy każdego z nich wyodrębniłeś rok
wprowadzenia produktów do sprzedaży. Pora więc na przetestowanie skalowalności tego
rozwiązania i sprawdzenie, czy raport poprawnie się odświeży, gdy zostanie dodany
czwarty arkusz o nazwie 2018.
10. Nie zamykaj utworzonego skoroszytu ani raportu. Otwórz plik R03-04 - lata w osobnych
arkuszach.xlsx, utwórz kopię arkusza 2017, zmień jej nazwę na 2018 i zapisz.
11. Odśwież zapytanie Produkty w skoroszycie lub raporcie i sprawdź, czy pojawiły się
zduplikowane wiersze z wartością 2018 w kolumnie Rok. To działa!
Dodaj arkusz o nazwie 2014 zawierający dane historyczne. W tym celu utwórz kopię jednego
z istniejących arkuszy i umieść jego zakładkę na początku listy. Teraz, gdy pierwszy arkusz
nazywa się 2014, a nie 2015, raport nie odświeży się i pojawi się komunikat [Expression.Error]
Nie można znaleźć kolumny „2015” w tabeli.
12. Aby doraźnie rozwiązać problem, otwórz edytor Power Query, zaznacz zapytanie Produkty
i w panelu Zastosowane kroki kliknij krok Zmieniono typ. W pasku formuły pojawi się
następujący kod:
= Table.TransformColumnTypes(#"Nagłówki o podwyższonym poziomie",{{"2015", Int64.Type},
{"Nazwa", type text}, {"Kod produktu", type text}, {"Kolor", type text}, {"Koszt",
type any}, {"Cena", type any}, {"Wielkość", type text}, {"Waga", type any},
{"Kategoria", type text}, {"Podkategoria", type text}})
95
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zobacz też. Zwróć uwagę, że w kroku 8. niemal wpadłeś w trzecią pułapkę przeszukiwania
filtru polegającą na użyciu listy wartości zamiast wybrania polecenia Filtry tekstu i jawnego
zdefiniowania warunku. W rozdziale 10. poznasz dokładniej tę i inne podobne pułapki.
96
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 3.. ŁĄCZENIE DANYCH Z KILKU ŹRÓDEŁ
Podsumowanie
W tym rozdziale poznałeś jedno z najczęściej stosowanych przekształceń w Power Query. Możliwość
łączenia tabel o wspólnym formacie upraszcza analizę i pozwala uniknąć żmudnego przetwarzania
danych umieszczonych w różnych miejscach.
Na początku rozdziału zostały opisane proste przekształcenia Dołącz zapytania i Dołącz
zapytania jako nowe, umożliwiające łączenie dwóch lub więcej tabel. Przedstawione zostały różnice
pomiędzy obiema metodami i omówiona rola przekształcenia Odwołanie i okna Zależności zapytań
w weryfikowaniu poprawności ciągu przekształceń.
Dalej zajęliśmy się praktycznymi przypadkami, w których liczba i nazwy tabel nie są zawczasu
znane. Dowiedziałeś się, jak importować pliki zapisane w folderze, łączyć zawarte w nich tabele
w jedną i zachowywać informację kontekstową zawartą w nazwach plików (kolumna Source.Name).
Poznałeś też przekształcenie do łączenia tabel zapisanych w różnych arkuszach tego samego
skoroszytu z zachowaniem ich nazw. Korzystając z tego przekształcenia, można łączyć nowe arkusze
bez konieczności modyfikowania zapytania.
97
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
98
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4.
W rozdziale 3., „Łączenie danych z kilku źródeł”, dowiedziałeś się, jak łączyć tabele, aby uprościć
sobie analizę danych i tworzenie raportów. Często zdarza się, że tabele mają różne formaty lub
stopniowo zmieniają się w wyniku modyfikowania ich przez różnych użytkowników nieświadomych
potencjalnego zagrożenia, na jakie narażają w ten sposób tworzenie raportów.
Ten rozdział jest poświęcony poważnemu zadaniu: łączeniu niezgodnych tabel. Aby uświadomić
sobie skalę problemu, wyobraźmy sobie, że tabele są podobne do skarpetek. Operacje, które
wykonywałeś w rozdziale 3., były podobne do zakładania skarpetek. W tym rozdziale dowiesz się,
jak sobie radzić ze skarpetkami, które są nie do pary. Na pewno zgodzisz się, że jeżeli skarpetki są
takie same, noszenie ich jest przyjemnością. Jednak prawdziwym koszmarem jest zakładanie
różnych skarpetek. Czasami znalezienie w stosie ubrań dwóch jednakowych skarpetek okazuje się
niemożliwością. Czy można połączyć ekstrema i założyć skarpetki nie do pary? W praktyce, jeżeli
mamy na myśli tabele, jest to możliwe. Ten rozdział opisuje, jak za pomocą Power Query radzić
sobie z takimi tabelami, choćby były nie wiadomo jak niezgodnie.
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zrozumiałe jest, że tabele przeznaczone do połączenia muszą mieć wspólny format. Jest to
jednak idealistyczne założenie, rzadko sprawdzające się w praktyce. Często będziesz miał do
czynienia z różnymi formatami tabel lub — co gorsza — z formatami, które w miarę upływu czasu
będą różniły się coraz bardziej. W tym podrozdziale opisane są najczęściej spotykane przypadki
niezgodności tabel i sposoby oceniania ich skutków.
100
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
RYSUNEK 4.1. Są dwa symptomy niezgodności tabel: podzielone dane i brakujące wartości;
oba mogą skutkować błędnymi raportami
Uwaga. Zapewne zauważyłeś, że połączona tabela nie zawiera informacji o kategorii produktu,
zawartej w nazwie pliku i arkusza. W rozdziale 5., „Zachowywanie kontekstu”, dowiesz się, jak
zachowywać konteksty tabel.
101
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 4.2. Skoroszyty z produktami firmy Fabryka Przygód zawierają kolumny o niezgodnych nazwach
102
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
Uwaga. W liście Przykładowy plik można wybrać skoroszyt i zastosować jego format do
wszystkich plików w folderze. Efektem wyboru są m.in. nazwy kolumn w wynikowej tabeli.
Ponieważ każda tabela zawiera kolumny o różnych nazwach, wkrótce zobaczysz symptom
brakujących wartości i jego skutki.
7. W oknie edytora przewiń zawartość podglądu, aż zawartość kolumny Source.Name zmieni się
z R04-02 - akcesoria.xlsx na R04-02 - komponenty.xlsx. Kolumny Produkt, ID, KosztStandardowy
i CenaListowa będą zawierały wartości null, tak jak na rysunku 4.3, które przełożą się na puste
wartości w raporcie.
RYSUNEK 4.3. Symptom brakujących wartości pojawia się podczas importowania z folderu wielu tabel
z niezgodnymi nazwami kolumn
Zanim rozwiążesz problem brakujących wartości, otwórz panel Zapytania i zaznacz zapytanie
Przekształć przykładowy plik, które w tej książce jest nazywane zapytaniem przykładowym.
Zapytanie to zostało utworzone podczas łączenia plików zapisanych w folderze. Gdy je zaznaczysz,
zauważysz, że w panelu podglądu dane akcesoriów są pokazywane poprawnie. Rozwiązywanie
problemu brakujących wartości należy zawsze zaczynać od zapytania przykładowego.
103
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Wskazówka. Power Query podczas importowania plików z folderu tworzy przykładową funkcję,
przykładowe zapytanie, plik zapytania i parametr. Obiekty te są wykorzystywane do łączenia
kilku plików na podstawie wybranych danych. Główne przekształcenie każdego pliku jest
zaimplementowane w funkcji. Przekształcenia poszczególnych plików dostosowuje się poprzez
wprowadzanie zmian w przykładowym zapytaniu. Zmiany te są uwzględniane w funkcji
i wprowadzane we wszystkich plikach. Podczas łączenia plików zapisanych w folderze sprawdzaj,
jakie zmiany wprowadza zapytanie Przekształć przykładowy plik we wszystkich plikach przed
ich połączeniem.
104
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
105
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. Na tym etapie nie musisz w pełni rozumieć składni opisywanych formuł. Ten temat
będzie opisany w rozdziale 9., „Wprowadzenie do języka M”. Na razie musisz jedynie wiedzieć,
że funkcje Text.Proper i Replacer.ReplaceText służą do przekształcania tekstu. Obie można
stosować wewnątrz funkcji Table.TransformColumnNames. W poprzednim przykładzie funkcja
Text.Proper zamieniała pierwsze litery każdego słowa na wielkie, a Replacer.ReplaceText
zamieniała wszystkie znaki podane w drugim argumencie na znaki wskazane w trzecim argumencie.
106
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
RYSUNEK 4.4. Za pomocą przycisku fx można utworzyć niestandardowy krok i zdefiniować formułę nowego
przekształcenia modyfikującego poprzedni krok
9. Naciśnij Enter. Zwróć uwagę, że teraz nazwy wszystkich kolumn składają się wyłącznie
z małych liter. Gdybyś chciał zamienić pierwsze litery wszystkich słów na wielkie,
powinieneś użyć w powyższej formule funkcji Text.Proper zamiast Text.Lower.
Uwaga. Jeśli nawet pracujesz na tabelach, których kolumny mają zgodne nazwy i są ułożone we
właściwej kolejności, powinieneś stosować powyższe formuły, aby zapobiec sytuacji, w której
autor tabeli postanowi zmienić wielkość liter na małe lub wielkie albo ich kombinację.
10. Aby zamienić znaki podkreślenia spacjami, kliknij ponownie w pasku formuły przycisk fx.
11. Zwróć uwagę, że w panelu Zastosowane kroki pojawił się nowy krok Niestandardowe2,
a w pasku formuły następujący kod:
= Niestandardowe1
Użyj zmiennej Niestandardowe1 z funkcjami Table.TransformColumnNames
i Replacer.ReplaceText, aby zamienić znaki podkreślenia na spacje. W tym celu
wpisz następującą formułę:
= Table.TransformColumnNames(Niestandardowe1, each Replacer.ReplaceText(_,"_", " "))
12. Naciśnij Enter. Zwróć uwagę, że w nazwach kolumn znajdują się spacje, a nie znaki
podkreślenia. Teraz nagłówki są bardziej czytelne.
13. Zaznacz zapytanie R04-03 - produkty i w panelu Zastosowane kroki usuń ostatni krok
Zmieniono typ. Teraz, kiedy wszystkie kolumny zawierają w nagłówkach spacje zamiast
znaków podkreślenia, wszystkie tabele zostały połączone poprawnie i zniknął symptom
brakujących wartości.
Gotowe rozwiązanie jest zapisane w plikach R04-03 - rozwiązanie.xlsx i R04-03 - rozwiązanie.pbix.
107
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Tabela konwersji
W ćwiczeniu 4.3 zastosowałeś proste przekształcenie nazw niezgodnych kolumn i zastąpiłeś znaki
podkreślenia spacjami. Niestety, w praktyce proste przekształcenia nie wystarczają.
Aby zademonstrować taki przypadek, wróćmy do naszej firmy Fabryka Przygód i danych
użytych w ćwiczeniu 4.2. Tym razem dodatkowo będą zamienione miejscami dwie kolumny,
tak jak w ćwiczeniu 4.3, zatem opisane techniki nie będą działać.
W opisanej niżej serii ćwiczeń wykorzystasz dane zapisane w folderze C:\Dane\R04\R04-04 - produkty.
Każdy z menedżerów inaczej nazwał kolumnę zawierającą identyfikator produktu: ID,
Kod_produktu, Nr_produktu i Kod produktu. Nie możesz więc ujednolicić nagłówków za pomocą
prostych przekształceń. Zamiast tego utworzysz tabelę konwersji zawierającą oryginalne
i ujednolicone nazwy kolumn. Rysunek 4.5 przedstawia niezgodne kolumny i ich reprezentację
w tabeli konwersji. Kolumna Źródło zawiera niezgodną nazwę, która będzie zastąpiona ujednoliconą
nazwą w kolumnie Cel.
RYSUNEK 4.5. Tabela konwersji zawiera powiązane niezgodne i ujednolicone nazwy kolumn
Tworzenie tabeli konwersji może być czasochłonnym zajęciem. Tabela nie musi jednak zawierać
wszystkich nazw. Przykładowo na rysunku 4.5 nie ma pary Nazwa Nazwa, ponieważ nie jest
potrzebna. Tabela powinna zawierać tylko pary niezgodnych nazw. Jeżeli są setki kolumn, wtedy
w tabeli konwersji należy umieścić tylko różniące się nazwy.
Wskazówka. Jeżeli tabela konwersji jest tabelą zewnętrzną zapisaną w skoroszycie Excela,
można najpierw umieścić w niej kilka niezgodnych nazw kolumn i stopniowo ją uzupełniać
w miarę potrzeb. Po utworzeniu zapytania wykorzystującego tabelę konwersji nie potrzeba go
modyfikować w celu dalszego ujednolicania kolumn. Zamiast tego wystarczy odpowiednio
zmodyfikować tabelę konwersji i odświeżyć raport.
Teraz, gdy wiesz już, jak tworzy się tabelę konwersji, nauczysz się ją wykorzystywać do
ujednolicania niezgodnych kolumn. Użyjesz do tego celu przekształcenia Scal zapytania dostępnego
w karcie Strona główna. Jak pamiętasz z rozdziału 2, „Podstawowe operacje przygotowywania
danych”, przekształcenie to służy do łączenia kilku tabel na podstawie takich samych wartości
zapisanych w określonych kolumnach.
Zanim dowiesz się, jak używać przekształcenia Scal zapytania z tabelą konwersji, zatrzymajmy się
na chwilę, aby omówić jeden z największych problemów z ujednolicaniem kolumn. Pod koniec tego
rozdziału dowiesz się, jak zastępować nazwy kolumn za pomocą funkcji Table.TransformColumnNames
108
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
opisanej w ćwiczeniu 4.3, funkcji niestandardowej oraz tabeli konwersji. Ponieważ technika ta
wymaga głębszej znajomości języka M, wcześniej poznasz trzy sposoby wykorzystujące jedynie
interfejs edytora, bez konieczności stosowania zaawansowanych formuł w języku M.
Interfejs edytora Power Query jest wyposażony w wiele przekształceń operujących na kolumnach,
ale nie na ich nagłówkach. Ćwiczenia 4.4, 4.5 i 4.6 skupiają się na ujednolicaniu nazw kolumn przy
użyciu trzech technik wykorzystujących interfejs edytora. Wymagana jest w nich minimalna znajomość
języka M. W tych ćwiczeniach nie jest wykorzystywana funkcja Table.TransformColumnNames,
ponieważ wymagałaby ona utworzenia niestandardowej funkcji. Ćwiczenia te demonstrują, jak
zamiast tego użyć funkcjonalności dostępnych w interfejsie edytora.
Wskazówka. Jeżeli poczułeś się pewnie w języku M, spodoba Ci się czwarta technika, czekająca
na Ciebie pod koniec rozdziału. Prawdopodobnie uznasz, że ćwiczenie 4.7 jest najlepszym
sposobem łączenia niezgodnych tabel i ujednolicania kolumn. Warto jednak, abyś wykonał
poniższe ćwiczenia, dzięki którym docenisz potęgę dostępnych funkcjonalności, jak również
poznasz ich zalety i wady. Ponadto mogą się one przydać w innych sytuacjach.
109
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
4. W oknie, które się pojawi (o takiej samej nazwie jak nazwa folderu), kliknij przycisk Połącz,
a następnie Połącz i edytuj.
5. W oknie Połącz pliki wybierz w liście Przykładowy plik dowolny skoroszyt, zaznacz Arkusz1
i kliknij OK.
6. W panelu Zapytania kliknij zapytanie Przekształć przykładowy plik i zmień jego nazwę na
Przykładowe produkty. Jak pamiętasz, jest to przykładowe zapytanie, a więc wprowadzone
w nim zmiany będą dotyczyły również zapytania R04-04 - produkty.
7. Zmień nazwę zapytania R04-04 - produkty na Dołączone produkty. Zapisz skoroszyt lub
raport, a następnie utwórz jego trzy kopie, które wykorzystasz w ćwiczeniach 4.5, 4.6 i 4.7.
Transpozycja
Pierwsza technika ujednolicania nazw kolumn polega na użyciu przekształcenia Transponuj
dostępnego w kolumnie Przekształć. W jego efekcie każda komórka kolumny X i wiersza Y jest
zamieniana na kolumnę Y i wiersz X.
W edytorze Power Query o wiele łatwiej manipulować nazwami kolumn, jeżeli są one ułożone
pionowo w jednej kolumnie. W tym momencie przydaje się przekształcenie Transponuj.
Jednak przy próbie transpozycji tabeli przekonasz się, że nie są zachowywane oryginalne nazwy
kolumn. Aby tego uniknąć, musisz anulować użycie pierwszego wiersza tabeli jako nazw kolumn.
W tym celu otwórz skoroszyt lub raport, który utworzyłeś w krokach od 1. do 7., i uruchom edytor
Power Query. W panelu Zapytania zaznacz zapytanie Przykładowe produkty i wykonaj
następujące kroki.
8. W panelu Zastosowane kroki usuń krok Nagłówki o podwyższonym poziomie.
Nagłówki kolumn zostaną umieszczone w pierwszym wierszu tabeli.
9. W karcie Przekształć kliknij ikonę Transponuj. Teraz kolumna Column1 zawiera nazwy
kolumn, które trzeba ujednolicić.
Sekwencja scaleń
Dotarłeś do punktu, w którym scalisz tabelę konwersji z przetransponowaną tabelą i za jednym
razem zamienisz niezgodne nazwy kolumn na docelowe. Wykonaj następujące kroki.
10. Zaznacz zapytanie Przykładowe produkty, a następnie w karcie Strona główna kliknij ikonę
Scal zapytania.
11. W oknie Scalanie, które się pojawi, kliknij w tabeli Przykładowe produkty kolumnę Column1,
a następnie z rozwijanej listy pod tabelą wybierz Konwersja_nagłówków (patrz rysunek 4.6).
W tabeli niżej zaznacz kolumnę Źródło.
12. Sprawdź, czy w rozwijanej liście Rodzaj sprzężenia jest wybrana opcja Lewe zewnętrzne
(wszystkie z prawej, pasujące z drugiej), a następnie kliknij OK.
13. W ostatniej kolumnie, Konwersja_nagłówków, zawierającej obiekty Table, kliknij przycisk po
prawej stronie nagłówka lub zaznacz całą kolumnę i w karcie Przekształć kliknij ikonę Rozwiń.
14. Aby wyodrębnić kolumnę Cel z tabeli Konwersja_nagłówków, usuń w panelu, który się pojawi,
zaznaczenie Źródło i kliknij OK. Pojawi się nowa kolumna o nazwie Konwersja_nagłówków.Cel.
Kolumna ta zawiera wartość z kolumny Cel, jeżeli wartość w kolumnie Column1 jest taka sama
jak w kolumnie Źródło tabeli konwersji, lub jest to wartość null w przeciwnym przypadku.
W tym drugim przypadku zostaną użyte oryginalne nazwy kolumn.
110
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
RYSUNEK 4.6. Tabelę konwersji i przekształcenie „Scal zapytania” można wykorzystać do ujednolicenia
niezgodnych nazw kolumn
111
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 4.7. W oknie „Dodawanie kolumny warunkowej” można utworzyć nową kolumnę zawierającą wartości
pochodzące z różnych kolumn w zależności od spełnienia zadanych warunków. W tym przypadku nowa
kolumna będzie zawierała nazwy ujednolicone lub oryginalne, jeżeli nie zostaną znalezione w tabeli konwersji
Wskazówka. Jeżeli kolumn jest dużo i musisz jedną z nich przenieść na początek tabeli, wtedy
zamiast przeciągać, zaznacz ją, a następnie kliknij w karcie Przekształć ikonę Przenieś i Na początek.
Ewentualnie kliknij prawym przyciskiem myszy nagłówek kolumny i z podręcznego menu
wybierz polecenia Przenieś i Na początek.
Uwaga. Zmienianie kolejności kolumn tabeli jest dość ryzykowną operacją. W rozdziale 10.,
„Od złych do dobrych zapytań”, dowiesz się, jak unikać związanych z tą operacją problemów.
Podczas przenoszenia kolumny formuła odwołująca się do kolumn tworzy podatne za zakłócenia
zapytanie, które może uniemożliwić odświeżenie raportu, jeżeli jakiejś kolumny zabraknie lub
zostanie zmieniona jej nazwa.
Powtórna transpozycja
W kroku 9. przetransponowałeś tabelę i umieściłeś nagłówki w kolumnie Column1. Przy użyciu
transpozycji mogłeś skonsolidować oryginalne nagłówki w kolumnie Column1 z nazwami w kolumnie
Źródło w tabeli konwersji. Następnie za pomocą kolumny warunkowej zamieniłeś niezgodne nagłówki
na nazwy z kolumny Cel tabeli konwersji. Teraz kolumna Column1 zawiera ujednolicone wartości,
których można użyć jako nazw nagłówków. Czas z powrotem przetransponować tabelę i odtworzyć
nagłówki z kolumny Column1. Wykonaj poniższe kroki.
18. W karcie Przekształć kliknij ikonę Transponuj. Nazwy kolumn znajdą się w pierwszym
wierszu tabeli, dlatego musisz je przenieść z powrotem do nagłówków.
19. W karcie Przekształć kliknij ikonę Użyj pierwszego wiersza jako nagłówków.
20. W panelu Zapytania zaznacz zapytanie Dołączone produkty. Jeżeli w panelu podglądu pojawi
się błąd, usuń z panelu Zastosowane kroki krok Zmieniono typ. Zadanie wykonane.
112
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
Zobacz też. W rozdziale 6., „Rozdzielanie tabel”, opisano wiele różnych zastosowań
przekształcenia Anuluj przestawienie, natomiast rozdział 7., „Zaawansowane metody
przestawiania tabel i anulowania przestawień”, zawiera praktyczne przykłady użycia
przekształcenia Tabela przestawna.
Zobacz też. Przekształcenie Kolumna przestawna jest bardzo przydatne. W rozdziale 7. dowiesz
się, jak można je wykorzystywać do przetwarzania tabel o nieuporządkowanej strukturze.
113
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
114
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
Technika pokazana na rysunku 4.8 jest prosta w implementacji, jeżeli trzeba połączyć kilka tabel
za pomocą przekształcenia Dołącz zapytania. Jednak komplikuje się w przypadku importu plików
z folderu, ponieważ wymaga zastosowania niestandardowych funkcji. Tutaj została pokazana
jedynie w celach demonstracyjnych. Możesz ją stosować wtedy, gdy z powodów wydajnościowych
nie będziesz mógł wykorzystać technik opisanych w ćwiczeniach 4.4 i 4.5 lub nie chcesz używać
języka M wykorzystanego w ćwiczeniu 4.7.
1. Otwórz kopię skoroszytu lub raportu, którą utworzyłeś w ćwiczeniu 4.4, w krokach od 1.
do 7., a następnie uruchom edytor Power Query.
2. W panelu Zapytania zaznacz zapytanie Przykładowe produkty, a następnie w panelu
Zastosowane kroki usuń krok Nagłówki o podwyższonym poziomie. W ten sposób nazwy
kolumn zostaną umieszczone w pierwszym wierszu tabeli.
3. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Przykładowe produkty,
a następnie wybierz polecenie Duplikuj. Zaznacz zapytanie Przykładowe produkty (2),
w kolumnie Strona główna kliknij ikonę Zachowaj wiersze i polecenie Zachowywanie
pierwszych wierszy. W oknie, które się pojawi, wpisz w polu Liczba wierszy liczbę 1
i kliknij OK.
Uwaga. Power Query podczas łączenia plików zapisanych w folderze tworzy funkcję zapytania,
przykładowe zapytanie, zapytanie pliku i parametr. Obiekty te są wykorzystywane do łączenia
kilku plików na podstawie wskazanego pliku. Podstawowe przekształcenie każdego pliku jest
zaimplementowane w funkcji. W celu dostosowania przekształcenia indywidualnie do każdego
pliku wprowadza się zmiany w przykładowym zapytaniu. W tym ćwiczeniu takim zapytaniem jest
Przekształć przykładowy plik, które przemianowałeś na Przykładowe produkty. Zmiany wprowadzane
w przykładowym zapytaniu są przenoszone do funkcji i w efekcie stosowane we wszystkich
plikach w folderze. Jeżeli użyjesz przekształcenia Duplikuj lub Odwołanie w przykładowym
zapytaniu, wtedy przekształcenia zastosowane w nowym zapytaniu nie będą przenoszone do
funkcji, chyba że zastosujesz zaawansowaną technikę wiążącą nowe zapytanie z sekwencją
przekształceń w przykładowym zapytaniu. Takie wiązanie wykonasz w krokach 21. i 22.
115
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
116
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
19. Teraz, gdy ujednolicone nazwy kolumn znalazły się w pierwszym wierszu, możesz je
przenieść do nagłówków. W tym celu kliknij w karcie Przekształć ikonę Użyj pierwszego
wiersza jako nagłówków, a w panelu Zastosowane kroki usuń wiersz Zmieniono typ.
Uwaga. Usunięcie kroku Zmieniono typ jest bardzo ważne. Ponieważ kolumna Wielkość w tabeli
Akcesoria zawiera wyłącznie liczby, edytor Power Query ustala jej typ na Liczba całkowita.
Jednak w innych tabelach, np. Rowery, w tej kolumnie znajdują się poprawne wartości tekstowe.
Jeżeli nie usuniesz kroku zmieniającego typ kolumn, pojawią się komunikaty o błędach, a kolumna
Wielkość będzie zawierała tylko liczby.
20. W panelu Zapytania zaznacz zapytanie Dołączone produkty. Błąd, który się pojawi, możesz
poprawić, usuwając z panelu Zastosowane kroki krok Zmieniono typ.
Teraz, gdy przewiniesz tabelę do momentu, aż w kolumnie Source.Name pojawi się wartość
R04-04 - rowery.xlsx, zauważysz, że wartości w kolumnach Nazwa i Kod produktu są
zamienione miejscami (patrz rysunek 4.9). Zatem opisane ujednolicenie nie działa poprawnie.
Wskazówka. Sprawdzenie końcowego efektu jest ważną czynnością w Power Query. Zawartość
panelu podglądu może być bardzo myląca, jak w tym przykładzie, ponieważ stanowi ona tylko
część danych. Tutaj wszystko działało jak należy dla tabeli Akcesoria, ale po bliższym przyjrzeniu
się połączonej tabeli okazało się, że zawartość kolumn Nazwa i Kod produktu pobrane z tabeli
Rowery są zamienione miejscami. Dlatego zawsze dokładnie sprawdzaj wynikowe dane.
117
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zatrzymajmy się na chwilę, aby zrozumieć, co się stało i dlaczego ujednolicenie nie działa
poprawnie. Dobra wiadomość jest taka, że zapytanie Przykładowe produkty (2) działa poprawnie
dla pojedynczego pliku. Gdy je klikniesz, zauważysz, że w ostatnim kroku w panelu
Zastosowane kroki nagłówki kolumn zostały ujednolicone zgodnie z oczekiwaniami. Zła jest
jednak wiadomość, że ujednolicenie obejmuje tylko jeden plik. Gdy przykładowe zapytanie
zostało zastosowane w przykładowej funkcji w odniesieniu do wszystkich plików w folderze,
bezkrytycznie przekształciło wszystkie nagłówki we wszystkich plikach.
Dlaczego wykorzystywany jest ten sam pojedynczy plik? Spójrz na zapytanie Przykładowe
produkty (2). Gdy w panelu Zastosowane kroki zaznaczysz krok Źródło, wtedy w panelu
formuły pojawi się kod ładujący arkusz Excela wskazany w parametrze Parametr1. Parametr
ten został utworzony przez Power Query podczas łączenia plików zapisanych w folderze.
Gdy klikniesz ten parametr w panelu Zapytania, zobaczysz, że ma on wartość Przykładowy
plik. Zapytanie o tej nazwie również znajduje się w panelu Zapytania i zwraca zawartość
skoroszytu R04-04 - akcesoria.xlsx.
Dlaczego więc zostały zamienione miejscami wartości kolumn Nazwa i Kod produktu z tabeli
Rowery? Ponieważ w skoroszycie R04-04 - akcesoria.xlsx powyższe kolumny są ułożone
w innej kolejności niż w R04-04 - rowery.xlsx. Nie można zatem zastosować ujednolicenia
przystosowanego do tabeli Akcesoria w odniesieniu do tabel, w których kolejność kolumn
jest inna.
Aby poprawić ten błąd, musisz się dowiedzieć, jak stosować zapytanie Przykładowe produkty (2)
indywidualnie dla każdego pliku w folderze. Jak pamiętasz, w kroku 3. tego ćwiczenia zapytanie
Przykładowe produkty (2) utworzyłeś poprzez zduplikowanie zapytania Przykładowe produkty.
Jest to przykładowe zapytanie wykonywane dla każdego pliku, wywołujące zapytanie
Przykładowe produkty (2). Ponieważ jednak Przykładowe produkty (2) nie jest już
przykładowym zapytaniem, jest wykonywane tylko dla pliku R04-04 - akcesoria.xlsx.
Potrzebny jest więc sposób przekształcenia zapytania Przykładowe produkty (2) tak, aby
wykorzystywało parametr z nazwą pliku z zapytania Przykładowe produkty i ujednolicało
nagłówki we wszystkich plikach. W tym celu musisz przekształcić zapytanie Przykładowe
produkty (2) w funkcję (zwaną również funkcją niestandardową), która będzie wywoływana
podczas przetwarzania każdego pliku zapisanego w folderze. Wykonaj poniższe kroki, aby
utworzyć taką funkcję na podstawie zapytania Przykładowe produkty (2).
21. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Przykładowe produkty (2)
i wybierz polecenie Utwórz funkcję. Pojawi się okno o tej samej nazwie. W polu Nazwa funkcji
wpisz FnUjednolicenieNazwKolumn i kliknij OK. Jak pokazuje rysunek 4.10, zostanie utworzona
funkcja, która będzie wywoływana dla wszystkich plików.
Teraz funkcja FnUjednolicenieNazwKolumn będzie wywoływana przez zapytanie
Przykładowe produkty, a nie przez Przykładowe produkty (2).
22. W panelu Zapytania zaznacz zapytanie Przykładowe produkty, a w panelu Zastosowane kroki
zaznacz krok Dołączone zapytanie. W pasku formuły pojawi się następujący kod:
= Table.Combine({#"Przykładowe produkty (2)", #"Usunięto pierwsze wiersze"})
Zastąp go poniższym kodem:
= Table.Combine({FnUjednolicenieNazwKolumn(#"Parametr1"), #"Usunięto pierwsze wiersze"})
118
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
119
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 4.11. Transpozycja oryginalnej tabeli konwersji skutkuje utworzeniem jednowierszowej tabeli
zawierającej wartości źródłowe i docelowe, dzięki czemu metoda ujednolicania nazw kolumn jest
bardziej wydajna
120
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 4. ŁĄCZENIE NIEZGODNYCH TABEL
121
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Podsumowanie
W tym rozdziale poznałeś skutki łączenia niezgodnych tabel oraz różne techniki umożliwiające
wiązanie nazw kolumn i pomyślne łączenie tabel.
Dowiedziałeś się, jak rozpoznawać symptomy niezgodności tabel, takie jak podział danych
i brakujące wartości. Nauczyłeś się również ręcznie zmieniać nazwy kolumn przed połączeniem tabel.
Jeżeli we wszystkich tabelach zapisanych w folderze kolumny są ułożone w takiej samej kolejności,
wtedy możesz stosować technikę uzgadniania nagłówków. Poznałeś funkcję Table.TransformColumnNames
i użyłeś jej do wykonania prostych przekształceń nazw kolumn, takich jak zamiana pierwszych liter
słów z małych na wielkie oraz zastąpienie znaków podkreślenia spacjami.
Za pomocą tabeli konwersji można ujednolicać nazwy kolumn w sytuacjach, gdy nie jest możliwe
użycie funkcji przekształcających tekst. Poznałeś trzy techniki wykorzystujące tabelę konwersji do
zmiany niezgodnych nagłówków: transpozycję, anulowanie przestawienia i transpozycję samych
nazw kolumn. Na koniec zastosowałeś najskuteczniejszą metodę ujednolicania nagłówków
wykorzystującą kod w języku M.
Poniższa tabela zawiera podsumowanie opisanych technik wraz z ich zaletami i wadami.
Możliwość łączenia niezgodnych tabel oferuje wiele korzyści. Wyobraź sobie, że pracujesz
w firmie, która co jakiś czas przejmuje inne firmy. Techniki opisane w tym rozdziale możesz
wykorzystywać do szybkiego konsolidowania danych pochodzących z przejętych firm i tworzenia
raportów, zanim dział IT zintegruje bazy danych. Opisane metody analityki biznesowej robią
wielkie wrażenie podczas łączenia dużych ilości tego rodzaju danych.
122
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5.
Pozyskiwanie kontekstu
Dla mnie kontekst jest kluczem — od niego zaczyna się zrozumienie wszystkiego.
— Kenneth Noland
W rozdziałach 3., „Łączenie danych z kilku źródeł”, i 4., „Łączenie niezgodnych tabel”, poznałeś
kilka praktycznych przykładów łączenia niezgodnych tabel, których kolumny wymagały
ujednolicenia nagłówków. Często zdarza się, że kontekstowa, kluczowa w analizie informacja, jest
zapisana poza tabelami. Łączenie tabel z pominięciem tej informacji może prowadzić do uzyskania
bezwartościowych wyników. W tym rozdziale dowiesz się, jak pozyskiwać kontekst tabeli oraz jak
łączyć osobne tabele wraz z ich informacjami kontekstowymi. Poznasz różne przypadki i metody
dynamicznego wyszukiwania i pozyskiwania kluczowych informacji z jednoczesnym pomijaniem
mniej istotnych. Wszak od kontekstu, jak powiedział Kenneth Noland (choć prawdopodobnie
w innym kontekście), zaczyna się zrozumienie wszystkiego. Bez kontekstu traci się cenne informacje.
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Pozyskiwanie kontekstu
zawartego w nazwach plików i skoroszytów
W rozdziałach 3. i 4. poznałeś różne metody łączenia kilku tabel danych fikcyjnej firmy Fabryka
Przygód. Tabele te zawierały różne kategorie produktów, np. rowery i akcesoria. Szczęśliwym trafem
(albo umyślnie) informacje o kategoriach były umieszczone w osobnej kolumnie, która podczas
łączenia tabel nie ulegała zmianie. W tym podrozdziale zajmiemy się innym typowym przypadkiem,
w którym kluczowe informacje kontekstowe zawarte są w nazwach arkuszy lub plików, a nie
w kolumnie tabeli. Celem jest znalezienie sposobu umieszczenia tych informacji w kolumnie,
aby zachować kontekst danych.
Zacznijmy od prostego przykładu.
124
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
2. Zmień nazwę zapytania Arkusz1 na Rowery, a Arkusz1 (2) na Akcesoria. Jeżeli nie pamiętasz,
które zapytanie jest które, kliknij w panelu Zastosowane kroki krok 1. W pasku formuły
pojawi się nazwa pliku. Przykładowo formuła importująca skoroszyt z katalogiem rowerów
wygląda następująco:
= Excel.Workbook(File.Contents("C:\Dane\R05\R05-01 - rowery.xlsx"), null, true)
Ewentualnie kliknij ikonę ustawień po prawej stronie kroku Źródło. Pojawi się okno,
w którym w polu Ścieżka pliku będzie widoczna nazwa skoroszytu.
3. W panelu Zapytania kliknij zapytanie Rowery. W kolumnie Strona główna rozwiń ikonę
Dołącz zapytania i wybierz polecenie Dołącz zapytania jako nowe.
4. W oknie Dołączanie, w rozwijanej liście Tabela podstawowa wybierz Rowery, a w liście
Tabela do dołączenia do tabeli podstawowej wybierz Akcesoria. Kliknij OK.
Pojawi się nowe zapytanie Append1 zawierające dane rowerów i akcesoriów, ale bez
kategorii. Zmiana oryginalnych nazw zapytań w kroku 2. okazała się niewystarczająca
do zachowania informacji o kontekście. Możesz to jednak naprawić.
5. W panelu Zapytania kliknij zapytanie Rowery.
6. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa.
7. W oknie, które się pojawi, wpisz w polu Nazwa nowej kolumny nazwę Kategoria, a w polu
Formuła kolumny niestandardowej następującą formułę:
= "Rowery"
8. Kliknij OK, aby zamknąć okno, a następnie w panelu Zapytania zaznacz zapytanie Akcesoria.
9. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa.
10. W oknie, które się pojawi, wpisz w polu Nazwa nowej kolumny nazwę Kategoria, a w polu
Formuła kolumny niestandardowej następującą formułę:
= "Akcesoria"
11. Kliknij OK, aby zamknąć okno, a następnie w panelu Zapytania zaznacz zapytanie Append1.
Gdy przewiniesz zawartość panelu podglądu w dół, zauważysz, że kolumna Kategoria zawiera
poprawne informacje kontekstowe dla wierszy pochodzących z zapytań Rowery i Akcesoria.
Gotowe rozwiązanie jest zapisane w plikach R05-01 - rozwiązanie - część 1.xlsx
oraz R05-01 - rozwiązanie - część 1.pbix.
Ćwiczenie 5.1.
Część II. Pozyskiwanie kontekstu z nazwy pliku lub arkusza
Regułą jest, że używając przekształceń Dołącz zapytania i Dołącz zapytania jako nowe, tracimy kontekst
zawarty w nazwach zapytań. W takim przypadku trzeba w każdej tabeli tworzyć niestandardową
kolumnę. Jednak podczas łączenia plików zapisanych w folderze niezbędna informacja kontekstowa
jest umieszczana w kolumnie Source.Name i nie trzeba tworzyć niestandardowej kolumny. W rozdziale 3.,
w punkcie „Łączenie tabel zapisanych w folderze” został opisany podobny przypadek, w którym
wyodrębniany był rok wprowadzenia produktu do sprzedaży.
125
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Pozyskiwanie kontekstu
z tytułów tabel przed ich połączeniem
W części II ćwiczenia 5.1 połączyłeś arkusze Rowery i Akcesoria i wykorzystałeś informacje
o kategoriach zawarte w nazwach arkuszy. Niestety, w praktyce często zdarza się, że kluczowych
informacji kontekstowych nie ma w tabelach, nazwach plików ani nazwach arkuszy.
W części I ćwiczenia 5.1 przed połączeniem zapytań Rowery i Akcesoria utworzyłeś kolumny
niestandardowe zawierające nazwy kategorii. Teraz poznasz bardziej zaawansowaną odmianę tej
techniki, umożliwiającą pozyskiwanie kontekstu z tytułów tabel umieszczonych przed wierszami
zawierającymi właściwe dane. Technika ta jest bardzo przydatna podczas łączenia tabel za pomocą
przekształceń Dołącz zapytania i Dołącz zapytania jako nowe, jak również w czasie łączenia plików
zapisanych w folderze, o czym się niedługo przekonasz. Rysunek 5.2 przedstawia przekształcenia
niezbędne do wyodrębnienia informacji z tytułów tabel i umieszczenia ich w nowej kolumnie.
Uwaga. Tutaj, inaczej niż w części I ćwiczenia 5.1, zamiast jawnego określania zawartości kolumny
niestandardowej za pomocą ciągów "Rowery" i "Akcesoria" zastosujesz ogólną metodę wyodrębniania
wartości z tytułu tabeli. Ponieważ treść tytułu nie jest zawczasu znana, potrzebny jest sposób
pozyskiwania informacji z wielu tabel o różnych tytułach.
126
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
RYSUNEK 5.2. Technika pozyskiwania kontekstu z tytułów tabel przed ich połączeniem jest zilustrowana na
przykładzie danych firmy Fabryka Przygód; dzięki niej tytuły można pozyskiwać dynamicznie i umieszczać
je w połączonych wynikach
Uwaga. Opisaną technikę możesz stosować również podczas łączenia plików tekstowych i CSV
zapisanych w folderze, jeżeli informacja kontekstowa znajduje się w wierszu poprzedzającym
właściwe wiersze z danymi.
127
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
5. Jeżeli w panelu Zastosowane kroki znajduje się krok Nagłówki o podwyższymy poziomie,
również go usuń.
6. W karcie Strona główna rozwiń ikonę Usuń wiersze i wybierz polecenie Usuń puste wiersze,
aby usunąć puste wiersze z zaimportowanej tabeli. Dlaczego to jest ważne? Ponieważ tytuły
od danych są często oddzielone pustymi wierszami. Dzięki temu później, po wyodrębnieniu
i zapisaniu nazwy kategorii zawartej w tytule arkusza, łatwiej będzie importować dane.
7. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Rowery i z podręcznego
menu wybierz polecenie Odwołanie. Utworzysz zapytanie Rowery (2). Zaznacz je i zwróć
uwagę, że pierwszy wiersz zawiera wartość Rowery. Kliknij ją prawym przyciskiem myszy
i z podręcznego menu wybierz polecenie Wyszczególnij. W panelu podglądu pojawi się
słowo „Rowery”.
Nie zamykaj edytora. Po zapoznaniu się z operacją wyszczególnienia przejdziesz do
następnego kroku.
Wskazówka. Aby odwoływać się do wierszy, kolumn i komórek, nie musisz znać języka M.
Żeby dowiedzieć się, jaka jest składnia potrzebnego wyrażenia, po prostu użyj przekształcenia
Wyszczególnij i sprawdź kod, który pojawi się w pasku formuły. Zwróć uwagę, że zawartość
pojedynczej komórki możesz odczytywać, odwołując się najpierw do kolumny, a potem do
wiersza. Przykładowo wyrażenie Źródło{0}[Column1] zwraca ten sam wynik, co Źródło
[Column1]{0}. Ostatnie wyrażenie działa w nieco inny sposób: najpierw odczytuje listę
wszystkich elementów kolumny Column1, a następnie zwraca pierwszy element listy.
128
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
RYSUNEK 5.3. Przekształcenie Wyszczególnij generuje formułę w języku M, której działanie można podzielić
na dwa kroki
8. Teraz, gdy wiesz już, jak odczytywać wartość komórki za pomocą przekształcenia
Wyszczególnij, usuń zapytanie Rowery (2) i zaznacz zapytanie Rowery.
9. Ponownie użyj przekształcenia Wyszczególnij, ale w odniesieniu do zapytania Rowery.
W tym celu kliknij prawym przyciskiem myszy komórkę zawierającą wartość „Rowery”
i wybierz polecenie Wyszczególnij.
10. W pasku formuły pojawi się następujący kod:
129
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. Usuwanie określonej liczby wierszy (np. jednego, tak jak w tym ćwiczeniu) nie jest
dobrą praktyką. W punkcie „Wskazówki kontekstowe” tego rozdziału dowiesz się, jak można
pomijać nieistotne informacje, usuwając dynamicznie określoną, a nie stałą liczbę wierszy.
14. Zgodnie w krokiem 4. na rysunku 5.2, przenieś pierwszy wiersz tabeli do nagłówków.
W tym celu w karcie Przekształć kliknij ikonę Użyj pierwszego wiersza jako nagłówków.
15. Na koniec, zgodnie z ostatnim krokiem na rysunku 5.2, utwórz niestandardową kolumnę
zawierającą słowa „Rowery”. W tym celu kliknij w karcie Dodaj kolumnę ikonę Kolumna
niestandardowa. W oknie, które się pojawi, wpisz w polu Nazwa nowej kolumny nazwę
Kategoria, a w polu Formuła kolumny niestandardowej następującą formułę:
= Tytuł
Kliknij OK, aby zamknąć okno.
Powinna pojawić się nowa kolumna zawierająca słowa „Rowery”. Wyodrębniłeś więc dynamicznie
to słowo z komórki skoroszytu i zgodnie z krokami pokazanymi na rysunku 5.2 umieściłeś je w tabeli.
Opisana technika jest w praktyce bardzo przydatna. Można ją stosować w różnych przypadkach
importowania danych z dowolnych źródeł i zapisanych w różnych formatach (gdy informacje
kontekstowe zawarte są nie tylko w tytułach tabel umieszczonych w komórkach arkusza).
Uwaga. Rozdzielanie serii przekształceń na dwa przepływy, a następnie łączenie ich w jeden
przepływ jest bardzo przydatną techniką. Gdy lepiej poznasz język M, wtedy zamiast tworzyć
niestandardowe kroki, tak jak w tym ćwiczeniu, będziesz opisaną technikę stosował bezpośrednio
w zaawansowanym edytorze.
Gotowe rozwiązanie jest zapisane w plikach R05-02 - rozwiązanie.xlsx oraz R05-02 - rozwiązanie.pbix.
130
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
c. R05-03-03.xlsx,
d. R05-03-04.xlsx.
2. Zwróć uwagę, że w każdym skoroszycie tabela produktów ma inny tytuł, tak jak na rysunku
5.4. Pliki specjalnie mają nic niemówiące nazwy, zatem jedynym sposobem pozyskania
informacji o kategoriach produktów jest wyodrębnienie ich z tytułów tabel.
RYSUNEK 5.4. W edytorze Power Query można łączyć kilka tabel i wyodrębniać ich tytuły
131
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
8. W karcie Strona główna kliknij ikonę Usuń wiersze i wybierz polecenie Usuń puste wiersze,
zgodnie z krokiem 1. na rysunku 5.2.
9. Aby wyodrębnić tytuł tabeli Rowery, tak jak w ćwiczeniu 5.2 (kroki od 9. do 15.), i umieścić
tytuły wszystkich tabel w kolumnie Kategoria, wykonaj następujące operacje na zapytaniu
Przykładowe produkty.
a. Kliknij prawym przyciskiem myszy komórkę zawierającą wartość „Rowery” i wybierz
polecenie Wyszczególnij.
b. Zwróć uwagę, że w pasku formuły pojawi się następujący kod:
= Tytuł
wpisz następujący kod:
= #"Usunięto puste wiersze"
e. W karcie Strona główna kliknij ikonę Usuń wiersze i wybierz polecenie Usuwanie
pierwszych wierszy. W oknie, które się pojawi, wpisz w polu Liczba wierszy wartość 1
i kliknij OK, aby zamknąć okno.
f. W karcie Przekształć kliknij ikonę Użyj pierwszego wiersza jako nagłówków.
g. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. W oknie, które się
pojawi, wpisz w polu Nazwa nowej kolumny nazwę Kategoria, a polu Formuła kolumny
niestandardowej następującą formułę:
= Tytuł
Kliknij OK, aby zamknąć okno.
10. W panelu Zastosowane kroki usuń krok Zmieniono typ. (Krok ten może powodować błędy
w kolumnie Wielkość. Typy kolumn określisz później).
11. W panelu Zapytania zaznacz zapytanie R05-03 - produkty.
12. W panelu Zastosowane kroki usuń krok Zmieniono typ.
13. W nagłówku kolumny Kategoria kliknij przycisk filtru i sprawdź, czy lista, która się pojawi,
zawiera poprawne nazwy wszystkich czterech kategorii.
Gotowe rozwiązanie jest zapisane w plikach R05-03 - rozwiązanie.xlsx oraz
R05-03 - rozwiązanie.pbix.
W następnym podrozdziale dowiesz się, jak pozyskiwać informacje kontekstowe po połączeniu
tabel. Dzięki temu będziesz mógł przekształcać zapytanie R05-03 - produkty, a nie Przykładowe
produkty. Technika ta okaże się szczególnie przydatna w ćwiczeniu 5.4 podczas łączenia arkuszy
skoroszytu.
132
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
RYSUNEK 5.5. Dane produktów firmy Fabryka Przygód są zapisane w osobnych arkuszach jednego
skoroszytu, a informacje o kategoriach znajdują się w tytułach tabel, a nie w nazwach arkuszy
133
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
5. Zwróć uwagę, że z tabeli widocznej w panelu podglądu nie można uzyskać informacji
o kategoriach produktów. W rozdziale 3. informacja kontekstowa była zapisana w nazwie
arkusza. Można ją było łatwo wyodrębnić za pomocą kolumny Name. Niestety, w tym
ćwiczeniu nazwy arkuszy nie zawierają informacji kontekstowych. Usuń wszystkie kolumny
oprócz Data. W tym celu kliknij prawym przyciskiem myszy nagłówek tej kolumny i wybierz
polecenie Usuń inne kolumny.
6. Rozwiń kolumnę Data. W tym celu kliknij przycisk znajdujący się po prawej stronie jej
nagłówka lub zaznacz tę kolumnę, a następnie w karcie Przekształć kliknij ikonę Rozwiń.
W oknie Rozwiń Data kliknij OK.
Pierwsza tabela ma rysunku 5.6 przedstawia złączone dane, zawierające m.in. tytuły Rowery,
Akcesoria, Komponenty i Ubrania. Aby je wyodrębnić i umieścić w kolumnie Kategoria,
wykonaj sekwencję przekształceń pokazanych na tym rysunku.
RYSUNEK 5.6. Metoda pozyskiwania informacji kontekstowych po połączeniu tabel pozwala łączyć arkusze
skoroszytu i wyodrębniać z nich tytuły tabel
7. W karcie Strona główna kliknij ikonę Usuń wiersze, a następnie polecenie Usuń puste wiersze.
Powód, dla którego trzeba wykonać to przekształcenie, jest oczywisty: podobnie jak
w ćwiczeniu 5.3, pomiędzy tytułem a właściwą tabelą znajduje się pusty wiersz, który
sprawia, że arkusz jest bardziej czytelny. Ten wiersz jest tutaj usuwany.
8. W karcie Dodaj kolumnę kliknij ikonę Kolumna warunkowa. Celem jest utworzenie
kolumny, która ułatwi wyszukiwanie wierszy zawierających tytuły. Można to zrobić na
dwa sposoby.
a. Najprostszy polega na wpisywaniu w nowej kolumnie wartości 1, jeżeli pierwsza kolumna
zawiera wartość Rowery, Akcesoria, Komponenty lub Ubrania, albo wartości 0 w przeciwnym
przypadku. Nie jest to jednak zlecana metoda, ponieważ opiera się na sztywno zdefiniowanych
tytułach. Jeżeli w przyszłości będą pojawiały się nowe kategorie, trzeba będzie za każdym
razem uwzględniać je w przekształceniu.
134
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
9. Zastosuj drugą, lepszą metodę. W oknie Dodawanie kolumny warunkowej zdefiniuj reguły
wyszukiwania wierszy z tytułami (na podstawie rysunku 5.7 sprawdź, czy wybrałeś
poprawne opcje).
a. W polu Nazwa nowej kolumny wpisz To tytuł.
b. W rozwijanej liście Nazwa kolumny wybierz Data.Column2.
c. W rozwijanej liście Operator wybierz nie równa się.
d. W polu Wartość wpisz null.
e. W polu Wartość wyjściowa wpisz 0.
f. Kliknij przycisk Dodaj regułę, w rozwijanej liście Nazwa kolumny wybierz
Data.Column3, a następnie wykonaj ponownie kroki od c do e.
g. Kliknij przycisk Dodaj regułę, w rozwijanej liście Nazwa kolumny wybierz
Data.Column4, a następnie wykonaj ponownie kroki od c do e.
h. Kliknij przycisk Dodaj regułę, w rozwijanej liście Nazwa kolumny wybierz
Data.Column5, a następnie wykonaj ponownie kroki od c do e.
i. Kliknij przycisk Dodaj regułę, w rozwijanej liście Nazwa kolumny wybierz
Data.Column6, a następnie wykonaj ponownie kroki od c do e.
j. W polu W przeciwnym razie wpisz 1 i kliknij OK, aby zamknąć okno.
Teraz dodaj następną kolumnę warunkową, która będzie zawierała właściwy tytuł tabeli,
jeżeli kolumna To tytuł będzie zawierała 1 lub null w przeciwnym przypadku. Przygotujesz
się w ten sposób do kroku 3., „Wypełnienie tabeli” przedstawionego na rysunku 5.6.
10. W karcie Dodaj kolumnę kliknij ikonę Kolumna warunkowa i w oknie Dodawanie kolumny
warunkowej wykonaj poniższe kroki.
a. W polu Nazwa nowej kolumny wpisz Tytuł.
b. W rozwijanej liście Nazwa kolumny wybierz To tytuł.
c. W rozwijanej liście Operator wybierz równa się.
d. W polu Wartość wpisz 1.
e. W pierwszej rozwijanej liście pod etykietą Wartość wyjściowa wskaż pozycję Wybierz kolumnę.
f. W drugiej rozwijanej liście pod etykietą Wartość wyjściowa wybierz pozycję Data.Column1.
g. W polu W przeciwnym razie wpisz null i kliknij OK, aby zamknąć okno.
Utworzyłeś kolumnę Tytuł zawierającą nazwy kategorii w wierszach, w których znajdują się
tytuły tabel, oraz wartości null w pozostałych wierszach. Teraz użyjesz przekształcenia
Wypełnij w dół.
135
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
11. Kliknij prawym przyciskiem myszy kolumnę Tytuł i wybierz polecenie Wypełnij, a następnie
W dół. W ten sposób w każdym wierszu umieścisz informacje o kategorii produktu.
Teraz możesz przefiltrować wiersze. Użyjesz w tym celu kolumny To tytuł.
12. Kliknij w nagłówku kolumny To tytuł ikonę filtru i w oknie, które się pojawi, usuń zaznaczenie
przy wartości 1. Kliknij OK.
13. Usuń kolumnę To tytuł, ponieważ nie będzie już potrzebna.
14. Wykonaj poniższe kroki, aby — podobnie jak w rozdziale 3. podczas łączenia arkuszy
— użyć pierwszego wiersza jako nagłówków kolumn.
a. W karcie Przekształć kliknij ikonę Użyj pierwszego wiersza jako nagłówków.
b. Zmień nagłówek kolumny Rowery na Kategoria.
c. Zastosuj w kolumnie Nazwa filtr usuwający wiersze zawierające wartość Nazwa.
Wskazówka. Możesz usprawnić krok 14b, zamieniając w pasku formuły fragment kodu "Rowery"
na List.Last(Table.ColumnNames(#"Zmieniono typ")). Poniżej przedstawiona jest pełna formuła:
= Table.RenameColumns(#"Zmieniono typ",
{{List.Last(Table.ColumnNames(#"Zmieniono typ")), "Kategoria"}})
Dzięki temu zmienisz nazwę ostatniej kolumny, a nie jawnie wskazanej o nazwie Rowery.
Jest to ważne, ponieważ w praktyce dane się zmieniają. Zapytanie w oryginalnej formie przestanie
działać, jeżeli w pierwszym arkuszu zostanie umieszczona tabela inna niż Rowery. Jeżeli natomiast
zapytanie będzie zmieniało ostatnią kolumnę, wtedy będzie działać poprawnie. W rozdziale 9.,
„Wprowadzenie do języka M”, dowiesz się więcej o użytym tutaj kodzie, natomiast w rozdziale
10., „Od złych do dobrych zapytań", nauczysz się optymalizować zapytania, w tym pozyskiwać
kontekst i zmieniać nazwy kolumn.
136
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
Wskazówki kontekstowe
W ćwiczeniu 5.4 wyodrębniłeś tytuły tabel po połączeniu arkuszy i użyłeś ich jako nazw kategorii.
Ponieważ nagłówki kolumn były zapisane w wierszach danych, do ich wyszukania użyłeś kolumny
warunkowej. Aby dynamicznie wyszukiwać wiersze z tytułami, przyjąłeś założenie, że tytuły znajdują
się w wierszach, w których wszystkie kolumny oprócz pierwszej są puste. Co można jednak zrobić,
jeżeli takie założenie nie jest możliwe? Czy można wyszukiwać tytuły np. w pobliżu innych komórek?
W tym podrozdziale dowiesz się, jak wyszukiwać informacje kontekstowe w określonych
miejscach, w pobliżu wskazanych komórek kotwic. Takie komórki wykorzystasz jako wskazówki do
wyszukiwania potrzebnych informacji kontekstowych. Dowiesz się również, jak pomijać nieistotne
informacje.
W ćwiczeniu wykorzystasz inną wersję skoroszytu zawierającego katalog produktów firmy
Fabryka Przygód. Tym razem, inaczej niż w ćwiczeniu 5.4, nazwa kategorii będzie umieszczona
w innej, mniejszej tabeli, powyżej właściwej tabeli produktów, tak jak na rysunku 5.8. Nazwę
kategorii wyodrębnisz, wykorzystując miejsce, w którym znajduje się tekst „Kategoria”.
RYSUNEK 5.8. Twoje zadanie polega na wyodrębnieniu nazwy kategorii z górnej tabeli
i umieszczeniu jej w nowej kolumnie połączonej tabeli
137
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
138
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
RYSUNEK 5.9. Po dodaniu do każdej tabeli kolumny indeksu będziesz mógł odczytywać wskazówki niezbędne
do wyodrębnienia informacji o kategorii
9. W polu Nazwa nowej kolumny wpisz Tabela z indeksem i kliknij OK. W panelu podglądu
będą widoczne dwie kolumny: Data, zawierająca obiekty Table z zaimportowanymi
arkuszami, oraz Tabela z indeksem, zawierająca te same obiekty, ale z kolumnami indeksów.
10. Usuń tabelę Data. Od tej chwili będziesz pracował na kolumnie Tabela z indeksem.
11. Kliknij przycisk znajdujący się po prawej stronie nagłówka kolumny Tabela z indeksem, aby
ją rozwinąć. Usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako prefiksu i kliknij OK.
Jak się przekonasz, nazwy kategorii znajdują się w wierszach, w których kolumna indeks
zawiera wartość 1, natomiast wartości Kategoria i Data raportu w wierszach z indeksami 0.
Teraz kolejne przekształcenia będą proste.
12. Aby oznaczyć wiersze zawierające wartości Kategoria, kliknij w karcie Dodaj kolumnę ikonę
Kolumna warunkowa. W oknie, które się pojawi, wprowadź następujące zmiany.
a. W polu Nazwa nowej kolumny wpisz Kategoria.
b. W rozwijanej liście Nazwa kolumny wybierz Indeks.
c. W rozwijanej liście Operator wybierz równa się.
d. W polu Wartość wpisz 1.
139
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Wskazówka. Jak pamiętasz z ćwiczenia 5.4 (krok 14b), przekształcenie zmiany nazwy kolumny
możesz usprawnić, zastępując w pasku formuły fragment kodu "Rowery" wyrażeniem
List.Last(Table.ColumnNames(#"Zmieniono typ")).
140
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
RYSUNEK 5.10. Twoje zadanie polega na pominięciu nieistotnych informacji, wyodrębnieniu nazwy kategorii
z górnej tabeli i umieszczeniu jej w nowej kolumnie połączonej tabeli
List.PositionOf([Data][Column1], "Kategoria")
Kliknij OK, aby zamknąć okno. Powyższa formuła wykonuje na kolumnie Column1 operację
za pomocą funkcji List.PositionOf. Wyrażenie [Data][Column1] umieszczone w pierwszym
argumencie funkcji wskazuje kolumnę Column1, natomiast drugi argument zawiera ciąg
"Kategoria". Funkcja wyszukuje ten ciąg w liście wartości odczytanej z kolumny i zwraca
jego pozycję, czyli numer wiersza zawierającego wartość Kategoria.
Jak się przekonasz, kolumna Indeks wiersza z kategorią zawiera różne wartości. Każda z nich
oznacza miejsce (numerowane od zera) komórki zawierającej wartość Kategoria.
Teraz utwórz następną kolumnę niestandardową. Tym razem wyszczególnisz każdy obiekt
tabeli w karcie Data, wykorzystując indeks określony w poprzednim kroku. Na tej podstawie
znajdziesz nazwy kategorii. Jak pamiętasz, komórka z nazwą kategorii znajduje się poniżej
komórki zawierającej wartość Kategoria. Dlatego indeks znajdujący się w kolumnie Indeks
wiersza z kategorią zwiększysz o 1.
3. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. W oknie, które się pojawi,
wprowadź następujące zmiany.
a. W polu Nazwa nowej kolumny wpisz Kategoria.
b. W polu Formuła kolumny niestandardowej wpisz poniższą formułę:
141
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
List.PositionOf([Data][Column1], "Nazwa")
Kliknij OK, aby zamknąć okno.
5. Usuń kolumny Indeks wiersza z kategorią i Data. W następnym kroku wykorzystasz
kolumnę Tabela z indeksem, którą utworzyłeś w kroku 1.
6. Rozwiń tabelę Data, klikając przycisk znajdujący się po prawej stronie jej nagłówka.
Usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako prefiksu i kliknij OK.
W tym momencie masz nazwy kategorii wyodrębnione z połączonych tabel. Twoim
następnym zadaniem jest wykorzystanie wskazówek zawartych w kolumnach Indeks i Indeks
wiersza z nazwą. Musisz odrzucić wszystkie wiersze, których indeksy są mniejsze od wartości
w kolumnie Indeks wiersza z nazwą, ponieważ wiersze te nie zawierają informacji o produktach.
Zrobisz to w dwóch krokach: najpierw utworzysz kolumnę warunkową, a następnie przefiltrujesz
tabelę, wykorzystując wartości zawarte w nowej kolumnie.
7. W karcie Dodaj kolumnę kliknij ikonę Kolumna warunkowa, a następnie w oknie, które się
pojawi, wykonaj następujące kroki (patrz rysunek 5.11).
a. W rozwijanej liście Nazwa kolumny wybierz Indeks.
b. W rozwijanej liście Operator wybierz jest większe niż lub równe.
c. W pierwszej rozwijanej liście pod etykietą Wartość wskaż pozycję Wybierz kolumnę.
d. W drugiej rozwijanej liście pod etykietą Wartość wybierz pozycję Indeks wiersza z nazwą.
e. W polu Wartość wyjściowa wpisz liczbę 1.
f. W polu W przeciwnym razie wpisz 0 i kliknij OK, aby zamknąć okno.
142
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 5. POZYSKIWANIE KONTEKSTU
RYSUNEK 5.11. Aby odrzucić wiersze znajdujące się powyżej tabeli danych, wykonaj krok 7. i sprawdź,
czy w oknie „Dodawanie kolumny warunkowej” wybrałeś ustawienia takie, jak na tym rysunku
Wskazówka. Podobnie jak w ćwiczeniach 5.4 i 5.5, możesz usprawnić zapytanie, zastępując
w kroku 9b, w pasku formuły fragment kodu "Rowery" wyrażeniem
List.Last(Table.ColumnNames(#"Zmieniono typ")).
Gotowe rozwiązanie jest zapisane w plikach R05-06 - rozwiązanie.xlsx oraz R05-06 - rozwiązanie.pbix.
Podsumowanie
W tym rozdziale dowiedziałeś się, jak wyodrębniać informacje kontekstowe zapisane poza tabelami
danych. Poznałeś kilka praktycznych przykładów łączenia informacji kontekstowych z danymi
pochodzącymi z kilku źródeł.
Na początku rozdziału zastosowałeś podstawowe przekształcenie Dołącz zapytania i kolumnę
niestandardową do wyodrębnienia informacji kontekstowych z nazw plików i arkuszy.
Dowiedziałeś się, jak można dynamicznie wyszukiwać i wyodrębniać z arkuszy tytuły tabel
przed ich połączeniem, a następnie umieszczać pozyskane informacje w połączonej tabeli po
zaimportowaniu plików zapisanych w folderze. Za pomocą przekształcenia Wypełnij w dół
utworzyłeś kolumnę zawierającą informacje o kategoriach produktów. Nauczyłeś się tworzyć
w języku M formuły odwołujące się do określonych komórek tabeli.
143
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
144
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 6.
Dekomponowanie tabel
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
146
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 6. DEKOMPONOWANIE TABEL
RYSUNEK 6.1. Potrafisz rozpoznać, która z tabel przedstawiających sumaryczne wyniki według klientów
i kategorii produktów jest źle zaprojektowana?
Zobacz też. Tabele faktów często pojawiają się również z tabelami wyszukiwania i wymiarów
w układzie gwiaździstym. W rozdziale 2., „Podstawowe operacje przygotowywania danych”,
zostało opisane tworzenie tabeli faktów i tabeli wyszukiwania za pomocą odwołań po usunięciu
duplikatów danych. Aby dowiedzieć się więcej o tabelach faktów w kontekście modelowania
danych w narzędziach Power BI i Power Pivot, sięgnij po książkę Analyzing Data with Power BI
and Power Pivot for Excel Alberto Ferrariego i Marco Russo.
147
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Jeżeli stwierdzisz, że tabela źródłowa zawiera kilka kolumn z różnymi kontekstami tego samego
atrybutu, możesz założyć, że można jej nadać lepszy układ. Często np. w źle zaprojektowanej tabeli
dane za poszczególne lata znajdują się w osobnych kolumnach, przy czym każda z nich jest tego
samego typu liczbowego. W tabeli nr 1 przychody dla każdej kategorii produktów są umieszczone
w osobnych kolumnach. Aby podsumować przychody według klientów, należałoby zsumować
wartości w każdej z czterech kolumn, co nie jest praktyczną operacją w Excelu lub Power BI.
Zatem spośród wszystkich tabel przedstawionych na rysunku 6.1 przychody firmy Fabryka
Przygód najlepiej reprezentuje tabela nr 4. Co można jednak zrobić, jeżeli dane źródłowe są
sformatowane tak jak tabele nr 1, nr 2 lub nr 3? Czy można taką tabelę przekształcić do postaci
podobnej do tabeli nr 4 i ułatwić sobie w ten sposób analizę? W praktyce często będziesz miał do
czynienia z tabelami takimi jak trzy pierwsze na rysunku 6.1, a odpowiedź na powyższe pytanie
brzmi: „Tak, można je przekształcać”. Ten rozdział pokazuje, jak można je zamieniać w tabele
faktów, łatwiejsze do przetwarzania za pomocą Excela i Power BI.
Dalej w tym rozdziale opisane jest przekształcenie Anulowanie przestawienia i jego zastosowanie
do przetwarzania tabel, takich jak tabela nr 1 na rysunku 6.1.
148
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 6. DEKOMPONOWANIE TABEL
RYSUNEK 6.2. Ten diagram pokazuje zmiany położenia określonej wartości z oryginalnej tabeli podczas
anulowania przestawienia
149
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
150
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 6. DEKOMPONOWANIE TABEL
RYSUNEK 6.3. Dodanie nowej kolumny kotwicy uniemożliwia zdekomponowanie tabeli za pomocą
przekształcenia Anuluj przestawienie kolumn lub Anuluj przestawienie innych kolumn
Jeszcze poważniejszy problem pojawi się, gdy nowa kolumna kotwica będzie zawierała liczby.
Wyobraź sobie, że do tabeli użytej w ćwiczeniu 6.1 została dodana kolumna zawierająca całkowitą
sprzedaż dla poszczególnych klientów. Po odświeżeniu raportu kolumna ta zostanie zdekomponowana
wraz z kolumnami poszczególnych kategorii, potraktowana jak kolumna z przychodami nowej
kategorii i w raporcie pojawią się błędne wyniki.
Co można więc zrobić, jeżeli w tabeli źródłowej będą pojawiać się nowe kolumny kotwice?
Odpowiedź na to pytanie znajdziesz dalej w tym rozdziale.
151
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 6.4. Jeżeli w tabeli pojawi się kolumna z danymi za kolejny rok, w przekształceniu
„Anuluj przestawienie tylko zaznaczonych kolumn” zostanie potraktowana jak kolumna kotwica
i tabela zostanie niewłaściwie zdekomponowana
Aby w takim przypadku kolumna 2019 nie była traktowana jak kotwica, zaleca się stosowanie
przekształcenia Anuluj przestawienie innych kolumn. Zważywszy na mankamenty przekształcenia
Anuluj przestawienie tylko zaznaczonych kolumn, należy je stosować tylko wtedy, gdy dekomponowane
kolumny nie zmieniają się, natomiast zmianom ulegają tylko kolumny kotwice.
Zobacz też. Oprócz tabel zawierających sumy całkowite nie jest zalecane przetwarzanie tabel
z sumami częściowymi. Ten temat jest opisany dalej w tym rozdziale.
152
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 6. DEKOMPONOWANIE TABEL
RYSUNEK 6.5. Dekompozycja tabeli zawierającej wiersz i kolumnę z sumami całkowitymi może skutkować
uzyskaniem błędnych wyników, dlatego takie wiersze i kolumny należy usuwać z zapytania
153
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Do zsumowania wszystkich przychodów możesz użyć następującej miary DAX (przy założeniu,
że tabela nazywa się Przychody, a kolumna Przychód):
Całkowity przychód = SUM ( Przychody[Przychód] )
Niestety, uzyskane w ten sposób wyniki będą czterokrotnie większe od rzeczywistych, dlatego
musisz użyć innej formuły:
Całkowity przychód = CALCULATE (
SUM ( Przychody[Przychód] );
FILTER ( Przychody;
Przychody[Klient] <> "Suma" && Przychody[Kategoria] <> "Suma")
)
Powyższą formułę możesz stosować, kiedy będziesz zmuszony przetwarzać dane zawierające
sumy. Jednak lepszym sposobem jest usuwanie sum na poziomie zapytania.
Usuwanie sum
Możesz wprawdzie kontynuować ćwiczenie i odrzucać za pomocą filtru sumy natychmiast po
zdekomponowaniu tabeli, ale takie podejście jest pod względem wydajnościowym nieefektywne,
ponieważ wydłuża czas ładowania danych. Odświeżanie raportu możesz przyspieszyć, usuwając
niepotrzebną kolumnę i wiersz z sumą z tabeli przed jej zdekomponowaniem. W tym celu wykonaj
następujące kroki.
5. W panelu Zastosowane kroki usuń krok Anulowano przestawienie innych kolumn.
6. Zaznacz kolumnę Suma i naciśnij klawisz Delete.
W tym ćwiczeniu Suma jest nazwą kolumny, którą możesz bezpiecznie usunąć,
wykorzystując interfejs edytora. W następnym ćwiczeniu poznasz przypadek, w którym
kolumna z sumami nazywa się Column10. Jeżeli tabela w miarę upływu czasu będzie
rozbudowywana o dodatkowe kolumny (a kolumna z sumami będzie przesuwana w prawą
stronę), wtedy usuwanie kolumn o tego rodzaju ogólnych nazwach może skutkować
uzyskiwaniem nieoczekiwanych wyników. Ćwiczenie 6.4 demonstruje, jak usuwać ostatnią
kolumnę z sumami za pomocą formuły w języku M.
7. W kolumnie Strona główna rozwiń ikonę Usuń wiersze i wybierz polecenie Usuwanie
końcowych wierszy.
8. W oknie, które się pojawi (o tej samej nazwie), wpisz w polu Liczba wierszy wartość 1
i kliknij OK, aby zamknąć okno.
Przekształcenie Usuwanie końcowych wierszy jest najprostszym sposobem usuwania wiersza
z sumami, ale często trzeba również usuwać dodatkowe wiersze poniżej tabeli; dzieje się tak
szczególnie wtedy, kiedy źródłem jest skoroszyt zawierający nieoczyszczone dane. Aby
zapytanie było skalowalne i usuwało sumy wraz z dodatkowymi ostatnimi wierszami,
możesz użyć formuły M, która będzie dynamiczne wykrywać sumy i usuwać je wraz
z innymi niepotrzebnymi wierszami.
W tym przypadku formuła usuwająca ostatni wiersz ma następującą postać:
= Table.RemoveLastN(#"Usunięto kolumny",1)
Zamiast niej możesz użyć następujące formuły:
= Table.FirstN(#"Usunięto kolumny",
List.PositionOf(#"Usunięto kolumny"[Klient], "Suma"))
154
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 6. DEKOMPONOWANIE TABEL
Po naciśnięciu Enter powinieneś uzyskać ten sam wynik, co poprzednio. Powyższa formuła
usuwa ostatni wiersz z sumami, jak również wszystkie kolejne wiersze.
Przyjrzyjmy się bliżej tej formule. Funkcja Table.FirstN zachowuje pierwszych N wierszy
tabeli. Ma dwa argumenty: nazwę tabeli i liczbę wierszy, które mają być zachowane.
Identyfikatorem tabeli jest ciąg #"Usunięto kolumny". Funkcję List.PositionOf użytą
w drugim argumencie poznałeś w rozdziale 5. W tym przypadku wyszukuje ona słowo
„Suma” w kolumnie Klient i zwraca jego indeks, którego wartość oznacza dokładnie liczbę
wierszy, jakie mają zostać zachowane.
Teraz, po usunięciu sum, możesz kontynuować dekomponowanie tabeli.
9. Zaznacz kolumnę Klient, a następnie w kolumnie Przekształć rozwiń ikonę Anuluj
przestawienie kolumn i wybierz polecenie Anuluj przestawienie innych kolumn. Ewentualnie
kliknij prawym przyciskiem myszy nagłówek kolumny Klient i z podręcznego menu wybierz
polecenie Anuluj przestawienie innych kolumn. Zmień nazwę kolumny Atrybut na Kategoria,
a nazwę kolumny Wartość na Przychód.
Jak widać, w przypadku stosowania przekształcenia Anuluj przestawienie bardzo ważne jest usuwanie
sum z tabeli. Jest to prosta operacja, a za pomocą nieskomplikowanej formuły M można usuwać nie
tylko wiersz z sumami, ale również inne znajdujące się niżej wiersze zawierające nieistotne informacje.
Gotowe rozwiązanie jest zapisane w plikach R06-03 - rozwiązanie.xlsx oraz R06-03 - rozwiązanie.pbix.
155
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 6.6. Za pomocą Power Query można łatwo dekomponować skomplikowane tabele, takie jak powyższa,
zawierające sumaryczne wyniki sprzedaży; tabela w dolnej części rysunku lepiej nadaje się do analizy
156
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 6. DEKOMPONOWANIE TABEL
Więcej o ryzykach związanych z usuwaniem kolumn w oparciu o ich nazwy dowiesz się
w rozdziale 10., „Od złych do dobrych zapytań”, jednak warto o nich wspomnieć już teraz.
Jeżeli tabela zostanie rozbudowana o kolejnego dostawcę, wtedy kolumna Column10 nie będzie
zawierała sum. Dlatego lepszym rozwiązaniem jest usunięcie z panelu Zastosowane kroki kroku
Zmieniono typ, a następnie usunięcie ostatniej kolumny za pomocą następującej formuły:
= Table.RemoveColumns(Przychody_DefinedName,
List.Last(Table.ColumnNames(Przychody_DefinedName)))
157
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 6.7. Za pomocą Power Query można dekomponować skomplikowane tabele, takie jak górna,
podsumowująca sprzedaż w firmie Fabryka Przygód; dolna tabela oczywiście lepiej nadaje się do analizy
158
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 6. DEKOMPONOWANIE TABEL
3. W oknie Nawigator zaznacz tabelę Przychody i kliknij przycisk Przekształć dane. Zwróć
uwagę, że tabela widoczna w panelu podglądu zawiera przychody firmy Fabryka Przygód,
podobnie jak tabela w górnej części rysunku 6.7.
4. W panelu Zastosowane kroki usuń dwa ostatnie kroki Zmieniono typ i Nagłówki
o podwyższonym poziomie.
5. Usuń ostatnią kolumnę i ostatni wiersz (z sumami) zgodnie z zaleceniami w ćwiczeniu 6.4.
6. Zaznacz kolumnę Column1, a następnie w karcie Przekształć kliknij ikonę Wypełnij i wybierz
polecenie W dół. Jest to niezbędny krok, aby wartości null zastąpić imionami sprzedawców.
7. Zaznacz kolumny Column1 i Column2, a następnie w karcie Przekształć kliknij ikonę Scal kolumny.
W oknie, które się pojawi, wybierz w rozwijanej liście pozycję Dwukropek i kliknij OK.
Uwaga. W ćwiczeniu 6.4 scalenie kolumn było oczywistym krokiem, gdyż później zamieniłeś
rok i miesiąc na datę. W tym przypadku scalenie kolumn zawierających imiona sprzedawców
i nazwy klientów może się wydawać nierozsądne, ponieważ łączone są dwie różne informacje,
co wprowadza pewne zamieszanie. Niemniej jednak ten krok jest niezbędny do zdekomponowania
tabeli. W kroku 13. z powrotem podzielisz kolumnę i posprzątasz ten tymczasowy bałagan.
159
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 6.8. Przedstawiona tabela zawiera przychody firmy Fabryka Przygód podsumowane według
sprzedawców i kategorii produktów
160
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 6. DEKOMPONOWANIE TABEL
5. Zwróć uwagę, że kolumna Kategoria zawiera wartości Akcesoria, suma, Rowery, suma,
Ubrania, suma i Komponenty, suma. (patrz rysunek 6.9). Usuń te wiersze. W tym celu kliknij
przycisk filtru w nagłówku kolumny Kategoria.
RYSUNEK 6.9. Sumy częściowe należy usunąć po zdekomponowaniu tabeli; nie rób tego jednak,
usuwając zaznaczenia w panelu filtr, tylko użyj filtru tekstowego
W tym momencie zapewne chciałbyś w panelu filtru usunąć zaznaczenia pozycji wyróżnionych
na rysunku 6.9. Jeżeli jednak to zrobisz, zapytanie będzie usuwało tylko te właśnie pozycje
i jeżeli w przyszłości w tabeli źródłowej pojawią się nowe kategorie, nie będą usuwane.
6. Aby poprawnie usunąć wiersze, kliknij polecenie Filtry tekstu i Nie kończy się na.
7. W oknie Filtrowanie wierszy, które się pojawi, wpisz w górnym polu po prawej stronie słowo
suma. Następnie zaznacz opcję Oraz, w dolnej rozwijanej liście wybierz nie równa się i w dolnym
polu po prawej stronie wpisz słowo Suma. Kliknij OK, aby zamknąć okno. Sprawdź, czy dane
zostały poprawnie przefiltrowane. W tym celu ponownie kliknij przycisk filtru. W panelu nie
powinny być widoczne pozycje wyróżnione na rysunku 6.9.
Za pomocą powyższego filtru usunąłeś sumy częściowe kategorii. Wciąż jednak istnieją
wiersze zawierające sumy częściowe sprzedawców (wróć do rysunku 6.8 przedstawiającego
wiersze i kolumny zawierające sumy częściowe).
8. Kliknij przycisk filtru w nagłówku kolumny Sprzedawca. Czy widzisz sumy częściowe?
Aby je usunąć, wybierz polecenie Filtry tekstu i Nie kończy się na.
161
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
9. W oknie Filtrowanie wierszy wpisz w górnym polu po prawej stronie słowo suma. Zaznacz
opcję Oraz, w dolnej rozwijanej liście wybierz nie równa się i w dolnym polu po prawej
stronie wpisz słowo Suma. Kliknij OK, aby zamknąć okno. Sprawdź, czy dane zostały
poprawnie przefiltrowane. W tym celu ponownie kliknij przycisk filtru. Sumy częściowe
nie powinny już być widoczne w panelu filtru.
10. Załaduj zdekomponowaną tabelę do skoroszytu Excela lub raportu Power BI. Sumy
częściowe i całkowite zostały usunięte.
Gotowe rozwiązanie jest zapisane w plikach R06-06 - rozwiązanie.xlsx oraz R06-06 - rozwiązanie.pbix.
Podsumowanie
Wracając do analogii z językoznawstwa, w tym rozdziale przeszedłeś z dziedzin składni (oczyszczania
danych) i semantyki (pozyskiwania kontekstu) do dziedziny pragmatyki, w której kontekst danych
może wpływać na ich interpretację. Przekonałeś się, że nawet czyste dane mogą nie nadawać się do
przetworzenia za pomocą tabeli przestawnej Excela lub elementu wizualnego Power BI.
Nauczyłeś się rozpoznawać źle zaprojektowane tabele i poznałeś trzy przekształcenia:
Anuluj przestawienie kolumn, Anuluj przestawienie innych kolumn i Anuluj przestawienie tylko
zaznaczonych kolumn.
Zdekomponowałeś kilka prostych tabel i dowiedziałeś się, jak przetwarzać wiersze i kolumny
zawierające sumy całkowite. Anulowałeś przestawienie kolumn w tabeli z hierarchią agregacji
danych 2×2. W jednym ze scenariuszy przygotowałeś tabelę do zdekomponowania, scalając
kolumny Rok i Miesiąc. Później zająłeś się bardziej ogólnym przypadkiem, w którym scalenie
kolumn stanowiło pośredni krok do dekompozycji tabeli.
W ćwiczeniach w tym rozdziale wykonywałeś serie podobnych operacji: wypełnienie kolumny
kotwicy, scalenie dwóch kolumn w jedną, transpozycja tabeli, wypełnienie nowej kolumny kotwicy,
użycie pierwszego wiersza jako nagłówków kolumn, anulowanie przestawienia kolumn i podzielenie
scalonej kolumny Atrybut.
Na koniec poznałeś technikę usuwania sum częściowych po zdekomponowaniu tabeli. Jest to
bezpieczniejszy sposób niż usuwanie sum przed dekompozycją, ponieważ w miarę upływu czasu
kolumny z sumami mogą zmieniać swoje położenie w tabeli.
W rozdziale 7., „Zaawansowane metody przestawiania tabel i anulowania przestawień”, będziesz
kontynuował swoją przygodę z przekształceniem Anuluj przestawienie kolumn. Poznasz ogólne
rozwiązanie umożliwiające dekomponowanie dowolnej tabeli, bez względu na liczbę poziomów
agregacji danych w wierszach i kolumnach. Dowiesz się również, w jakich sytuacjach takie
przekształcenie jest niewskazane i zamiast niego należy stosować odwrotną operację,
tj. przestawienie kolumn.
162
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7.
Zaawansowane metody
dekomponowania
i agregowania tabel
Niektórzy malarze przekształcają słońce w żółtą plamę, inni przekształcają żółtą plamę
w słońce.
— Pablo Picasso
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Dekomponowanie tabeli
z wielopoziomową hierarchią agregacji danych
W rozdziale 6., „Dekomponowanie tabel”, dowiedziałeś się, jak ważne jest dekomponowanie tabel
i modyfikowanie ich struktur tak, aby można je było przetwarzać za pomocą tabel przestawnych
Excela lub elementów wizualnych Power BI. Swoją przygodę zacząłeś od zdekomponowania prostej
tabeli, a potem zająłeś się bardziej zaawansowanymi przypadkami obejmującymi dwupoziomową
hierarchię agregacji danych.
W tym rozdziale będziesz kontynuował swoją przygodę i dekomponował jeszcze bardziej
skomplikowane tabele o trzech poziomach hierarchii agregacji. Dowiesz się, z jakich przekształceń
składa się uniwersalna procedura umożliwiająca zdekomponowanie tabeli o dowolnej liczbie
poziomów hierarchii.
RYSUNEK 7.1. Każdą tabelę podsumowującą możesz postrzegać jak wirtualną tabelę przestawną; na tym
rysunku taka tabela jest porównana z rzeczywistą tabelą przestawną zawierającą te same wyniki
164
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
Tabela źródłowa pokazana na rysunku 7.1 (zapisana w pliku R07-01.xlsx) zawiera przychody
firmy Fabryka Przygód podsumowane według krajów, stanów/regionów, miast, kolorów, kategorii
i podkategorii. W panelu tabeli przestawnej w dolnej części rysunku widać, że pola Kraj, Stan/region
i Miasto zostały umieszczone w obszarze Wiersze, pola Kolor, Kategoria i Podkategoria w obszarze
Kolumny, a pole Przychód w obszarze Wartości.
Na razie zapewne nie jesteś przekonany, że tabela przestawna może być w czymś pomocna.
Tutaj potrzebna była do zdefiniowania pojęć, których będziemy używać dalej w tym rozdziale.
Dekomponowaną tabelę będziesz mógł sobie wyobrazić jako tabelę przestawną, której odpowiednie
pola zostały umieszczone w obszarach Wiersze i Kolumny. Pojęcia pola wierszy będziesz używał na
określenie kolumn zdekomponowanej tabeli, które mógłbyś umieścić w obszarze Wiersze w panelu
hipotetycznej tabeli przestawnej. Analogicznie pojęcie pola kolumn będzie oznaczało kolumny
zdekomponowanej tabeli, które mógłbyś umieścić w obszarze Kolumny.
Teraz jesteś gotów do pierwszego ćwiczenia, w którym zdekomponujesz tabelę z hierarchią
agregacji danych 3×3. Aby opis był bardziej ogólny, zamiast oznaczenia 3×3 będziemy używać N×M.
Uogólnienie to przyda się dalej w tym rozdziale.
Ćwiczenie 7.1.
Dekompozycja tabeli z hierarchią agregacji danych N×M
Teraz wykonasz serię przekształceń mających na celu zdekomponowanie tabeli źródłowej
przedstawionej na rysunku 7.1. Opisana niżej technika jest podobna do tej, którą stosowałeś
w rozdziale 6. do dekomponowania tabel 2×2. Tutaj jednak będziemy używać ogólnych pojęć, abyś
mógł dekomponować tabele o dowolnej hierarchii agregacji danych w N wierszach i M kolumnach.
Ogólne przekształcenia niezbędne do zdekomponowania tabeli podsumowującej przedstawia
w czytelny sposób rysunek 7.2. Sekwencja kroków jest dość podobna do wykorzystanej w ćwiczeniu
6.5, „Dekompozycja tabeli z hierarchią agregacji danych 2×2”.
1. Utwórz w Excelu nowy skoroszyt lub w Power BI Desktop nowy raport.
W Excelu: kliknij kartę Dane, a następnie polecenia Pobierz dane/Z pliku/Ze skoroszytu.
W Power BI Desktop: rozwiń menu Pobierz dane i wybierz Excel.
2. Odszukaj plik R07-01.xlsx i kliknij przycisk Importuj.
3. W oknie Nawigator zaznacz tabelę Przychody i kliknij przycisk Przekształć dane.
4. W panelu Zastosowane kroki usuń dwa ostatnie kroki Zmieniono typ i Nagłówki
o podwyższonym poziomie.
Wyobraź sobie, że tabela widoczna w panelu podglądu jest tabelą przestawną, której pola
Kraj, Stan/region i Miasto zostały umieszczone w obszarze Wiersze, a pola Kolor, Kategoria
i Podkategoria w obszarze Kolumny. Niech N i M oznaczają odpowiednio liczbę pól wierszy
i kolumn. W tym przypadku N = 3 i M = 3.
5. Zwróć uwagę, że pierwsze dwie (tj. N–1) kolumny zawierają wartość null (z powodu
hierarchicznej struktury pól wierszy). Zaznacz N–1 kolumn, a następnie w karcie
Przekształć kliknij ikonę Wypełnij i wybierz polecenie W dół.
Teraz musisz scalić wszystkie pola wierszy. W ćwiczeniu 6.5 przekształciłeś w ten sposób
dwie kolumny, natomiast tutaj scalisz trzy, czyli N kolumn.
165
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
166
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
6. Zaznacz pierwsze N kolumn, a następnie w karcie Przekształć kliknij ikonę Scal kolumny.
Pojawi się okno o tej samej nazwie. W rozwijanej liście Separator wybierz Dwukropek
i kliknij OK.
Uwaga. Upewnij się, że separator, który wybrałeś, nie pojawia się w danych. Zamiast niego
możesz wybrać nietypową kombinację znaków. Pamiętaj, że wybrany separator wykorzystasz
jeszcze w kroku 12.
Uwaga. Jak wspomniałem, jeżeli dane zawierają dwukropek, użyj zamiast niego tej samej
kombinacji znaków, z której skorzystałeś w kroku 6.
13. Zmień nazwy pierwszych M kolumn na Kolor, Kategoria i Podkategoria, a nazwy N kolejnych
kolumn na Kraj, Stan/region i Miasto.
14. Zmień nazwę kolumny Wartość na inną, opisującą jej zawartość, w tym przypadku Przychód,
i wybierz typ danych Liczba dziesiętna lub Waluta.
15. Załaduj zdekomponowaną tabelę do skoroszytu Excela lub raportu Power BI.
Gotowe rozwiązanie jest zapisane w plikach R07-01 - rozwiązanie.xlsx oraz R07-01 - rozwiązanie.pbix.
167
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
będziesz stosował pojedynczy krok. W tym podrozdziale usprawnisz zapytanie, które utworzyłeś
w ćwiczeniu 7.1, i uogólnisz sekwencję przekształceń dekomponujących, za pomocą których będziesz
mógł przetwarzać dowolną tabelę podsumowującą z dowolną hierarchią pól wierszy i kolumn.
RYSUNEK 7.3. W tym ćwiczeniu wywołasz funkcję wykonującą całą sekwencję przekształceń
dekomponujących tabelę
168
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
= FnDekomponujTabelę(Źródło, {"Kategoria","Podkategoria"},
{"Kolor","Kraj"}, "Przychód")
Tabela podsumowująca zostanie przekształcona w tabelę faktów (patrz dolna część rysunku 7.3).
Czy to nie jest magia? Wyobraź sobie, że na podstawie różnych tabel podsumowujących musisz
utworzyć 50 raportów. W takim przypadku powyższa funkcja okaże się niezwykle przydatna.
Przyjrzyjmy się przez chwilę argumentom funkcji FnDekomponujTabelę. Pierwszy zawiera nazwę
tabeli źródłowej, w tym przypadku Źródło. Drugim argumentem jest lista pól wierszy, tj. Kategoria
i Podkategoria. Listę definiuje się za pomocą nawiasów klamrowych, a jej elementy oddziela
przecinkami. Trzecim argumentem jest lista pól kolumn, tj. Kolor i Kraj. Ostatni, czwarty argument
zawiera nazwę kolumny wartości, w tym przypadku Przychód.
169
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. Ważne jest, abyś zapytaniom nadał nazwy PolaWierszy i PolaKolumn, ponieważ za chwilę
użyjesz ich w kodzie uogólniającym kroki z ćwiczenia 7.1. Zwróć uwagę, że tamtym ćwiczeniu
symbol N oznaczał liczbę pól wierszy, a M liczbę pól kolumn.
5. Utwórz puste zapytanie, zmień jego nazwę na PoleWartości i w pasku formuły wpisz
następujący kod:
= "Przychód"
Zobacz też. W rozdziale 10., „Od złych do dobrych zapytań”, dowiesz się więcej, dlaczego
należy usuwać krok Zmieniono typ i jawnie ustalać typy kolumn.
7. W panelu Zastosowane kroki kliknij krok Zmieniono typ1. W pasku formuły pojawi się
następujący kod:
= Table.TransformColumnTypes(#"Podzielono kolumnę według ogranicznika",{{"Atrybut.1",
type text}, {"Atrybut.2", type text}, {"Atrybut.3", type text}})
170
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
Ten krok został utworzony po podzieleniu kolumny Atrybut. Usuń go, ponieważ w niektórych
przypadkach nie będzie działał. Przykładowo podczas dekomponowania tabeli z dwoma
poziomami hierarchii w wierszach pojawią się dwie, a nie trzy kolumny, których typ
należałoby zmienić. Dlatego kliknij ikonę krzyżyka po lewej stronie kroku i w oknie
Usuwanie kroku kliknij przycisk Usuń.
171
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. W pasku formuły powyższy kod jest wpisany w jednym wierszu. Tutaj, aby był bardziej
czytelny, został podzielony na kilka wierszy.
Aby dynamicznie odwołać się do N kolumn tabeli źródłowej, użyj podobnego kodu, jak
w poprzednim kroku, z tą różnicą, że w drugim argumencie funkcji List.FirstN umieść N,
a nie N–1. Poniżej przedstawiona jest zmodyfikowana formuła (w formacie wielowierszowym)
kroku Scalono kolumny:
= Table.CombineColumns(
#"Wypełniono w dół",
List.FirstN(
Table.ColumnNames(#"Wypełniono w dół"),
List.Count(PolaWierszy)
),
Combiner.CombineTextByDelimiter(":", QuoteStyle.None),
"Scalone"
)
172
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
10. Przejdź do następnego kroku wymagającego modyfikacji, tj. Wypełniono w dół1. Ten krok
został utworzony w wyniku drugiego przekształcenia Wypełnij w dół (patrz ćwiczenie 7.1,
krok 8.). Poniżej znajduje się kod widoczny w pasku formuły:
= Table.FillDown(#"Transponowano tabelę",{"Column1", "Column2"})
Musisz w nim zamienić wpisaną na stałe listę na jej dynamiczną wersję. Tym razem jednak,
ponieważ operacja jest wykonywana na tabeli przetransponowanej, musisz wypełnić M–1
kolumn wymienionych w liście PolaKolumn. Poniżej przedstawiony został zmodyfikowany kod:
= Table.FillDown(
#"Transponowano tabelę",
List.FirstN(
Table.ColumnNames(#"Transponowano tabelę"),
List.Count(PolaKolumn) - 1
)
)
Tutaj, inaczej niż w kroku 9., do wyliczenia wartości M–1 wykorzystałeś funkcję List.Count
z argumentem PolaKolumn, a nie PolaWierszy.
11. W panelu Zastosowane kroki zaznacz krok Anulowano przestawienie innych kolumn.
W pasku formuły pojawi się kod z wpisanymi na stałe nazwami kolumn:
= Table.UnpivotOtherColumns(#"Nagłówki o podwyższonym poziomie", {"::Kolor",
"::Kategoria", "Kraj:Stan / region:Miasto / kategoria"}, "Atrybut", "Wartość")
W ćwiczeniu 7.1 zastosowałeś przekształcenie Anuluj przestawienie innych kolumn
po uprzednim zaznaczeniu M kolumn. Aby dynamicznie zaznaczać kolumny,
wpisz następujący kod:
= Table.UnpivotOtherColumns(
#"Nagłówki o podwyższonym poziomie",
List.FirstN(
Table.ColumnNames(#"Nagłówki o podwyższonym poziomie"),
List.Count(PolaKolumn)
),
"Atrybut",
PoleWartości
)
Zastosowałeś tutaj podobną technikę jak poprzednio z tą różnicą, że zamiast liczby M użyłeś
M–1, a w argumencie funkcji Table.ColumnNames umieściłeś identyfikator #"Nagłówki
o podwyższonym poziomie" reprezentujący poprzednie przekształcenie.
Dodatkowo, jako nowej nazwy kolumny użyłeś zapytania PoleWartości zamiast ciągu
"Wartość". Dzięki temu będziesz mógł kolumnie nadać nazwę Przychód. Zrobisz to później,
w kroku zmieniającym nazwę kolumny.
12. W panelu Zastosowane kroki zaznacz krok Podzielono kolumnę według ogranicznika.
W pasku formuły pojawi się następujący kod dzielący kolumnę Atrybut na N kolumn
o nazwach Atrybut.1, Atrybut.2 itd.:
= Table.SplitColumn(
#"Anulowano przestawienie innych kolumn",
"Atrybut",
Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv),
{"Atrybut.1", "Atrybut.2", "Atrybut.3"}
)
173
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Czwarty argument funkcji Table.SplitColumn zawiera liczbę lub listę nazw kolumn, które mają
być utworzone w wyniku podziału. Tutaj zamiast domyślnych nazw Atrybut.X użyj nazw
wymienionych w zapytaniu PolaWierszy. Poniżej przedstawiony jest zmodyfikowany kod:
= Table.SplitColumn(
#"Anulowano przestawienie innych kolumn",
"Atrybut",
Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv),
PolaWierszy
)
174
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
175
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Źródło = Źródło,
20. Kliknij przycisk Gotowe i zmień nazwę zapytania Przychody na FnDekomponujTabelę.
Zwróć uwagę, że w panelu Zapytania funkcja FnDekomponujTabelę jest oznaczona ikoną fx, tak
jak na rysunku 7.4. Gdy klikniesz tę funkcję, w panelu podglądu nie pojawią się dane, tylko panel
Wprowadź parametry, w którym będziesz mógł wywoływać funkcję. W tym przypadku jednak
funkcja nie będzie działała poprawnie, ponieważ w polach parametrów nie można wpisywać list.
Ponadto zwróć uwagę, że w panelu Zastosowane kroki cała sekwencja kroków została zredukowana
do pojedynczego kroku, a samej funkcji nie można już edytować za pomocą interfejsu programu.
RYSUNEK 7.4. Funkcję utworzoną za pomocą zaawansowanego edytora, a nie z wykorzystaniem polecenia
„Utwórz funkcję”, można modyfikować tylko w edytorze; po przekształceniu zapytania w funkcję w panelu
„Zastosowane kroki” widoczny jest tylko jeden krok, którego nie można edytować
176
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
Zatrzymaj się na chwilę i przyjrzyj dokładniej, co zrobiłeś. W kroku 18. wpisałeś kod
przekształcający zapytanie w funkcję. Funkcja może być samodzielnym zapytaniem, tak jak w tym
przypadku, lub wewnętrznym elementem innego zapytania. Wywołana z argumentami tworzy
nową wartość. Funkcję wywołuje się, wpisując jej nazwę, a za nią w nawiasach ciąg parametrów
oddzielonych przecinkami. Tutaj zdefiniowałeś następujące argumenty:
Źródło — przekształcana tabela źródłowa,
PolaWierszy — lista pól do umieszczenia w wierszach (tutaj Kraj, Stan/region i Miasto),
PolaKolumn — lista pól do umieszczenia w kolumnach (tutaj Kolor, Kategoria i Podkategoria),
PoleWartości — nowa nazwa kolumny Wartość w zdekomponowanej tabeli (tutaj Przychód).
Symbol => oddziela deklarację interfejsu funkcji od jej implementacji. Część implementacyjną
ukończyłeś w chwili, gdy uogólniłeś poszczególne kroki, używając parametrów Źródło, PolaWierszy,
PolaKolumn i PoleWartości.
Zwróć uwagę, że w nagłówku funkcji można jawnie określić typ argumentów, jak również typ
zwracanego wyniku. Służy do tego celu słowo kluczowe as, po którym umieszcza się oznaczenie
typu. Poniżej przedstawiony jest silnie typowany nagłówek funkcji:
(Źródło as table, PolaWierszy as list, PolaKolumn as list, PoleWartości as text) as table =>
Możesz użyć tego kodu zamiast wiersza wpisanego w kroku 18. Jeżeli zadeklarujesz typy
argumentów, wtedy próba wywołania funkcji z argumentami niewłaściwych typów zakończy się
błędem. Jeżeli np. w argumencie PolaWierszy umieścisz ciąg "Kraj, Stan / region, Miasto",
a nie listę, wtedy pojawi się następujący komunikat:
Expression.Error: Nie możemy przekonwertować wartości "Kraj, Stan / region,..." na typ List.
Szczegóły:
Value=Kraj, Stan / region, Miasto
Type=Type
= Źródło
Zmień go na następujący:
= FnDekomponujTabelę(Źródło, PolaWierszy, PolaKolumn, PoleWartości)
W tym momencie możesz usunąć zapytania PolaWierszy, PolaKolumn oraz PoleWartości
i wpisać następujący kod:
= FnDekomponujTabelę(Źródło, {"Kraj", "Stan / region", "Miasto"}, {"Kolor", "Kategoria",
"Podkategoria"}, "Przychód")
Co ciekawe, ale niezbyt praktyczne, powyższa funkcja poprawnie dekomponuje nawet tabelę
1×1. (Zawsze warto testować szczególne przypadki użycia funkcji i zapytań). Możesz np.
zaimportować tabelę, której użyłeś w ćwiczeniu 6.1 (skoroszyt R06-01.xlsx) i po ostatnim
kroku Zmieniono typ utworzyć niestandardowy krok z następującym kodem:
177
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Wnioski
W tym podrozdziale dowiedziałeś się, jak uogólniać sekwencję przekształceń dekomponujących
skomplikowaną tabelę podsumowującą z wielopoziomową hierarchią agregacji danych w wierszach
i kolumnach. Nauczyłeś się również tworzyć funkcje za pomocą zaawansowanego edytora. Podczas
udoskonalania kroków zapytania wykorzystywałeś funkcje ColumnNames, List.FirstN i List.Zip.
To sprawia, że zapytanie będziesz mógł wykorzystywać w innych sytuacjach i tworzyć raporty
automatycznie importujące i przekształcające różnego rodzaju tabele źródłowe. W rozdziale 9.,
„Wprowadzenie do języka M”, dowiesz się więcej na temat niestandardowych funkcji, a w rozdziale
10., „Od złych do dobrych zapytań”, poznasz przypadki, w których — wprowadzając niewielkie
modyfikacje w formułach M — można dostosowywać zapytania do zmieniających się w szerokim
zakresie formatów danych.
178
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
RYSUNEK 7.5. W tym ćwiczeniu dowiesz się, jak poprawić niewłaściwie zdekomponowaną tabelę; w tym
przykładzie anulowanie przestawienia czterech kolumn liczbowych spowodowało utworzenie tabeli,
w której każda transakcja zajmuje cztery wiersze
Cztery ostatnie kolumny zawierają dane liczbowe transakcji: Wartość netto (wartość
zamówienia bez podatku i kosztów transportu), Podatek (wartość podatku), Transport
(koszt wysyłki) i Wartość całkowita (suma Wartość netto + Podatek + Transport).
Tabela ta, widoczna w górnej części rysunku 7.5, jest poprawnie zaprojektowana. Każda
transakcja jest umieszczona w osobnym wierszu, można zatem wykonywać proste operacje
na poziomie wierszy, przykładowo wyliczać procentową stawkę podatku.
W kolejnych krokach zdekomponujesz tę tabelę i poznasz skutki tej operacji.
5. Zaznacz cztery ostatnie kolumny, a następnie w karcie Przekształć kliknij ikonę Anuluj
przestawienie kolumn. Jak widać w dolnej części rysunku 7.5, zdekomponowana tabela jest
bardziej skomplikowana niż oryginalna, ponieważ każdy wiersz zawiera tylko jedną
informację kontekstową o danej transakcji.
Wyobraź sobie, że jest to tabela źródłowa i musisz odwrócić jej dekompozycję. Kolejne kroki
pokazują, jak to zrobić.
6. Zaznacz kolumnę Atrybut i w karcie Przekształć kliknij ikonę Kolumna przestawna.
7. W oknie, które się pojawi, wprowadź następujące zmiany.
a. Sprawdź, czy widoczny jest komunikat Utwórz nowe kolumny przy użyciu nazw w kolumnie
„Atrybut”. Na tym etapie nie możesz wybrać do przestawienia innej kolumny niż Atrybut.
Jeżeli w komunikacie jest wymieniona inna kolumna, oznacza to, że w kroku 6. zaznaczyłeś
niewłaściwą kolumnę. W takim przypadku kliknij przycisk Anuluj, zaznacz właściwą
kolumnę i ponownie kliknij ikonę Kolumna przestawna.
179
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 7.6. Opcja „Nie agreguj” w oknie „Kolumna przestawna” pozwala przywrócić zdekomponowaną
tabelę do pierwotnej postaci
180
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
Dlaczego ten format jest popularny? Wyobraź sobie, że musisz zaimportować dane z systemu,
w którym użytkownicy mogą ustawiać setki atrybutów. Kilka z nich jest obowiązkowych, a inne są
opcjonalne.
Eksportowanie takich danych do pliku tekstowego o określonej strukturze byłoby nieefektywną
operacją, ponieważ powstałaby tabela z setkami pustych komórek reprezentujących opcjonalne
atrybuty o nieokreślonych wartościach. Aby nie tworzyć takich rozrzedzonych tabel i plików
zawierających głównie separatory pustych wartości, można eksportować wielowierszowe rekordy,
tj. pary atrybut-wartość. Dlatego format ten jest bardzo popularny, stosowany głównie
do eksportowania plików dzienników i danych o nieokreślonej strukturze.
W następnej części ćwiczenia dowiesz się, jak przetwarzać wielowierszowe pary atrybut-wartość.
Zaczniesz od prostego zadania, w którym przyjmiesz założenie, że każdy rekord składa się ze stałej
liczby wierszy. Następnie zajmiesz się bardziej ogólnym przypadkiem, w którym na początku
każdego rekordu znajduje się taki sam atrybut.
Uwaga. W kroku 6. nie twórz nowej kolumny z wynikami dzielenia bez reszty. Zamiast tego
wykonaj dzielenie bez reszty na kolumnie indeksu.
7. Zaznacz kolumnę Atrybut, a następnie w karcie Przekształć kliknij ikonę Kolumna przestawna.
8. W oknie, które się pojawi, wprowadź następujące zmiany.
a. W rozwijanej liście Kolumna wartości wybierz pozycję Wartość.
b. Rozwiń sekcję Opcje zaawansowane.
c. W rozwijanej liście Agreguj funkcję wartości wybierz pozycję Nie agreguj.
d. Kliknij OK, aby zamknąć okno.
9. Usuń kolumnę Indeks. W ten sposób pomyślnie zagregowałeś dane. Zapisz zapytanie, ponieważ
za chwilę poznasz bardziej ogólną technikę agregowania wielowierszowych rekordów.
Gotowe rozwiązanie jest zapisane w plikach R07-05 - rozwiązanie.xlsx oraz R07-05 - rozwiązanie.pbix.
181
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 7.7. Jeżeli na początku każdego rekordu znajduje się taki sam atrybut (w tym przykładzie „Kraj”),
możesz przekształcić dane w tabelę faktów o właściwej strukturze
182
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 7. ZAAWANSOWANE METODY DEKOMPONOWANIA I AGREGOWANIA TABEL
183
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Podsumowanie
W tym rozdziale zakończyłeś przygodę z dekomponowaniem tabel podsumowujących. Dowiedziałeś
się, jak dekomponować skomplikowane tabele z hierarchią agregacji 3×3 i jak uogólnić przekształcenia
poprzez zastąpienie wpisanych na stałe nazw kolumn formułami M wykorzystującymi funkcje
Table.ColumnNames, List.FirstN i List.Count. Nauczyłeś się przekształcać uogólnione zapytanie w funkcję.
Utworzyłeś funkcję FnDekomponujTabelę, którą pomyślnie przetestowałeś na różnych tabelach.
W tym rozdziale dowiedziałeś się także, jak odwracać dekompozycję tabeli i stosować
przekształcenie Kolumna przestawna w celu poprawienia struktury danych. Poznałeś konsekwencje
dekomponowania wszystkich kolumn tabeli. Dowiedziałeś się, jak agregować dane zapisane
w popularnym formacie danych, tj. wielowierszowych rekordach zawierających pary atrybut-wartość.
Wykorzystałeś do tego celu kolumnę indeksu, kolumnę warunkową i wypełnianie kolumn w dół.
Technikę tę możesz stosować w wielu różnych sytuacjach wymagających przetwarzania
wielowierszowych rekordów.
184
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8.
Praca grupowa
Wielkich rzeczy w biznesie nigdy nie dokonuje jedna osoba. Zawsze jest to udziałem
grupy ludzi.
— Steve Jobs
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. Ten rozdział nie jest poświęcony funkcjonalnościom udostępniania raportów innym
użytkownikom. Temat ten gwałtownie się rozwija i jest traktowany zupełnie inaczej w Excelu
i Power BI. Excel ma pewne ograniczenia dotyczące współdzielenia i odświeżania skoroszytów,
natomiast jego młodszy krewny, Power BI, umożliwia publikowanie raportów w usłudze
PowerBI.com i regularne ich odświeżane. Usługa ta dodatkowo może za pośrednictwem
specjalnego oprogramowania bezpiecznie łączyć się z lokalnymi źródłami danych, dzięki
czemu odbiorcy mogą zawsze mieć dostęp do aktualnych raportów. PowerBI.com oferuje
wiele funkcjonalności współdzielenia raportów (patrz https://docs.microsoft.com/pl-pl/
power-bi/service-share-dashboards) i usprawniania współpracy w obszarze roboczym
(https://docs.microsoft.com/pl-pl/power-bi/service-collaborate-power-bi-workspace).
186
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8. PRACA GRUPOWA
W miarę upływu czasu i wymian raportu Alicja i Bartek będą dodawać do niego kolejne
zapytania importujące lokalne pliki. W pewnym momencie będą musieli zmieniać ścieżki z jednej
na drugą w kilkudziesięciu zapytaniach. Czynność ta, w miarę jak do zespołu będą dołączać kolejni
współautorzy, będzie coraz bardziej czasochłonna. Pewnego dnia wszyscy odkryją, że jest lepsze
rozwiązanie tego problemu, czyli zastosowanie parametru.
Uwaga. W ćwiczeniu 8.2 zmodyfikujesz parametr tak, aby Alicja i Bartek mogli wybierać
predefiniowane wartości, co ułatwi im pracę. W tym ćwiczeniu będzie to prosty parametr,
któremu będzie można przypisywać dowolną wartość.
187
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 8.1. W oknie Parametry możesz tworzyć nowe parametry lub modyfikować istniejące;
parametrów często używa się do definiowania ścieżek do plików źródłowych
Od tej chwili Alicja, Bartek i inni członkowie zespołu mogą modyfikować w jednym miejscu
wartość parametru Ścieżka i odświeżać raport.
Wskazówka. Parametry przydają się w wielu sytuacjach. Można je stosować wszędzie tam,
gdzie każdy użytkownik musi wprowadzać własne wartości. Jeden z przypadków dotyczy
przełączania się pomiędzy ćwiczebnymi, tekstowymi i produkcyjnymi źródłami danych.
W parametrze, który zdefiniowałeś w ćwiczeniu 8.1, ten sam użytkownik może wpisywać nazwy
folderów testowego lub produkcyjnego. Zatem zastosowania parametrów nie ograniczają się do
współdzielenia zapytań między użytkownikami. Za ich pomocą można również kontrolować
cykl życia raportów i zarządzać nimi.
Gotowe rozwiązanie jest zapisane w plikach R08-01 - rozwiązanie.xlsx oraz R08-01 - rozwiązanie.pbix.
188
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8. PRACA GRUPOWA
RYSUNEK 8.2. Użytkownik po otwarciu szablonu Power BI (pliku .pbit) musi podać wartości
wszystkich parametrów
Aby ułatwić pracę Alicji i Bartkowi, którzy wiedzą, jakie ścieżki powinni wpisywać,
wykonaj pozostałą część ćwiczenia.
189
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
7. W karcie Strona główna kliknij ikonę Edytuj zapytania, aby otworzyć edytor Power Query.
8. W karcie Strona główna kliknij ikonę Zarządzaj parametrami. W oknie Parametry wybierz
w rozwijanej liście Sugerowane wartości pozycję Lista wartości.
9. W tabeli poniżej listy wpisz następujące ścieżki:
C:\Dane\R08,
C:\Users\Alicja\Documents\R08,
C:\Users\Bartek\Documents\R08.
10. W rozwijanej liście Wartość domyślna wybierz pozycję C:\Users\Alicja\Documents\R08,
która będzie domyślną wartością parametru. (Ponieważ Alicja jest autorką raportu, więc
należy to uhonorować, wybierając jej ścieżkę jako domyślną). Oczywiście, możesz wybrać
dowolną z trzech ścieżek, które wprowadziłeś w kroku 9.
11. W rozwijanej liście Wartość bieżąca wybierz pozycję C:\Dane\R08, ponieważ w tym folderze
znajduje się Twoje lokalne źródło danych.
12. W polu Opis wpisz następujący tekst: Ścieżka do pliku R08-01.xlsx. Podczas otwierania
szablonu po prawej stronie etykiety Ścieżka będzie widoczna ikona informacyjna. Gdy
użytkownik umieści nad nią kursor myszy, pojawi się dymek z tekstem, który tu wpisałeś.
13. Zanim zamkniesz okno, sprawdź, czy wszystkie ustawienia są takie jak na rysunku 8.3.
RYSUNEK 8.3. Parametr Ścieżka możesz zdefiniować tak, aby można było wybierać jedną z predefiniowanych wartości
190
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8. PRACA GRUPOWA
14. Wykonaj ponownie kroki od 2. do 5., aby utworzyć nowy szablon o nazwie
R08-02 - rozwiązanie 2.pbit.
Tak utworzony szablon możesz udostępnić Alicji i Bartkowi. Gdy któreś z nich otworzy
szablon, zobaczy rozwijaną listę, z której będzie mogło wybrać odpowiednią ścieżkę.
Gotowe rozwiązanie jest zapisane w plikach R08-02 - rozwiązanie.pbit oraz
R08-02 - rozwiązanie 2.pbit.
Za pomocą szablonów można tworzyć uniwersalne raporty wykorzystujące różne źródła
danych o takim samym formacie. Przykład użycia takiego raportu jest opisany na stronie
https://datachant.com/2016/04/29/power-bi-templates.
Uwaga. Zamiast definiować tabelę w krokach 5. i 6., możesz zdefiniować nazwany zakres
komórek. W tym celu zaznacz komórki A1 i A2, a następnie w polu po lewej stronie paska
formuły wpisz Parametry.
Jak pokazuje rysunek 8.4, w pierwszej komórce tabeli znajduje się ścieżka, którą użytkownik
może łatwo modyfikować bez konieczności otwierania edytora Power Query i odszukiwania
w panelu Zapytania potrzebnego parametru. W ten sposób możesz mu ułatwić pracę, a dodatkowo
wskazówki, co musi zrobić (zmienić ścieżkę), będą o wiele prostsze.
191
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 8.4. Parametr Ścieżka możesz w arkuszu Excela zdefiniować w postaci tabeli
Wskazówka. Jeżeli parametrów jest kilka, zdefiniuj każdy z nich w osobnej kolumnie.
W pierwszym wierszu wpisz nazwę, a w drugim wartość parametru. W edytorze Power Query
możesz odwołać się do tak zdefiniowanych parametrów, wykorzystując przekształcenie
Wyszczególnij, opisane w kroku 10.
7. Po zdefiniowaniu tabeli Parametry musisz odwołać się do niej w zapytaniu. W tym celu
zaznacz dowolną komórkę (A1 lub A2), a następnie w karcie Dane kliknij ikonę
Z tabeli/zakresu.
8. Gdy otworzy się edytor Power Query, rozwiń panel Zapytania. Zauważ, że pojawi się w nim
nowe zapytanie o nazwie Parametry, natomiast w panelu podglądu będzie widoczna tabela
z kolumną o nazwie Ścieżka. Jeżeli w przyszłości będziesz potrzebował dodatkowych
parametrów, dodaj do tabeli Parametry w arkuszu kolejne kolumny. Aby użyć określonego
parametru, utwórz nowe zapytanie odwołujące się do powyższego zapytania.
9. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Parametry i wybierz
polecenie Odwołanie. Zmień nazwę nowego zapytania na Ścieżka2. (Za chwilę usuniesz
stary parametr Ścieżka, który zdefiniowałeś w ćwiczeniu 8.1).
10. W panelu Zapytania zaznacz zapytanie Ścieżka2, a następnie kliknij prawym przyciskiem
myszy komórkę C:\Dane\R08 i wybierz polecenie Wyszczególnij. Tabela przekształci się
w tekst zawierający nazwę ścieżki.
Od tej chwili możesz w dowolnym zapytaniu odwoływać się do parametru Ścieżka2. Jeżeli
czujesz się pewnie w języku M, kod, który pojawi się w pasku formuły, będzie dla Ciebie
zrozumiały i prosty w użyciu:
= Źródło{0}[Ścieżka]
192
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8. PRACA GRUPOWA
Uwaga. Opcji ignorowania poziomów prywatności używaj ostrożnie. Jeżeli nie ufasz autorowi
skoroszytu lub gdy zapytania łączą się z nieznanymi Ci zewnętrznymi źródłami danych, nie
wykonuj kroku 12. Istnieje kilka przypadków, w których edytor Power Query nie izoluje
poprawnie źródeł danych i wyświetla komunikat Formula.Firewall. W drugiej części tego
ćwiczenia poznasz bardziej zaawansowany sposób rozwiązania problemu bez konieczności
ignorowania poziomów prywatności.
193
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
13. Usuń parametr Ścieżka i zmień nazwę parametru Ścieżka2 na Ścieżka. Po zmianie nazwy
zapytania Przychody, Kolory i Kategorie będą odwoływać się do zapytania Ścieżka, więc nie
musisz powtarzać kroku 11. i zmieniać w formule identyfikatora Ścieżka2 na Ścieżka.
14. W karcie Strona główna rozwiń ikonę Zamknij i załaduj i wybierz polecenie Zamknij
i załaduj do.
15. W oknie Importowanie danych zaznacz opcję Utwórz tylko połączenie, aby zapytanie Ścieżka
nie ładowało się do nowej tabeli.
Od tej chwili, aby zmienić wartość parametru Ścieżka, nie musisz otwierać edytora Power Query.
Wystarczy, że wpiszesz nową ścieżkę w arkuszu i odświeżysz raport. Jeżeli jednak udostępnisz
skoroszyt innemu użytkownikowi, wtedy przy próbie odświeżenia raportu pojawi się ten sam
komunikat, co w kroku 11. Dlatego musisz powiadomić użytkownika, aby zmienił ustawienia
prywatności w sposób opisany w kroku 12. Opcję tę można również zmienić bez konieczności
otwierania edytora Power Query, klikając w kolumnie Dane ikonę Pobierz dane i polecenie Opcje
dodatku Query. Jeżeli nie chcesz dotykać newralgicznego tematu prywatności, możesz udostępniać
skoroszyt w postaci takiej, jak w ćwiczeniu 8.1, albo zastosować technikę opisaną w drugiej części
ćwiczenia, zapobiegającą wyświetlaniu komunikatu Formula.Firewall.
Gotowe rozwiązanie jest zapisane w pliku R08-03 - rozwiązanie.xlsx. Gdy go otworzysz, pojawi
się wyżej opisany komunikat (chyba że wybrałeś opcję ignorowania poziomów prywatności we
wszystkich skoroszytach). Aby rozwiązać problem, kliknij w karcie Dane ikonę Pobierz dane,
następnie wybierz polecenie Opcje dodatku Query i wykonaj kroki 12b i 12c.
194
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8. PRACA GRUPOWA
RYSUNEK 8.5. Okno Zależności zapytań pokazuje, jak poszczególne zapytania odwołują się
do zewnętrznych źródeł danych
195
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 8.6. Zależności między zapytaniami po scaleniu odwołań rozwiązującym problem komunikatu
Formula.Firewall
Gotowe rozwiązanie jest zapisane w pliku R08-03 - rozwiązanie 2.xlsx. Dzięki zmianom, które
wprowadziłeś, inni użytkownicy nie będą musieli zmieniać ani anulować swoich ustawień prywatności.
Wskazówka. Przebudowanie zapytań, tak aby nie pojawiał się komunikat Formula.Firewall,
nie zawsze jest proste. Scalenie kilku odwołań w jedno zapytanie utrudnia tworzenie elastycznych,
uniwersalnych zapytań. Dlatego przed wykonaniem tej operacji powinieneś rozważyć jej wszystkie
zalety i wady. Jak się przekonasz dalej w tym rozdziale, istnieją sposoby, za pomocą których nie
trzeba w ogóle odwoływać się do dwóch źródeł danych.
196
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8. PRACA GRUPOWA
Zobacz też. Choć używanie lokalnych skoroszytów Excela jako źródeł danych wiąże się z pewnymi
problemami, możesz mimo to publikować raporty w usłudze Power BI i regularnie je odświeżać.
Usługa ta może odwoływać się do lokalnych plików (lub innych lokalnych źródeł) za pomocą
bram danych. Więcej informacji na ten temat znajdziesz na stronie https://docs.microsoft.com/
pl-pl/power-bi/service-gateway-onprem.
Uwaga. Adres URL skoroszytu w celu otwarcia go w przeglądarce można uzyskać na kilka sposobów,
z których większość nie pozwala na otwarcie go w Power Query. Technika z użyciem przycisku
Kopiuj ścieżkę pozwala uzyskać właściwy adres i zaimportować skoroszyt do Power Query.
197
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 8.7. Aby otworzyć skoroszyt w Power Query, musisz skopiować jego adres URL do schowka
Poniżej przedstawiony jest przykładowy adres URL skoroszytu zapisanego w usłudze OneDrive
dla Firm:
https://firma-my.sharepoint.com/personal/admin_firma_com_pl/Documents/Dane/
R08/R08-01.xlsx
Fragmenty wyróżnione pogrubioną czcionką zawierają następujące informacje: nazwę firmy
(Firma), adres e-mail użytkownika (admin@firma.com.pl) i nazwę folderu, w którym znajduje się
plik (Dane/R08).
Poniżej przedstawiony jest przykładowy adres pliku zapisanego w usłudze SharePoint:
https://firma.sharepoint.com/sites/Dane/Shared%20Documents/R08/R08-01.xlsx
W tym adresie fragmenty wyróżnione pogrubioną czcionką zawierają następujące informacje:
nazwę firmy (Firma), nazwę witryny, w której znajduje się plik (Dane) oraz nazwę folderu (R08).
4. Aby zaimportować skoroszyt do Power Query, wykonaj poniższe kroki.
W Excelu: utwórz nowy skoroszyt, a następnie w karcie Dane kliknij ikonę Z sieci Web
(zwróć uwagę, że jest to inne polecenie niż Web Query dostępne w starszych wersjach Excela).
W Power BI Desktop: utwórz nowy skoroszyt, a następnie w karcie Strona główna rozwiń
ikonę Pobierz dane i wybierz polecenie Internet.
5. W oknie Z sieci Web, które się pojawi, wklej w polu Adres URL zawartość schowka
(którą umieściłeś w kroku 3.). Usuń sufiks ?web=1, ponieważ nie zamierzasz otwierać
skoroszytu w aplikacji Excel Online. Kliknij OK, aby zamknąć okno.
6. Jeżeli pierwszy raz importujesz skoroszyt z usługi OneDrive dla Firm lub SharePoint, pojawi
się okno Dostęp do zawartości sieci Web. Zaznacz w panelu po lewej stronie pozycję
Konto organizacyjne i kliknij przycisk Zaloguj się. Po pomyślnym zalogowaniu kliknij
przycisk Połącz.
7. Pojawi się dobrze znane okno Nawigator. Zaznacz arkusz, który chcesz zaimportować,
i kliknij przycisk Przekształć dane.
198
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8. PRACA GRUPOWA
Wskazówka. Aby zaimportować do Power Query plik tekstowy z usługi OneDrive dla Firm
lub SharePoint, utwórz w tym samym folderze tymczasowy skoroszyt Excela i wykonaj kroki
od 1. do 3., aby uzyskać jego adres URL. Następnie wykonaj kroki od 4. do 6., aby zaimportować
plik tekstowy.
199
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 8.8. Okno „Zależności zapytań” pokazuje, jak zapytania importują dane ze skoroszytu zapisanego
w usłudze OneDrive dla Firm
200
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8. PRACA GRUPOWA
RYSUNEK 8.9. Przenosząc pliki z lokalnego folderu do usługi SharePoint, można usprawnić pracę zespołu
nad raportami
1. Przejrzyj zawartość folderu R08-05 - folder. Skoroszyty zawierają katalogi produktów firmy
Fabryka Przygód wprowadzonych do sprzedaży w różnych latach.
2. Skopiuj folder R08-05 - folder do podfolderu Dokumenty w witrynie SharePoint.
3. Otwórz w Excelu skoroszyt R08-05.xlsx lub w Power BI Desktop raport R08-05.pbix
i uruchom edytor Power Query.
W Excelu: otwórz skoroszyt C:\Dane\R08\R08-05.xlsx, a następnie w karcie Dane kliknij
ikonę Pobierz dane i wybierz polecenie Uruchom edytora dodatku Power Query.
W Power BI Desktop: otwórz raport C:\Dane\R08\R08-05.pbix, a następnie w karcie
Strona główna kliknij ikonę Edytuj zapytania.
4. W panelu Zapytania zaznacz zapytanie R08-05 - folder. W panelu podglądu pojawi się lista
produktów firmy Fabryka Przygód. Zapytania widoczne w panelu Zapytania powinny
wyglądać znajomo. Są podobne do tych, które utworzyłeś w rozdziale 3., „Łączenie danych
z kilku źródeł”, w ćwiczeniu 3.3 polegającym na łączeniu skoroszytów zapisanych w folderze.
5. Połącz się z witryną SharePoint i zobacz różnice pomiędzy lokalnymi a współdzielonymi
folderami. W tym celu w edytorze Power Query rozwiń w karcie Strona główna ikonę
Nowe źródło, a następnie wykonaj poniższe kroki.
W Excelu: wybierz polecenia Plik i Folder programu SharePoint.
W Power BI Desktop: w oknie Pobierz dane zaznacz pozycję Folder programu SharePoint
i kliknij przycisk Połącz.
6. W oknie Folder programu SharePoint, które się pojawi, wpisz w polu Adres URL witryny
główny adres swojej witryny, bez podfolderów. Jeżeli np. poddomena nazywa się firma,
a witryna Dane, wtedy adres URL jest następujący:
https://firma.sharepoint.com/sites/Dane
Wskazówka. Podczas korzystania z usługi SharePoint kluczowe znaczenie ma fakt, że nie można
odwoływać się bezpośrednio do określonego podfolderu, tylko do głównego folderu. Aby
zaimportować pliki z wybranego podfolderu, należy użyć filtrów względnych ścieżek i nazw plików.
201
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
7. Jeżeli pierwszy raz łączysz się z witryną SharePoint, pojawi się okno Dostęp do zawartości
sieci Web. Zaznacz w panelu po lewej stronie pozycję Konto organizacyjne i kliknij przycisk
Zaloguj się. Po pomyślnym zalogowaniu kliknij przycisk Połącz.
8. Gdy pojawi się podgląd zawartości folderu, kliknij przycisk Przekształć dane.
9. Ponieważ połączysz się z głównym folderem, w panelu podglądu pojawi się wiele wierszy
zawierających pliki, które Cię nie interesują. Aby wyświetlić wyłącznie pliki znajdujące się
w podfolderze R08-01 - folder, kliknij ikonę filtru w nagłówku kolumny Folder Path.
10. W panelu filtru, który się pojawi, kliknij polecenia Filtry tekstu/Zawiera.
11. W oknie Filtrowanie wierszy, które się pojawi, w polu po prawej stronie rozwijanej listy
zawiera wpisz /R08-05 – folder/ i kliknij OK. W panelu podglądu pojawią się tylko
trzy pliki.
12. Zmień nazwę zapytania na Folder SharePoint i zastosuj je w istniejących zapytaniach.
W tym celu w panelu Zapytania kliknij zapytanie Przykładowy plik.
13. W panelu Zastosowane kroki zaznacz kolumna Źródło. W pasku formuły pojawi się kod
zwracający zawartość bieżącego folderu:
= Folder.Files("c:\Dane\R08\R08-05 - folder")
Zamień powyższy kod na następujący:
= #"Folder SharePoint"
14. W panelu Zapytania zaznacz zapytanie i powtórz krok 13., ponieważ nie powinno
odwoływać się do lokalnego folderu, tylko do witryny SharePoint.
15. Aby zapytanie Folder SharePoint nie było ładowane do tabeli, wykonaj poniższe kroki.
a. W Excelu: w karcie Strona główna rozwiń ikonę Zamknij i załaduj i wybierz polecenie
Zamknij i załaduj do. W oknie Importowanie danych zaznacz opcję Utwórz tylko połączenie.
b. W Power BI Desktop: w panelu Zapytania kliknij prawym przyciskiem myszy zapytanie
Folder SharePoint, a następnie w podręcznym menu usuń zaznaczenie opcji Włącz ładowanie.
Teraz zapytania będą importowały skoroszyty z witryny SharePoint, a nie z lokalnego folderu.
Alicja i Bartek będą zadowoleni.
Gotowe rozwiązanie jest zapisane w plikach R08-05 - rozwiązanie.xlsx oraz R08-05 - rozwiązanie.pbit.
Zagadnienia bezpieczeństwa
Narzędzie Power Query zostało zaprojektowane z myślą o bezpieczeństwie. Podczas tworzenia raportu
łączącego się z firmową bazą danych lub innym repozytorium wymagającym uwierzytelnienia
poświadczenia użytkownika są zapisywane w lokalnym systemie, aby nie trzeba było ich
wprowadzać przy każdorazowym odświeżaniu raportu.
Po udostępnieniu raportu innym użytkownikom poświadczenia pozostają zapisane w lokalnym
systemie. Aby inny użytkownik mógł połączyć się ze źródłem danych, musi wprowadzić swoje
poświadczenia. Dzięki temu nikt postronny nie uzyska dostępu do Twoich poświadczeń.
Czasami będziesz chciał usunąć dane z zapytań, modeli i wizualizacji przed udostępnieniem
raportu. Ten cel możesz osiągnąć za pomocą szablonów Excela lub programu Power BI Desktop.
W ćwiczeniu 8.2 utworzyłeś szablon Power BI, w którym użytkownik przed załadowaniem danych
202
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 8. PRACA GRUPOWA
musiał wprowadzać wartość parametru. W Power BI możesz tworzyć szablony bez parametrów.
Dane nie będą udostępniane innemu użytkownikowi, ponieważ nie będzie ich w szablonie. Jest to
szczególnie praktyczne rozwiązanie w przypadku, gdy każdy współautor raportu ma dostęp tylko do
części wierszy tej samej tabeli w źródle danych.
Excel działa w podobny sposób. Aby utworzyć szablon i usunąć dane z modelu i tabel, kliknij
kartę Plik i wybierz polecenie Zapisz jako. Zanim zapiszesz szablon, sprawdź, czy zmieniłeś typ pliku
na Szablon programu Excel (.xltx). Przed zapisaniem pliku pojawi się następujący komunikat:
Skoroszyt zawiera dane zewnętrzne. Czy chcesz, aby program Microsoft Excel wyczyścił te dane
przed zapisaniem szablonu, a następnie automatycznie odświeżał dane w chwili otwarcia szablonu?
Kliknij przycisk Tak, aby usunąć dane. Gdy inny użytkownik otworzy raport, Power Query
podejmie próbę odświeżenia go. Jeżeli będą potrzebne poświadczenia, poprosi o ich wprowadzenie.
Twoich danych jednak w raporcie nie będzie.
203
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. Narzędzie Power Query zapisuje zapytania w specjalnym miejscu skoroszytu jako
niestandardowe dane XML. Ta część pliku jest również wykorzystywana przez zewnętrzne
dodatki. Dlatego dla bezpieczeństwa powinieneś zawsze przeprowadzać inspekcję kopii
skoroszytu i usuwać z niego zapytania wraz z dodatkowymi danymi.
Podsumowanie
W tym rozdziale poznałeś nowe problemy, z jakimi przyjdzie Ci się mierzyć podczas zespołowego
tworzenia raportów i udostępniania ich innym użytkownikom w grupie.
W ćwiczeniach 8.1 i 8.2 dowiedziałeś się, jak udoskonalać zapytania za pomocą parametrów
i szablonów, aby inni współautorzy mogli ładować dane do raportów ze swoich lokalnych źródeł.
W ćwiczeniu 8.3 nauczyłeś się definiować tabelę parametrów i ładować ją jako zapytanie Parametry.
Zastosowałeś przekształcenie Wyszczególnij, aby załadować wartość parametru, oraz scalenie
wybranych zapytań, aby zapobiec pojawianiu się komunikatu Formula.Firewall.
W ćwiczeniach 8.4 i 8.5 dowiedziałeś się, jak importować dane z usług OneDrive dla Firm
i SharePoint. Zmodyfikowałeś utworzone wcześniej zapytania tak, aby ładowały dane
ze współdzielonych skoroszytów i folderów, a nie z lokalnych plików.
Na koniec zapoznałeś się z kilkoma zagadnieniami bezpieczeństwa i technikami usuwania danych
z raportów. Dowiedziałeś się, jak w drodze inspekcji skoroszytu usuwać z niego wszystkie zapytania.
Teraz, kiedy nabrałeś biegłości w posługiwaniu się narzędziem Power Query, nadszedł czas, abyś
wszedł do królestwa języka M i wzbogacił swoje umiejętności przetwarzania danych.
204
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9.
Wprowadzenie do języka M
M jest językiem do tworzenia formuł w narzędziu Power Query. Gdy definiujesz za pomocą edytora
kroki przekształcające dane, generowany jest kod w języku M. Każdy krok jest zamieniany na jeden
lub kilka wierszy kodu, który pojawia się w pasku formuły i można go edytować. Wszystkie kroki
razem wzięte tworzą wyrażenie M, czyli blok kodu definiujący przekształcenia wykonywane przez
zapytanie. Kod ten można modyfikować za pomocą zaawansowanego edytora.
W zaawansowanym edytorze można wpisywać od podstaw pełny kod definiujący zapytanie,
ale większość przekształceń definiuje się za pomocą interfejsu programu. Nie trzeba wtedy używać
języka M ani edytować wyrażeń. Niemniej jednak głębsza znajomość języka M daje możliwość
rozwiązywania bardziej skomplikowanych problemów i tworzenia zapytań przetwarzających
najbardziej nieuporządkowane dane.
Jeśli nie chcesz uczyć się nowego języka programowania, ten rozdział i tak może być przydatny.
Język M, w odróżnieniu od typowych języków programowania, pozwala osiągnąć bardzo wiele przy
jego niewielkiej znajomości.
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Nauka języka M
Po wykonaniu ćwiczeń z poprzednich rozdziałów powinieneś bez problemów przeczytać i zrozumieć
ten rozdział, w którym język M jest opisany wprost. W kolejnych podrozdziałach została przedstawiona
składnia, natomiast tematem tego podrozdziału są korzyści płynące ze znajomości języka M.
Do tej pory miałeś do czynienia z językiem M sporadycznie, gdy korzystałeś z jednego z trzech
elementów interfejsu programu. Oto one.
Pasek formuły. Wiesz już, jak dostosowywać przekształcenia do własnych potrzeb
poprzez modyfikowanie kodu M w pasku formuły. Do tej pory robiłeś to w sytuacjach,
gdy interfejs programu nie oferował wymaganych funkcjonalności (np. filtrowania
kolumn wg zaawansowanych kryteriów).
Kolumna niestandardowa. Kodowałeś pewne przekształcenia na poziomie wierszy,
a wyniki zapisywałeś w nowej kolumnie.
Zaawansowany edytor. Za pomocą tego edytora można modyfikować wiele wierszy
zapytania jednocześnie, wykorzystywać kody innych zapytań i tworzyć niestandardowe
funkcje do specjalnych zastosowań.
Jeżeli nawet nie rozumiesz w pełni składni i znaczenia kodu, do pewnego stopnia możesz je
poznać, analizując kod automatycznie generowany przez interfejs użytkownika. Jest to ważna rzecz,
o której powinieneś pamiętać. Najlepszym sposobem nauczenia się języka M jest definiowanie
kroków przekształceniowych za pomocą interfejsu programu, a następnie stopniowe, coraz głębsze
analizowanie generowanego kodu.
206
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
RYSUNEK 9.1. Na każdym kolejnym etapie opanowywania języka M będziesz rozwiązywał coraz więcej
problemów, jednak z większością poradzisz sobie już na drugim etapie
207
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
208
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Zobacz też. Gdy osiągniesz etap szósty, będziesz programistą M przygotowanym do tworzenia
własnych konektorów dla Power BI, umożliwiających łączenie się z usługami i korzystanie
ze znajdujących się w nich danych i aplikacji, które nie są standardowo dostępne. Tworzenie
własnych konektorów nie jest opisane w tej książce. Aby się dowiedzieć, jak to robić, odwiedź
stronę https://github.com/Microsoft/DataConnectors.
Informacje online
Żeby przejść do następnego etapu opanowania języka M, zacznij od zapoznania się z oficjalnym,
wyczerpującym repozytorium Power Query dostępnym na stronie Microsoft MSDN Library
https://msdn.microsoft.com/query-bi/m/power-query-m-reference.
Na powyższej stronie często brakuje konkretnych przykładów ułatwiających głębsze poznanie
zastosowania różnych funkcji. Dlatego zachęcam do przeszukiwania blogów, na których możesz
znaleźć artykuł na interesujący Cię temat. Poniżej wymieniam kilka najpopularniejszych blogów:
Chria Webb, analityka biznesowa: https://blog.crossjoin.co.uk/category/power-query,
Ken Puls (Excelguru): https://www.excelguru.ca/blog,
Matt Allington (Excelerator BI): https://exceleratorbi.com.au/category/power-query-2,
Reza Rad’s (RADACAD): http://radacad.com/category/power-query,
Imke Feldmann (BICCOUNTANT): http://www.thebiccountant.com,
DataChant: https://datachant.com.
Informacje offline
Wyobraź sobie, że lecisz samolotem gdzieś daleko, nie masz połączenia z internetem, za to bardzo
potrzebujesz dokładnie dowiedzieć się, jak działa dana funkcja M. Edytor Power Query jest
wyposażony w skorowidz wszystkich dostępnych funkcji, zawierający czasami więcej informacji
i przykładów niż oficjalna strona MSDN. Dlatego zachęcam do korzystania z niego.
Aby otworzyć dokumentację wybranej funkcji, wpisz po prostu w pasku formuły znak równości,
a po nim nazwę funkcji bez nawiasów i argumentów. Gdy naciśniesz Enter, w panelu podglądu
pojawi się dostępna offline dokumentacja. Jeżeli np. używasz funkcji Table.ColumnNames(Źródło)
zwracającej listę nazw kolumn tabeli Źródło, usuń nawiasy i nazwę tabeli, tak jak niżej. Uzyskasz
dokumentację pokazaną na rysunku 9.2.
= Table.ColumnNames
209
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 9.2. Aby otworzyć dokumentację offline funkcji, wpisz w pasku formuły jej nazwę
= #shared
W panelu podglądu pojawi się tabela. Nie będzie to jednak typowa tabela, tylko tzw. rekord,
w którym pierwsza kolumna zawiera nazwy kluczy (zwanych również polami), a druga ich
wartości.
4. Kliknij puste miejsce obok odnośnika Function. W dolnej części panelu pojawi się
dokumentacja offline wybranej funkcji. Gdy klikniesz odnośnik, pojawi się szczegółowy opis.
5. Aby za pomocą interfejsu Power Query wyświetlić listę wszystkich funkcji operujących
na listach, zamień najpierw wyświetlony rekord na tabelę, klikając w kolumnie Konwertuj
ikonę Do tabeli.
6. Następnie kliknij ikonę filtru w nagłówku kolumny Name i wybierz polecenia Filtry tekstu
i Zaczyna się od.
210
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
7. W oknie Filtrowanie wierszy, które się pojawi, w polu po prawej stronie rozwijanej listy
zaczyna się od wpisz List i kliknij OK. Pojawi się wykaz wszystkich funkcji operujących
na listach. Dokumentację do nich możesz otworzyć w sposób opisany w kroku 4.
Gotowe rozwiązanie jest zapisane w plikach R09-01- rozwiązanie.xlsx oraz R09-01 - rozwiązanie.pbix.
let
Źródło = "Witaj, ",
Krok2 = Źródło & " ",
Krok3 = Krok2 & "świecie!"
in
Krok3
3. Kliknij przycisk Gotowe, aby zamknąć zaawansowany edytor.
W panelu podglądu pojawi się napis „Witaj, świecie!”. Gratulacje! Napisałeś swój pierwszy
program w języku M. Przeanalizujemy teraz program pod kątem terminologii stosowanej w języku
M i sprawdzimy, jak jest on powiązany z elementami interfejsu programu. Rysunek 9.3 przedstawia
główne elementy interfejsu, tj. zaawansowany edytor, pasek formuły i panel Zastosowane kroki,
powiązane z odpowiednimi blokami konstrukcyjnymi języka M.
W panelu podglądu widoczny jest napis „Witaj, świecie!”. Zazwyczaj w tym miejscu znajduje się
tabela, ale tutaj jest to tekst, ponieważ taką wartość zwraca wyrażenie, które wpisałeś w zaawansowanym
edytorze. W pasku formuły widoczny jest następujący wiersz:
= Krok2 & "świecie!"
Powyższy kod jest wyrażeniem, które przypisałeś do identyfikatora Krok3. Wyrażenie to dołącza
ciąg "świecie!" do wartości zmiennej Krok2. W pasku formuły widoczne jest wyrażenie, a w panelu
Zastosowane kroki identyfikator Krok3.
211
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 9.3. Z blokami konstrukcyjnymi języka M powiązanych jest kilka elementów interfejsu programu
Power Query: zaawansowany edytor, pasek formuły i panel Zastosowane kroki
Gdy w panelu Zastosowane kroki klikniesz Krok2, w pasku formuły pojawi się następujący kod:
= Źródło & " "
Przecinek znajdujący się na końcu wiersza nie jest widoczny w pasku formuły, jednak jest
potrzebny, ponieważ oddziela pary identyfikator-wyrażenie składające się na wyrażenie let.
Większość zapytań jest zamieniana na jednowierszowe kroki, takie jak Źródło, Krok2
i Krok3 (pokazane na rysunku 9.2). Jednak w języku M można tworzyć złożone wyrażenia
i definiować warunki zmieniające przebieg wykonywania kodu. Więcej na ten temat dowiesz się
w tym rozdziale, w punkcie „Wyrażenie if wewnątrz wyrażenia let”. Zanim jednak zagłębimy się
w bardziej zaawansowane tematy, przyjrzyjmy się bliżej wyrażeniu let, ponieważ w większości
przypadków będzie to pierwsza instrukcja umieszczana w zaawansowanym edytorze po jego
pierwszym otwarciu.
212
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Wyrażenie let
Za każdym razem, gdy tworzysz nowe zapytanie w edytorze Power Query, importujesz
i przekształcasz dane, tworzone jest wyrażenie let. Gdy otworzysz zaawansowany edytor,
zobaczysz wyrażenie M zaczynające się od słowa let i zazwyczaj kończące się słowem in
oraz identyfikatorem ostatniego kroku.
Wyrażenie let służy do tworzenia mniejszych wyrażeń, które są później łączone w pojedynczą
wartość. Przeanalizujmy prosty przykład z ćwiczenia 9.2. Wyrażenie let składa się tam z trzech
kroków. Krok Źródło zwraca wartość "Witaj,", Krok2 zwraca wartość kroku Krok1 z dopisaną
na jego końcu spacją, a Krok3 zwraca wartość kroku Krok2 z dołączonym słowem "świecie!".
Instrukcja in definiuje drugą fazę przekształceń, których wynik zwraca wyrażenie let. W tym
prostym przykładzie po instrukcji in umieszczony jest tylko Krok3. W efekcie zwracanym wynikiem
jest wartość identyfikatora Krok3, czyli tekst "Witaj, świecie!".
Wyrażenie let służy również do tworzenia wyrażeń, których wartości są wyliczane po słowie in.
Poniżej przedstawiony jest przykład kodu zwracającego tekst "Witaj, świecie!!!".
let
Źródło = "Witaj,",
Krok2 = Źródło & " ",
Krok3 = Krok2 & "świecie!"
in
Krok3 & "!!"
W tym wyrażeniu po słowie in nie jest umieszczony identyfikator Krok3, tylko wyrażenie
złączające identyfikator Krok3 i tekst "!!". Poniżej przedstawiony jest podobny przykład, w którym
wewnątrz sekcji let zdefiniowany jest identyfikator Wykrzykniki, użyty dalej w sekcji in.
let
Źródło = "Witaj,",
Krok2 = Źródło & " ",
Krok3 = Krok2 & "świecie!",
Wykrzykniki = "!!"
in
Krok3 & Wykrzykniki
Wyrażenie let można zagnieżdżać i tworzyć wyrażenia złożone. Poniżej przedstawiony jest
przykład wyrażenia zwracającego tekst "Witaj, świecie!!!".
let
PierwszeSłowo =
let
Źródło = "Witaj,"
in
Źródło,
DrugieSłowo =
let
Źródło = "świecie"
in
Źródło
in
PierwszeSłowo & " " & DrugieSłowo & "!!!"
213
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Powyższe wyrażenie jest oczywiście poprawne, ale trudno się nim posługiwać w edytorze Power
Query. Ze względu na operacje niezbędne do wyliczenia ostatecznego wyniku całe wyrażenie jest
umieszczane w pasku formuły, ale w panelu Zastosowane kroki nie są widoczne poszczególne kroki.
Aby rozwiązać ten problem i utworzyć kroki, tak jak na rysunku 9.4, musisz w kodzie przed
ostatnim słowem in zdefiniować identyfikator Wynik, tak jak niżej:
let
PierwszeSłowo =
let
Źródło = "Witaj,"
in
Źródło,
DrugieSłowo =
let
Źródło = "świecie"
in
Źródło,
Wynik = PierwszeSłowo & " " & DrugieSłowo & "!!!"
in
Wynik
RYSUNEK 9.4. Jeżeli po ostatnim słowie „in” znajduje się wyrażenie, a nie pojedynczy identyfikator,
wtedy w panelu „Zastosowane kroki” widoczny jest tylko jeden krok; rozwiązanie problemu polega
na umieszczeniu opisanej wyżej instrukcji
Na pewno zauważyłeś, że identyfikator Źródło jest użyty dwukrotnie. Jeżeli w wyrażeniu let
dwukrotnie zdefiniuje się taki sam identyfikator, wtedy pojawi się następujący komunikat:
Zmienna o nazwie „Źródło” została już zdefiniowana w tym zakresie.
Jednak w powyższym przykładzie zostały użyte dwa różne wyrażenia let, jedno zagnieżdżone
w drugim. Wszystkie identyfikatory zdefiniowane w wewnętrznym wyrażeniu let są traktowane jak
lokalne i nie są dostępne w zewnętrznym wyrażeniu let. W części kodu, w której identyfikator
Źródło jest wykorzystywany do określenia wartości identyfikatora PierwszeSłowo, nie jest widoczny
identyfikator Źródło stosowany do określenia wartości identyfikatora DrugieSłowo, ponieważ obie
instancje identyfikatora Źródło znajdują się w różnych zakresach.
214
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
215
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
216
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Ten kod zwróci wynik 1, a nie 2, mimo że identyfikator A został powiększony o 1 w wewnętrznym
wyrażeniu let. W zewnętrznym zakresie identyfikator ten ma cały czas wartość 1. Uwzględniając
zakresy, należy ten kod interpretować w następujący sposób:
let
A_zewnętrzny_zakres = 1,
B =
let
A_wewnętrzny_zakres = A_zewnętrzny_zakres + 1
in
A_wewnętrzny_zakres
in
A_zewnętrzny_zakres
Wskazówka. Temat zakresów jest dość trudny. Pamiętaj, że możesz zapobiec generowaniu
błędnych wyników, stosując unikatowe identyfikatory.
Teraz, gdy lepiej rozumiesz wyrażenie let, czas, abyś poznał typy danych w języku M.
RYSUNEK 9.5. Wyrażenie „1000 is number” wpisane w pasku formuły zwraca wartość TRUE
217
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. W języku M wielkość liter ma znaczenie. Słowa TRUE lub FALSE pisane wielkimi
literami pojawiają się tylko podczas ich wyświetlania, tak jak na rysunku 9.5. W wyrażeniach
należy używać małych liter, tj. true lub false. Gdy użyje się np. wartości TRUE, wtedy pojawi się
następujący komunikat:
Expression.Error: Nie można rozpoznać nazwy „TRUE”. Sprawdź, czy została wpisana poprawnie.
218
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Załóżmy, że chciałbyś użyć funkcji Number.X, której nie ma w interfejsie programu. Może to być
np. funkcja Number.Sqrt wyliczająca pierwiastek kwadratowy. Aby jej użyć, możesz w programie
Power Query zaznaczyć kolumnę zawierającą liczby i zastosować przekształcenie liczbowe.
Poniżej przedstawiona jest formuła utworzona w wyniku zastosowania przekształcenia
Wykładnicze/Wartość bezwzględna:
= Table.TransformColumns(Źródło,{{"Kolumna1", Number.Abs, type number}})
Aby wykonać żądane przekształcenie wartości w kolumnie Kolumna1, możesz zastąpić funkcję
Number.Abs funkcją Number.X (w tym przykładzie Number.Sqrt):
= Table.TransformColumns(Źródło,{{"Kolumna1", Number.Sqrt, type number}})
Jeżeli funkcja Number.X ma kilka argumentów, umieść słowo each, a po nim nazwę funkcji,
znak podkreślenia reprezentujący wartość liczbową oraz pozostałe argumenty. Poniżej przedstawiony
jest przykład formuły podnoszącej do trzeciej potęgi wartości zawarte w kolumnie Kolumna1:
= Table.TransformColumns(Źródło,{{"Kolumna1", each Number.Power(_,3), type number}})
Dalej w tym rozdziale opisane są podstawowe typy wartości w języku M, tj. number, time, date,
duration, text, null i logical.
Typ number
Typ number oznacza wartość liczbową wykorzystywaną w operacjach arytmetycznych, np. 1, −3.14
lub 2.0e5. Można stosować też format szesnastkowy. Przykładowo zapis 0xff oznacza liczbę 255.
Liczba w języku M zajmuje 8 bajtów pamięci i reprezentuje wartości z zakresu od 2,23 · 10-308
do 1,79 · 10308 z dokładnością do 16 cyfr po przecinku.
Poniżej wymienione są specjalne wartości typu number:
plus nieskończoność: +#infinity
minus nieskończoność: -#infinity
Nieskończoność może być wynikiem niektórych operacji. Przykładowo wynikiem dzielenia
1/0 jest plus nieskończoność, a wynikiem –1/0 jest minus nieskończoność.
nie-liczba: #nan
Wartość #nan (wyświetlana jako NaN) może być wynikiem błędnych operacji
zmiennoprzecinkowych, np. dzielenia zera przez zero.
Do porównywania dwóch liczb służą operatory porównania >, >=, <, <=, = i <>. Do wykonywania
podstawowych operacji arytmetycznych wykorzystywane są operatory +, -, * i /.
Język M oferuje bogaty zestaw wbudowanych funkcji Number.X. Funkcje stałe zwracają specjalne
wartości. Przykładowo Number.PI zwraca wartość stałej . Funkcje informacyjne zwracają wartość
true lub false w zależności od tego, czy dana liczba spełnia określone kryteria. I tak Number.IsEven
sprawdza, czy liczba jest parzysta. Funkcje konwertujące służą do przekształcania wartości różnych
typów na liczby. Przykładowo poniższa funkcja przekształca ciąg "6" na liczbę 6:
= Number.From("6")
W edytorze Power Query w kartach Przekształć i Dodaj kolumnę dostępnych jest wiele funkcji
matematycznych, np. Number.Power (potęga) lub Number.Sin (sinus). Wszystkie funkcje Number.X
są opisane na stronie https://msdn.microsoft.com/query-bi/m/number-functions.
219
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Typ time
Typ time (czas) oznacza liczbę 100-nanosekundowych interwałów, jakie upłynęły od ostatniej
północy. Największa wartość tego typu odpowiada godzinie 23:59:59,9999999. Wartości typu time
można definiować za pomocą wyrażenia #time(godzina, minuty, sekundy). Przykładowo wartość
oznaczającą godzinę 14:54 uzyskuje się, wpisując w pasku formuły następujący kod:
= #time(14, 53, 0)
W panelu podglądu pojawi się następujący wynik:
14:53:00
Z wartościami typu time można używać operatorów porównania >, >=, <, <=, = i <>. Ponadto
za pomocą operatorów +, - i & można wykonywać działania na wartościach typu time i duration
(okres). Aby np. do godziny 14:53 dodać 7 minut, należy użyć następującego wyrażenia:
= #time(14,53,00) + #duration(0,0,7,0)
W panelu podglądu pojawi się wynik:
15:00:00
Za pomocą funkcji Time.X można wyodrębniać poszczególne elementy czasu.
Przykładowo poniższa funkcja:
= Time.Hour(#time(14, 53, 0))
Typ date
Typ date oznacza liczbę dni, jakie upłynęły od 1 stycznia 1 roku (w kalendarzu gregoriańskim).
Największa wartość typu date reprezentuje datę 31 grudnia 9999 r., czyli 3 652 058 dni od początku
epoki. Wartości typu time można definiować za pomocą wyrażenia #date(rok, miesiąc, dzień).
Przykładowo wartość oznaczającą datę 26 sierpnia 2019 r. można uzyskać, wpisując w pasku
formuły następujący kod:
= #date(2019, 8, 26)
W panelu podglądu pojawi się wynik (jeżeli w systemie wybrane są polskie ustawienia regionalne):
2019-08-26
Z wartościami typu date można używać operatorów porównania >, >=, <, <=, = i <>, a za pomocą
operatorów +, - i & można wykonywać działania na wartościach typu date i duration.
W rozdziale 2., „Podstawowe operacje przygotowywania danych”, dowiedziałeś się, jak w edytorze
Power Query można wyodrębniać i przetwarzać daty. W poszczególnych krokach przekształceniowych
były stosowane odpowiednie funkcje Date.X. Język M oferuje bardzo wiele tego rodzaju funkcji.
Przykładowo Date.AddDays dodaje do daty podanej w pierwszym argumencie liczbę dni podanych
w drugim argumencie. Poniższe wyrażenie dodaje 5 dni do daty 26 sierpnia 2019:
= Date.AddDays(#date(2019, 8, 26), 5)
220
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
W panelu podglądu pojawi się następujący wynik (jeżeli w systemie wybrane są polskie
ustawienia regionalne):
2019-08-31
Pełna lista wbudowanych funkcji Date.X znajduje się na stronie https://msdn.microsoft.com/
query-bi/m/date-functions. Język M, oprócz funkcji Date.X i Time.X, oferuje funkcje DateTime.X
i DateTimeZone.X zwracające odpowiednio wartości typu datetime i datetimezone. Funkcje te są
automatycznie generowane przez edytor Power Query podczas stosowania przekształceń
dostępnych w kartach Przekształć i Dodaj kolumnę. Funkcja DateTime.LocalNow zwraca bieżącą
datę i godzinę. Można ją stosować do wyliczania czasu, jaki upłynął od dokonania transakcji,
jak również wykorzystywać w filtrach.
Typ duration
Typ duration oznacza okres pomiędzy dwoma punktami w czasie, wyrażony jako liczba
100-nanosekudowych interwałów. Wartość tego typu może być dodatnia (przesunięcie w przód)
lub ujemna (przesunięcie wstecz). Największa wartość reprezentuje okres 10 675 199 dni, 2 godzin,
48 minut i 5,4775808 sekund.
Wartości typu duration można definiować za pomocą wyrażenia #duration. Przykładowo okres
5 dni i 10 minut uzyskuje się, wpisując w pasku formuły następujący kod:
= #duration(5, 0, 10, 0)
W panelu podglądu pojawi się wynik:
5.00:10:00
Wartości typu duration najczęściej stosuje się z operatorami + i – oraz wartościami typów date,
time, datetime i datetimezone. Przykładowo poniższe wyrażenie dodaje 5 dni do daty 26 sierpnia 2019:
= #date(2019, 8, 26) + #duration(5, 0, 0, 0)
W panelu podglądu pojawi się następujący wynik:
2019-08-31
Wynikiem dodawania lub odejmowania dwóch wartości typu date jest wartość typu duration.
Przykładowo poniższe wyrażenie:
= #date(2019, 8, 26) - #date(2019, 1, 1)
zwraca wynik:
237.00:00:00
Wbudowanych funkcji Duration.X można używać do wyodrębniania z daty liczby dni, godzin,
minut i sekund. Ponadto funkcje Duration.TotalX służą do wyliczania liczby jednostek czasu
w zadanym okresie. Poniższe wyrażenie zwraca liczbę sekund w 5-dniowym okresie:
= Duration.TotalSeconds(#duration(5, 0, 0, 0))
W panelu podglądu pojawi się następujący wynik:
432000
Pełna lista wbudowanych funkcji Date.X znajduje się na stronie https://msdn.microsoft.com/
query-bi/m/duration-functions.
221
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Typ text
Wartość typu text oznacza dowolny ciąg znaków Unicode. Dwie wartości tego typu można łączyć
za pomocą operatora &, tak jak w ćwiczeniu 9.1.
Dostępnych jest wiele funkcji Text.X umożliwiających przetwarzanie wartości tekstowych.
Przykładowo funkcja Text.From przekształca wartość typu number na text. Poniższe wyrażenie
zamienia liczbę na tekst, a później uzyskany wynik łączy z innym tekstem:
= "Test, " & Text.From(123)
W panelu podglądu pojawi się następujący wynik:
Test, 123
W odróżnieniu od typów złożonych, do wyodrębniania znaków z wartości tekstowej nie można
używać nawiasów [] ani {}. Aby wyodrębnić określony znak, należy użyć funkcji Text.At, której
pierwszym argumentem jest zadany tekst, a drugim indeks znaku. Pierwszy znak ma indeks 0.
Przykładowo poniższe wyrażenie:
= Text.At("ABCD", 0)
zwraca wynik:
A
Natomiast wyrażenie:
= Text.At("ABCD", 1)
zwraca wynik:
B
Pełna lista funkcji tekstowych znajduje się na stronie https://msdn.microsoft.com/
query-bi/m/text-functions.
Typ null
Typ null oznacza brak wartości. Można z nim używać operatorów porównania i operatorów
arytmetycznych, przy czym wynik takiego wyrażenia będzie zawsze typu null. Jeżeli np. zmienna A
jest typu null, wtedy wyniki wszystkich poniższych wyrażeń są również typu null:
= A < 5
= A >= 5
= A + 1
= A * 5
Specjalnym przypadkiem jest użycie wartości typu null z operatorami porównania = lub <>.
Wynikiem takiego wyrażenia jest wartość true lub false w zależności od tego, czy użyta zmienna
jest typu null, czy nie. Jeżeli np. zmienna A jest typu null, wtedy po wpisaniu w pasku formuły
następującego wyrażenia:
= A = null
222
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Po wpisaniu wyrażenia:
= A <> 5
Typ logical
Typ logical oznacza wartość logiczną true lub false. Wartości tego typu są wynikami operacji
porównania, np.:
A > B
A >= B
A < B
A <= B
A = B
A <> B
A or B
A and B
not A
Do sprawdzania, czy dana wartość jest typu logicznego, służy konstrukcja is logical. Jeżeli np.
zmienna A zawiera wartość false, wtedy poniższe wyrażenie:
= A is logical
223
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Typy złożone
Czas oficjalnie przedstawić Ci typy złożone w języku M, tj. listy, rekordy i tabele, oraz relacje
pomiędzy nimi. Typ prosty definiuje pojedynczą (atomiczną) wartość, natomiast typ złożony
ma określoną strukturę reprezentującą wiele wartości typów prostych lub złożonych.
Dane zaimportowane do programu Power Query zazwyczaj mają postać tabeli. Jednak
w tabelach mogą być zagnieżdżone rekordy, listy i inne tabele (jeżeli dane nie mają określonej
struktury, np. JSON lub XML). Tego rodzaju dane można przekształcać w listy (poprzez
wyszczególnienie kolumny) lub listy rekordów. Zajmijmy się na początek typem list,
najprostszym z trzech typów złożonych.
Typ list
Wartość typu list zawiera ciąg wartości, które można wyliczać. Wartości te mogą być np. listami,
rekordami i tabelami, jak również każda wartość może być innego typu. Listy definiuje się za
pomocą wyrażeń inicjujących, składających się z nawiasów klamrowych, i wartości oddzielonych
przecinkami. Poniżej przedstawiony jest przykład listy zawierającej liczby, wartości logiczne i tekst:
= {1, 3, true, false, "Witaj, świecie!"}
Poniższe wyrażenie, jak pokazuje rysunek 9.6, definiuje listę zawierająca liczby 1, 2 i 3.
= {1, 2, 3}
RYSUNEK 9.6. Listę definiuje się, wpisując w pasku formuły nawiasy klamrowe {}
224
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Aby zdefiniować listę zawierającą kolejne liczby od 1 do N (gdzie N jest wartością zwróconą
przez inne zapytanie, np. przetwarzające dane z innego źródła), należy użyć następującego wyrażenia:
= {1:N}
Ten sam wynik można uzyskać za pomocą funkcji List.Numbers:
= List.Numbers(1, N)
Zakres liczb wewnątrz listy definiuje się za pomocą dwóch kropek (..). Przykładowo poniższe
wyrażenie zwraca listę liczb 1, 4, 5, 6, 7, 8, 9, 10, 15:
= { 1, 4..10, 15 }
Liczbę elementów listy określa się za pomocą funkcji List.Count. Poniższe wyrażenie:
= List.Count( { 1..10} )
zwraca liczbę 0.
zwraca wynik:
A
Natomiast wyrażenie:
= {"A", "B", "C"}{2}
zwraca wynik:
C
225
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Próba odwołania się do elementu spoza listy zakończy się błędem. Poniższe wyrażenie odwołuje
się do czwartego elementu listy składającej się z trzech ciągów "A", "B" i "C":
= {"A", "B", "C"}{3}
Wyrażenie to spowoduje pojawienie się następującego komunikatu:
Expression.Error: Jest za mało elementów w wyliczeniu, aby można było zakończyć operację.
Do pierwszego i ostatniego elementu listy można odwoływać się za pomocą wbudowanych
funkcji odpowiednio List.First i List.Last. Poniższe wyrażenie:
= List.First({"A", "B", "C"})
zwraca wynik:
A
Natomiast wyrażenie:
= List.Last({"A", "B", "C"})
zwraca wynik:
C
Funkcje List.X
Znajomość wbudowanych funkcji operujących na listach bardzo się przydaje podczas przekształcania
zawartości kolumn, np. wyliczania średniej arytmetycznej lub filtrowania wartości. Aby wykonywać
operację na kolumnie, należy kliknąć jej nagłówek prawym przyciskiem myszy i z podręcznego
menu wybrać polecenie Wyszczególnij. W panelu podglądu pojawi się lista, którą można przetwarzać
za pomocą wbudowanych funkcji. Rysunek 9.6 przedstawia narzędzia do obsługi list dostępne
w karcie Przekształć. Jak się przekonasz, język M oferuje znacznie więcej funkcji niż te, które możesz
zobaczyć w tej karcie.
Biblioteka funkcji operujących na listach jest bardzo bogata. Poniżej wymienione są kategorie
i przykłady najczęściej stosowanych funkcji.
Funkcje informacyjne: do tej kategorii należą opisana wcześniej funkcja List.Count oraz
List.IsEmpty zwracająca wartość true, jeżeli lista jest pusta, lub false w przeciwnym
przypadku.
Funkcje wybierające: funkcje z tej kategorii zwracają określone elementy lub podlisty.
Przykładowo funkcja List.Select zwraca elementy spełniające zadane kryteria, natomiast
funkcje FirstN i LastN zwracają listy składające się odpowiednio z N pierwszych lub
ostatnich elementów oryginalnej listy.
Funkcje przekształcające: tego rodzaju funkcje służą do modyfikowania list. Do najczęściej
używanych należy funkcja List.Transform wykonująca zadaną operację na każdym
elemencie, oraz List.Combine, działająca podobnie jak operator złączania &. Do tej
kategorii należy również funkcja List.Accumulate, wspomniana w opisie piątego etapu
opanowania języka M i przedstawiona dalej w tym rozdziale.
Funkcje członkowskie: funkcje te wykorzystują operatory porównania do sprawdzania,
czy elementy listy spełniają określone kryteria. Przykładowo funkcja List.Contains zwraca
wartość true, jeżeli lista zawiera zadaną wartość.
226
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Funkcje przypisania: funkcje z tej kategorii wykonują operacje na dwóch listach lub
większej ich liczbie. Przykładowo funkcja List.Intersect zwraca elementy znajdujące się
w dwóch listach, a List.Union zwraca elementy dwóch list bez duplikatów. W rozdziale
10., „Od złych do dobrych zapytań”, opisana jest bardzo przydatna funkcja List.Difference
zwracająca wszystkie elementy pierwszej listy, których nie ma w drugiej liście. Funkcji tej
używa się np. do odwoływania się do innych kolumn tabeli niż o wskazanych nazwach.
Funkcje porządkowe: do tej kategorii należy funkcja List.Sort sortująca liczby lub
wartości dowolnego innego typu, które można ze sobą porównywać. Ponadto dostępne są
funkcje umożliwiające wyodrębnianie określonych elementów na podstawie ich wartości,
a nie pozycji w liście. Przykładowo funkcje List.Min i List.Max zwracają odpowiednio
najmniejszy i największy element, a funkcje List.MinN i List.MaxN odpowiednio n-ty
najmniejszy i największy element.
Funkcje arytmetyczne: funkcje z tej kategorii wykonują na elementach listy operacje
arytmetyczne, takie jak uśrednianie lub sumowanie. Przykładowo funkcje List.Average
i List.StandardDeviation operują na listach składających się z wartości typu number,
datetime i duration, przy czym wszystkie elementy muszą być tego samego typu. Funkcja
List.Sum zwraca sumę elementów typu number lub duration.
Funkcje generujące: funkcje należące do tej kategorii służą do tworzenia list. Wśród nich
są bardzo proste, np. List.Numbers (opisana wcześniej) oraz List.Dates tworząca listę dat
od początkowej do końcowej z zadanymi odstępami, jak również bardziej zaawansowane,
jak funkcja List.Generate tworząca listę na podstawie zadanych danych początkowych,
opisana na końcu tego rozdziału.
Więcej informacji o funkcjach operujących na listach jest dostępnych na stronie
https://msdn.microsoft.com/query-bi/m/list-functions.
Typ record
W Power Query z rekordami ma się do czynienia w dwóch sytuacjach, czyli podczas importowania
danych bez określonej struktury, np. JSON, oraz przekształcania wierszy tabeli. Rekord jest to zestaw
par klucz-wartość. Klucze (zwane również nazwami pól) są to unikatowe identyfikatory tekstowe,
a wartości (zwane wartościami pól) są to dane prostych lub złożonych typów.
Aby zdefiniować rekord, należy wpisać kwadratowe nawiasy, a wewnątrz nich oddzielone
przecinkami pary w formacie klucz=wartość. Przykładowo formuła:
= [ID=123, Imię="Alicja", Miasto="Kraina Czarów"]
definiuje rekord składający się z trzech kluczy i trzech wartości: ID=123, Imię="Alicja"
i Miasto="Kraina Czarów".
W edytorze Power Query rekord jest wyświetlany, tak jak na rysunku 9.7.
Rekord można uzyskać po odwołaniu się za pomocą nawiasów klamrowych do określonego
wiersza tabeli. Załóżmy, że mamy tabelę o nazwie Pracownicy. Czwarty wiersz tej tabeli zawiera
informacje o Alicji, której identyfikator równa się 123 i miejscem zamieszkania jest Kraina Czarów.
Aby odwołać się do czwartego wiersza, należy użyć wyrażenia z indeksem 3, tak jak niżej:
= Pracownicy{3}
227
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 9.7. Rekord definiuje się, wpisując w pasku formuły nawiasy kwadratowe []
Jeżeli nie wiadomo, w którym wierszu znajdują się dane Alicji, można przeszukać tabelę pod
kątem imienia „Alicja” lub identyfikatora 123. Poniżej przedstawione są odpowiednie wyrażenia
zwracające ten sam rekord (pokazany na rysunku 9.7):
= Pracownicy{[Imię="Alicja"]}
= Pracownicy{[ID=123]}
Uwaga. Odwołanie do określonego wiersza tabeli w pokazany wyżej sposób nie powiedzie się,
jeżeli przeszukiwana kolumna zawiera wiele takich samych wartości. Jeżeli np. tabela zawiera
dwa wiersze z imieniem „Alicja” lub dwa identyfikatory 123, wtedy pojawi się następujący
komunikat:
Expression.Error: Klucz pasował do co najmniej dwóch wierszy w tabeli.
Wiesz już, jak tworzyć i wyszukiwać rekordy oraz odwoływać się do nich, zatem
prawdopodobnie chciałbyś się dowiedzieć, jak odwoływać się do poszczególnych pól rekordu.
W tym celu umieść nazwę pola wewnątrz nawiasów kwadratowych. Aby np. odwołać się do pola
Alicja z poprzedniego przykładu, użyj następującej formuły:
= [ID=123, Imię="Alicja", Miasto="Kraina Czarów"][Imię]
Poniżej przedstawiony jest przykład typowego wyrażenia M automatycznie tworzonego przez
edytor Power Query po zastosowaniu filtru w określonej kolumnie. Wyrażenie to wybiera z tabeli
Pracownicy wszystkie wiersze, które w kolumnie Imię zawierają wartość Alicja. Zwróć uwagę,
że nazwa kolumny jest umieszczona wewnątrz nawiasów kwadratowych:
= Table.SelectRows(Pracownicy, each ([Imię] = "Alicja"))
Kod ten nie odwołuje się bezpośrednio do kolumny, tylko do pola rekordu. Każdy wiersz tabeli
jest traktowany przez funkcję Table.SelectRows jak rekord. Słowo each jest skrótem funkcji, który
sprawia, że wyrażenie jest prostsze. W tym przykładzie jest to funkcja, której argumentem jest
rekord, a zwracanym wynikiem wartość true, jeżeli pole Imię zawiera wartość "Alicja". Więcej
o słowie each dowiesz się dalej w tym rozdziale.
228
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
RYSUNEK 9.8. Nie można zmieniać rekordu, bezpośrednio odwołując się do jego pola
229
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Aby sprawdzić, czy dwa rekordy są sobie równe, czy nie, należy użyć odpowiednio operatora
= lub <>. Poniższe wyrażenie wpisane w pasku formuły powoduje wyświetlenie w panelu podglądu
wartości TRUE:
= [ID=123, Imię="Alicja"] = [Imię="Alicja", ID=123]
Kolejność rozmieszczenia pól w rekordzie nie ma znaczenia.
Funkcje Record.X
Zapewne zauważyłeś, że na rysunku 9.7 we wstążce widoczna jest tylko jedna ikona — Do tabeli.
Przekształcenie to jest odpowiednikiem funkcji Record.ToTable. Choć we wstążce nie ma więcej
przekształceń, język M oferuje kilka przydatnych, wbudowanych funkcji Record.X.
Funkcja Record.FieldCount zwraca liczbę pól rekordu. Funkcja Record.HasFields zwraca
wartość true, jeżeli rekord zawiera pole, lub false w przeciwnym przypadku. Zwróć uwagę,
że pusty rekord ma postać samych nawiasów kwadratowych:
[]
Za pomocą funkcji Record.AddField można dodawać do rekordu pary klucz-wartość. Aby
utworzyć nowy rekord zawierający zmienioną wartość pola istniejącego rekordu lub scalić dwa
rekordy, należy użyć funkcji Record.Combine, tak jak niżej:
= Record.Combine( { [ID=123, Imię="Alicja"], [ID=456] } )
Więcej informacji na temat funkcji Record.X znajdziesz na stronie https://msdn.microsoft.com/
en-us/query-bi/m/record-functions.
Typ table
Najczęściej stosowanym typem w Power Query jest table. Po połączeniu się ze źródłem danych
w edytorze Power Query zazwyczaj pojawia się widok tabeli. Większość przekształceń wykonywanych
za pomocą wstążki jest zamieniana na odpowiednie wbudowane funkcje Table.X. W narzędziu
Power Query tabele odgrywają główną rolę. Jeżeli dokładnie poznasz powyższe funkcje, będziesz
mógł mierzyć się z najtrudniejszymi problemami przygotowywania danych.
Jak wspomniałem wcześniej w tym rozdziale, do kolumny tabeli możesz odwołać się za pomocą
jej nazwy umieszczonej w nawiasach kwadratowych. Przykładowo poniższe wyrażenie zwraca
zawartość (w postaci listy) kolumny Kolumna1 tabeli MojaTabela:
= MojaTabela[Kolumna1]
Aby odwołać się do pierwszego wiersza tej tabeli, należy użyć następującej formuły:
= MojaTabela{0}
Aby odwołać się do wartości w wierszu X i kolumnie Y, należy użyć jednego z poniższych
wyrażeń:
= MojaTabela{X-1}[KolumnaY]
= MojaTabela[KolumnaY]{X-1}
Pierwsze wyrażenie odwołuje się najpierw do x-tego rekordu (indeksy wierszy zaczynają się
od 0), a następnie do pola KolumnaY. Drugie wyrażenie odwołuje się najpierw do listy zawierającej
wartości kolumny KolumnaY, a następnie do x-tego elementu tej listy.
230
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Aby zdefiniować tabelę, należy użyć wyrażenia #table, tak jak na rysunku 9.9 i w poniższym
przykładzie:
= #table({"ID", "Imię", "Miasto"}, {{123, "Alicja", "Kraina Czarów"},
{234, "Bartek", "Kraina Czarów"}})
RYSUNEK 9.9. W języku M tabelę definiuje się za pomocą wyrażenia #table; jest to wygodny sposób tworzenia
niewielkich, wewnętrznych tabel
231
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
232
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Wyrażenie „if-then-else”
Składnia wyrażenia if jest następująca:
= if (warunek) then A else B
Dobrą praktyką poprawiającą czytelność kodu jest wpisywanie wyrażenia w kilku wierszach,
tak jak niżej:
= if (warunek) then
A
else
B
Wyrażenia if można zagnieżdżać, tak jak w poniższym przykładzie:
= if (warunek_1) then
A
else if (warunek_2) then
B
else
C
Jeżeli jesteś zaawansowanym użytkownikiem Excela, zauważysz, że składnia wyrażenia if
znacząco różni się od składni formuł. Poniżej przedstawione są te same operacje zapisane
w postaci formuł:
JEŻELI(warunek; A; B)
JEŻELI(warunek_1; A; JEŻELI(warunek_2; B; C))
233
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Wyrażenia if można umieszczać wewnątrz funkcji (o czym wkrótce się dowiesz dalej w tym
rozdziale), tak jak w poniższym przykładzie:
(imięPracownika) =>
if imięPracownika = "Alicja" then
"Kraina Czarów"
else
"prawdziwy świat"
W przekształceniach kolumn można umieszczać wyrażenia if, odpowiednio modyfikując kod
w pasku formuły. Przeanalizujmy typowy przypadek. Załóżmy, że zaimportowałeś dane zawierające
kolumnę Kraj, w której nie jest jednolicie stosowana wielkość liter (niektóre nazwy są wpisane
wielkimi, inne małymi literami). Postanowiłeś zastosować w edytorze Power Query przekształcenie
Zmień pierwszą literę każdego wyrazu na wielką. Poniżej przedstawione jest wygenerowane
wyrażenie M:
= Table.TransformColumns(Źródło,{{"Kraj", Text.Proper, type text}})
Następnie odkryłeś, że wielkości liter w niektórych nazwach są błędne (np. nazwy US i UK
zostały zamienione na Us i Uk). Aby rozwiązać problem, możesz zmienić powyższą formułę,
wprowadzając do niej wyrażenie if:
= Table.TransformColumns(Źródło,{{"Kraj", each if _ = "US" or _ = "UK" then _ else
Text.Proper(_), type text}})
234
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Funkcje niestandardowe
W miarę przechodzenia do kolejnych etapów opanowania języka M przełomem w rozwiązywaniu
skomplikowanych problemów będzie rozpoczęcie pisania własnych funkcji. Złożone funkcje można
wprawdzie tworzyć w edytorze Power Query za pomocą polecenia Utwórz funkcję dostępnego
w podręcznym menu panelu Zapytania, ale jeszcze bardzie przydatna jest umiejętność swobodnego
wpisywania niestandardowych funkcji w zaawansowanym edytorze. Przykładowo w rozdziale 7.
„Zaawansowane metody dekomponowania i agregowania tabel”, utworzyłeś niestandardową funkcję
wykonującą sekwencję przekształceń dekomponujących tabelę. Bez możliwości swobodnego
modyfikowania kodu w zaawansowanym edytorze utworzenie takiej funkcji nie byłoby możliwe.
Niestandardową funkcję można utworzyć, nie tylko wykorzystując polecenie Utwórz funkcję,
ale również zaawansowany edytor i puste zapytanie lub istniejące wyrażenie. Poniżej przedstawiony
jest prosty przykład funkcji zwiększającej liczbę o 1:
(X) => X + 1
Uwaga. Wynik X+1 jest kopią argumentu, ponieważ wszystkie wartości w języku M
są niemutowalne (niezmienne).
Za pomocą wyrażenia let możesz w funkcji umieścić kilka kroków. Poniżej przedstawiony jest
nieco sztuczny przykład funkcji, której argumentem jest liczba X, a zwracanym wynikiem wartość
X+2. Funkcja składa się z dwóch kroków.
(X) =>
let
Krok1 = X + 1,
Krok2 = Krok1 + 1
in
Krok2
Gdy będziesz wpisywał w zaawansowanym edytorze wyrażenia, takie jak powyższe, często będzie
się zdarzać, że edytor Power Query będzie umieszczał kod wewnątrz wyrażenia let. Poniższe
wyrażenie, zmienione przez edytor Power Query, jest odpowiednikiem poprzedniego:
let
Źródło =
(X) =>
let
Krok1 = X + 1,
Krok2 = Krok1 + 1
in
Krok2
in
Źródło
Można tworzyć funkcje z wieloma argumentami. Poniżej przedstawiony jest przykład funkcji
dodającej dwie liczby:
(X, Y) => X + Y
Podczas tworzenia funkcji niestandardowej można jawnie określać typy argumentów i zwracanego
wyniku. Przykładowo w poniższym kodzie konstrukcja as number oznacza, że wynikiem zwracanym
przez funkcję jest liczba.
235
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Wywoływanie funkcji
Funkcje można definiować wewnątrz wyrażenia let lub jako osobne zapytania. Wywołuje się je tak
samo jak wbudowane funkcje, tj. wpisując nazwę funkcji, nawias otwierający, wartości argumentów
i nawias zamykający. W poniższym przykładzie w pierwszym wierszu zdefiniowana jest funkcja
funkcja, wywołana następnie w trzecim wierszu:
let
funkcja = (X) => X+1,
Liczba1 = 1000,
Wynik = funkcja(Liczba1)
in
Wynik
Funkcje mogą być argumentami innych funkcji. Jeżeli w argumencie funkcji trzeba umieścić inną
funkcję z jednym argumentem, wtedy można wpisać tylko jej nazwę bez nawiasów i argumentu.
Demonstruje to poniższy przykład zapytania odczytującego tabelę cen z zapytania TabelaCen
i mnożącego w kolumnie Cena wartości większe od 10 przez 0,98 (upust 2%).
let
FnCenyPoUpuście =
(cena) =>
if cena > 10 then
cena * 0.98
else
cena,
Źródło = TabelaCen,
CenyPoUpuście = Table.TransformColumns(
Źródło,
{{"Cena", FnCenyPoUpuście, type number}}
)
in
CenyPoUpuście
236
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Wyrażenie each
Wyrażenie each służy do definiowana prostych funkcji w przyjazny dla użytkownika sposób.
Przykładowo poniższe wyrażenie zwiększa o 1 liczbę podaną w argumencie:
(X) => X + 1
Tę samą funkcję można zapisać w następujący sposób:
(_) => _ + 1
Argumentem wyrażenia jest znak podkreślenia. Poniżej przedstawiona jest skrócona wersja kodu:
each _ + 1
W niektórych przypadkach, jeżeli argument ma pola (np. jest to rekord lub tabela), można
całkowicie pominąć znak podkreślenia w wyrażeniu each. Przeanalizujmy poniższe wyrażenie
często stosowane do filtrowania wartości kolumny:
Table.SelectRows(Źródło, each [Cena] > 5)
Dłuższy zapis tej funkcji wygląda tak:
Table.SelectRows(Źródło, (_) => _[Cena] > 5 )
Pierwsze wyrażenie można uprościć, stosując słowo each:
Table.SelectRows(Źródło, each _[Cena] > 5 )
Ponieważ wyrażenie zawiera odwołanie do pola (wewnątrz nawiasów kwadratowych),
można pominąć znak podkreślenia. W pasku formuły pojawi się więc następujący kod:
Table.SelectRows(Źródło, each [Cena] > 5)
Ostatnie wyrażenie jest najbardziej czytelne ze wszystkich. Warto pamiętać, że jest to po
prostu skrót zwykłej funkcji. W przyszłości będziesz potrafił ją zmieniać i dostosowywać do
własnych potrzeb.
Zaawansowane tematy
W jednym rozdziale, a nawet w całej książce, nie da się szczegółowo opisać języka programowania
M. Jest wiele zaawansowanych tematów, które nie zostały opisane w tej książce. Niemniej jednak,
w ostatniej części tego rozdziału pobieżnie zapoznasz się z kilkoma zaawansowanymi
zagadnieniami, które szczególnie Ci się przydadzą, jeżeli w przyszłości zamierzasz biegle
programować w języku M.
237
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Obsługa błędów
Edytor Power Query oferuje funkcjonalności do diagnozowania i korygowania błędów. Za ich
pomocą można modyfikować błędne wartości, a nawet całkowicie je usuwać. Ponadto błędy
w kodzie można obsługiwać nie tylko za pomocą interfejsu narzędzia, ale też programowo.
Błąd w języku M jest to informacja, że nie można określić wartości wyrażenia. Gdy pojawi się błąd,
zapytanie zwraca rekord Expression.Error. Standardowo, jeżeli nie jest jawnie zaimplementowana
obsługa błędów, zapytanie jest przerywane i wyświetlany komunikat. Aby „przechwycić” błąd
bez wstrzymywania wykonywania zapytania, należy użyć wyrażenia try/otherwise. Poniżej
przedstawiony jest przykład:
let
Wynik = try Źródło[Kolumna1] otherwise null
in
Wynik
W powyższym wyrażeniu konstrukcja try/otherwise jest wykorzystana do wyszczególnienia
kolumny Kolumna1 w tabeli Źródło. Jeżeli w tabeli nie ma kolumny o tej nazwie, wtedy wyrażenie
nie kończy się błędem i wyświetleniem komunikatu, tylko zwraca wartość null. To samo wyrażenie
można zapisać bez użycia części otherwise:
let
Wynik = try Źródło[Kolumna1]
in
Wynik
Powyższe wyrażenie zwraca rekord błędu, jeżeli tabela nie zawiera kolumny Kolumna1.
Rekord ten, pokazany na rysunku 9.10, można przetwarzać w edytorze Power Query tak samo
jak każdy inny krok.
RYSUNEK 9.10. Wyrażenie „try” zwraca rekord błędu, gdy zapytanie nie może być wykonane
Jeżeli wyrażenie try zostanie wykonane pomyślnie, zwracany wynik zawiera rekord, którego
pole HasError ma wartość false, a pole Value zawiera wynik wyrażenia. Poniższa formuła pokazuje,
jak można programowo obsługiwać błędy bez użycia słowa otherwise:
238
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
let
Próba = try Źródło[Kolumna1],
Wynik =
if Próba[HasError] then
null
else
Próba[Value]
in
Wynik
Wyrażenie to zwraca wartość null, jeżeli w tabeli Źródło nie ma kolumny Kolumna1. Jest ono
równoważne poniższemu, zawierającemu konstrukcję try/otherwise:
let
Wynik = try Źródło[Kolumna1] otherwise null
in
Wynik
W języku M można zgłaszać niestandardowe błędy. Poniższy przykład pokazuje, jak zmienić
wartość pola Message:
= try Źródło[Kolumna1] otherwise error "W tabeli FabrykaPrzygód nie ma kolumny Kolumna1."
Aby dowiedzieć się więcej o obsłudze błędów, odwiedź stronę https://msdn.microsoft.com/
en-us/query-bi/m/errors.
Pętle
Jeżeli masz doświadczenie programistyczne, na pewno dziwi Cię to, że język M nie zawiera
wbudowanych pętli. Odpowiedź na to pytanie nie jest prosta. Język M został zaprojektowany pod
kątem kodowania sekwencji przekształceń, a iteracje są wbudowane w strukturze danych. Aby np.
zmienić wartość w kolumnie, nie trzeba pisać kodu odwołującego się do kolejnych wierszy tabeli.
Iteracje są wykonywane automatycznie w chwili zastosowania funkcji przetwarzającej tabelę.
Jednak jest kilka szczególnych przypadków, w których niezbędne jest jawne zaimplementowanie
pętli i sekwencyjne odwoływanie się do danych. Jednym z najczęstszych jest importowanie danych
ze strony WWW, gdy do załadowania niewielkiej ilości danych trzeba użyć numeru strony lub
wielkości przesunięcia. Aby można było odwoływać się do poszczególnych stron danych, trzeba
239
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
zaimplementować pętlę odliczającą numery stron z zadanego zakresu. W takim przypadku należy
utworzyć niestandardową funkcję importującą stronę o określonym numerze. Załóżmy, że
utworzyłeś własną funkcję o nazwie FnŁadowanieStronyOZadanymNumerze odczytującą wyniki
wyszukiwania. Poniższy kod jest przykładem iteracji listy liczb:
= {1..10}
Powyższą listę można przekształcić w tabelę, tak jak na rysunku 9.6, klikając w karcie Przekształć
ikonę Do tabeli. Po zmianie nazwy kolumny z Kolumna1 na NumerStrony należy zmienić jej typ na
Tekst, a następnie w karcie Dodaj kolumnę kliknąć ikonę Wywołaj funkcję niestandardową i wskazać
kolumnę NumerStrony. Na koniec trzeba rozwinąć nową kolumnę, która będzie zawierała połączone
wszystkie obiekty tabel.
Rekurencja
Innym sposobem powtarzania sekwencji przekształceń jest rekurencja. Dzięki niej w wielu językach
programowania można wykonywać skomplikowane obliczenia metodą „dziel i rządź”. Klasycznym
przykładem jest wyliczanie wyrazów ciągu Fibonacciego.
W ciągu Fibonacciego każdy wyraz, z wyjątkiem dwóch pierwszych, równych 0 i 1, jest sumą
dwóch poprzednich wyrazów. Zatem trzeci wyraz ma wartość 1 (0 + 1), czwarty wartość 2 (1 + 1),
a kolejne 3 (1 + 2), 5 (2 + 3), 8 (3 + 5), 13 (5 + 8) itd.
W języku M rekurencję implementuje się za pomocą znaku @ umożliwiającego wywoływanie
funkcji z wnętrza tej samej funkcji. Omija się wtedy ograniczenia zakresu widoczności zmiennych.
Poniżej przedstawiony jest kod wyliczający rekurencyjnie kolejne wyrazy ciągu Fibonacciego:
let
Fibonacci =
(n)=>
if (n = 0) then
0
else if (n = 1) then
1
else
@Fibonacci(n-1) + @Fibonacci(n-2)
in
Fibonacci
Nie zaleca się jednak stosowania rekurencji w języku M. Rekurencja jest kosztowną techniką
w każdym języku programowania, zajmującą mnóstwo pamięci w systemie operacyjnym, szczególnie
stosu. Jeżeli danych jest dużo albo trzeba wyliczyć dużo wyrazów ciągu Fibonacciego, wtedy szybko
nastąpi przepełnienie pamięci.
Funkcja List.Generate
Za pomocą funkcji List.Generate można implementować najprzeróżniejsze rodzaje iteracji,
włącznie z zagnieżdżonymi pętlami. Funkcja ta na podstawie zestawu funkcji wejściowych tworzy
listę wartości. Poniżej przedstawiona jest jej deklaracja:
List.Generate(initial as function, condition as function, next as function, optional selector
as nullable function) as list
240
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
Przyjrzyjmy się wewnętrznym szczegółom działania tej funkcji. Poniższy prosty kod, wpisany
w pasku formuły, generuje wyrazy ciągu Fibonacciego mniejsze od 100 (tj. {1, 2, 3, 5, 8, 13, 21,
34, 55, 89}).
= List.Generate(
() => [Poprzedni = 0, Bieżący = 1],
each [Poprzedni] + [Bieżący] < 100,
each [
Bieżący = [Poprzedni] + [Bieżący],
Poprzedni = [Bieżący]
],
each [Poprzedni] + [Bieżący]
)
W tym przykładzie argumentem initial funkcji List.Generate jest funkcja bez argumentów,
zwracająca rekord składający się z pól liczbowych Poprzedni i Bieżący o wartościach odpowiednio 0
i 1. Drugi argument, condition, jest funkcją each [Poprzedni] + [Bieżący] < 100. Dopóki funkcja
ta zwraca wynik true, generowane są elementy listy. Generowanie kończy się, gdy suma pól
Poprzedni i Bieżący jest większa od 100. Trzeci argument, next, jest funkcją przechodzącą do
następnego stanu iteracji, tj. generującą kolejne wartości pól Poprzedni i Bieżący. Polu Bieżący
przypisuje wynik [Poprzedni] + [Bieżący], tj. 1 (0 + 1 = 1), a polu Poprzedni wartość pola Bieżący,
czyli 1. W kolejnej iteracji funkcja przypisuje polu Bieżący liczbę 2 (1 + 1 = 2), a polu Poprzedni
liczbę 1. W trzeciej iteracji polu Bieżący jest przypisywana liczba 3 (2 + 1 = 3), a polu Poprzedni
liczba 2 itd. Czwartym argumentem funkcji List.Generate jest funkcja dopisująca kolejny wyraz
ciągu Fibonacciego do listy. Lista ta jest wynikiem zwracanym po zakończeniu wykonywania iteracji.
Funkcja List.Generate zastępuje pętle i umożliwia rozwiązywanie skomplikowanych problemów.
Zanim jednak jej użyjesz, spróbuj wykorzystać wbudowane funkcje operujące na tabelach. Funkcja
ta, ze względu na wykorzystywane w niej leniwe przetwarzanie wyrażeń, może działać wolniej niż inne
funkcje i zajmować więcej pamięci. W przypadku niewielkich ilości danych możesz jej z powodzeniem
używać. Więcej przykładów zastosowania, m.in. tworzenie zagnieżdżonych pętli, dzielenie danych
na strony i mnożenie macierzy, opisano na stronie https://datachant.com/tag/list-generate.
Funkcja List.Accumulate
Funkcja List.Accumulate agreguje elementy listy. Na podstawie wartości początkowej i funkcji
agregującej generuje zwracany wynik. Można jej używać do przetwarzania elementów listy
i stopniowego agregowania ich do żądanego wyniku. Poniżej przedstawiona jest deklaracja funkcji:
List.Accumulate(list as list, seed as any, accumulator as function) as any
Przyjrzyjmy się poszczególnym argumentom. Wykorzystamy w tym celu proste wyrażenie
sumujące kolejne liczby umieszczone w liście:
= List.Accumulate({1, 2, 3, 4}, 0, (stan, bieżący) => stan + bieżący)
Wynikiem powyższego wyrażenia jest liczba 10. Przeanalizujmy wyrażenie krok po kroku.
Danymi wejściowymi funkcji jest lista {1, 2, 3, 4} (argument list) i liczba 0 (argument seed).
W pierwszej iteracji w argumencie funkcji podanej w argumencie accumulator jest umieszczana
początkowa liczba 0 (podana w drugim argumencie funkcji List.Accumulate). Argument bieżący
uzyskuje wartość 1 (równą pierwszemu elementowi w liście), po czym obie wartości są sumowane.
Wynik, czyli liczba 1, staje się nowym stanem iteracji.
241
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Podsumowanie
Jeżeli chcesz zostać mistrzem w przetwarzaniu danych, powinieneś nauczyć się języka M. Aby biegle
posługiwać się edytorem Power Query i mierzyć się z różnymi praktycznymi problemami, nie musisz
osiągać mistrzowskiego poziomu. W tym rozdziale poznałeś najważniejsze elementy języka M. Od tej
chwili będziesz czuł się pewniej, modyfikując kod w pasku formuły i w zaawansowanym edytorze.
Poznałeś sześć etapów opanowania języka M. Określenie etapu, na którym się znajdujesz,
pozwoli Ci wybrać następny cel i obszary, na jakich powinieneś się skupić. Dowiedziałeś się, jakie
bloki konstrukcyjne są stosowane w języku M. Wśród nich jest wyrażenie let, różne typy danych
(number, time, date, duration, text, logical, record, list i table), operatory i wbudowane funkcje.
242
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 9. WPROWADZENIE DO JĘZYKA M
243
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
244
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10.
Interfejsy graficzne edytora Power Query i Power BI są wyjątkowo użyteczne, ponieważ z ich
pomocą można zamienić żmudne, ręczne przygotowywanie danych w zautomatyzowany proces.
Niestety, w miarę czynienia postępów w przetwarzaniu danych będziesz popełniał błędy typowe dla
wielu użytkowników edytora Power Query. Błędy te powodują, że zapytania działają niestabilnie,
raporty nie odświeżają się po zmianie danych lub — co gorsza — pojawiają się w nich błędne
informacje. W tym rozdziale poznasz najczęściej spotykane pułapki, nauczysz się je omijać
i tworzyć stabilne zapytania.
Techniki opisane w tym rozdziale pozwolą Ci tworzyć wydajne zapytania, patrzeć
dalekowzrocznie i zwyciężać w niekończących się zmaganiach z systemem raportowym.
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
246
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
Każda czynność, którą wykonujesz w edytorze Power Query, jest rejestrowana w panelu
Zastosowane kroki, a w pasku formuły generowany jest kod tworzący większą sekwencję
przekształceń. Edytor musi nieustannie podejmować decyzje, w jaki sposób kolejne kroki, które
wykonujesz, powinny być zamienione na kod. Przykładowo krok Anulowano przestawienie kolumn
opisany w rozdziale 6., „Dekomponowanie tabel”, jest zamieniany na formułę M odwołującą się do
niezaznaczonych kolumn zamiast do zaznaczonych. Innym przykładem jest importowanie arkusza
Excela, w którym formuła M wykorzystuje nazwę arkusza, a nie jego położenie w skoroszycie.
Należy wyraźnie podkreślić, że decyzje edytora dotyczące przekształcania kroków na kod, nie są
przypadkowe. Edytor został przez jego twórców zaprojektowany tak, aby użytkownik mógł łatwo
tworzyć zapytania pozwalające osiągać zamierzone cele. Przekształcenia te są poprawne w momencie
utworzenia zapytania, ale mogą okazać się błędne w przyszłości. Niektóre decyzje edytora opierają
się wyłącznie na danych widocznych w podglądzie. Jeżeli dane te się zmienią, niektóre zapytania,
nieprzygotowane na takie sytuacje, mogą przestać działać poprawnie.
Typowym efektem zmiany danych źródłowych jest błąd pojawiający się podczas odświeżania
raportu. Często błędy pojawiają się regularnie, gdy dane wielokrotnie zmieniają format.
Przystosowanie zapytania do zmian, które zaszły w danych dzisiaj, nie oznacza, że będzie ono
odporne na zmiany w przyszłości.
Najczęstszą przyczyną problemów z odświeżaniem raportów są zmiany nazw kolumn w tabelach
źródłowych. Większość pułapek opisanych w tym rozdziale wynika z niewłaściwego odwoływania
się do kolumn za pomocą ich nazw. Może Ci się w tym momencie wydawać, że nie jest to duży
problem, ponieważ dostosowanie zapytania do nowych nazw jest prostym zadaniem, zajmującym
kilka minut. To prawda, edycja zapytania i przystosowanie go jest proste. Jednak teraz jesteś już
zaawansowanym użytkownikiem edytora Power Query i możesz tworzyć bardzo skomplikowane
zapytania. Jeżeli takie zapytanie nie powiedzie się z powodu zmienionej nazwy kolumny, możesz
spędzić mnóstwo cennego czasu na poprawianiu nazwy w wielu krokach. Czy uważasz za właściwe
poprawianie zapytań za każdym razem, gdy zmieni się nazwa kolumny? Tworzone przez Ciebie
raporty mogą być bardzo ważne dla setek osób w Twojej firmie, a problemy z ich odświeżaniem
mogą pojawiać się w najmniej oczekiwanych momentach.
Nie zawsze zmiany danych skutkują problemami z odświeżaniem raportów. Zapytania mogą
np. pomijać część danych, co może być przyczyną błędnych obliczeń, zniekształconych wykresów
i zafałszowanych wskaźników w raportach. Wykrywanie tego rodzaju problemów po fakcie nie jest
proste. Zapobieganie im jest za to dość łatwe i temu tematowi jest poświęcony rozdział.
Zanim przyjrzymy się bliżej najczęściej spotykanym pułapkom i sposobom ich unikania,
poznasz kilka podstawowych zasad, których powinieneś przestrzegać. Są one podzielone na trzy
grupy: świadome działanie, dobre praktyki i modyfikacje formuł M.
Świadome działanie
Aby działać bardziej świadomie i zmniejszyć prawdopodobieństwo wystąpienia kłopotów
z odświeżaniem raportów, podczas tworzenia kroków w edytorze Power Query przestrzegaj
poniższych zaleceń.
Przeglądaj w panelu podglądu wyniki przekształceń i sprawdzaj, czy są prawidłowe.
Przewijaj podgląd w dół i w prawo, aby zobaczyć więcej wierszy i kolumn. Jeżeli zauważysz
coś podejrzanego, upewnij się, że wykonałeś poprawny krok, albo zastanów, czy możesz go
wykonać inaczej.
247
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zawsze wyświetlaj pasek formuły (domyślnie jest ukryty) i poradź kolegom, by też tak
robili. Aby wyświetlić pasek, zaznacz w karcie Widok opcję Pasek formuły. Ma on
krytyczne znaczenie w unikaniu pułapek.
Sprawdzaj kod pojawiający się w pasku formuły. Aby to robić skutecznie, nie musisz znać
dokładnie języka M. Zwracaj uwagę na wpisywane na stałe nazwy kolumn i inne wartości
szczególnie wtedy, gdy wprowadziłeś je wcześniej za pomocą interfejsu programu lub
w oknie dialogowym. Jeżeli np. usuniesz kolumnę o nazwie Kolumna1, w formule
prawdopodobnie pojawi się ta nazwa. Z dużym prawdopodobieństwem autor danych
zmieni ją w przyszłości na inną i zapytanie nie zostanie poprawnie wykonane. Częste
sprawdzanie kodu pojawiającego się w pasku formuły poskutkuje tym, że będziesz bardziej
świadomy takich zagrożeń i zapobiegniesz im w przyszłości.
Dobre praktyki
Pułapek opisanych w tym rozdziale można często uniknąć, przestrzegając kilku dobrych praktyk.
Uzgadniaj format zewnętrznych danych źródłowych z ich autorami. Komunikuj się z nimi
często i omawiaj przyjmowane założenia. Wspólnie opracujcie proces kontroli zmian,
który pozwoli Ci przygotować się na nadchodzące modyfikacje. Informuj kolegów
o tworzonych raportach i uświadamiaj ich, że uczestniczą w procesie raportowania i są
odpowiedzialni za jego powodzenie.
Zapisuj raporty przed ich odświeżaniem, abyś mógł identyfikować zachodzące zmiany.
Raport, który pomyślnie odświeżyłeś dzisiaj, może jutro się nie odświeżyć lub pokazać
błędne dane. Porównując różne wersje raportu, będziesz w stanie określić przyczyny
niepowodzenia.
Jak się dowiesz w tym rozdziale, niektórych pułapek można całkowicie uniknąć, dokonując
odpowiednich wyborów (np. przez usunięcie kolumny) lub unikając wykonywania
niepotrzebnych operacji (np. zmiany typów lub kolejności kolumn).
Modyfikacje formuł M
Aby tworzyć stabilne zapytania, powinieneś w formułach wprowadzać kilka prostych modyfikacji.
Wprawdzie aby uniknąć określonej pułapki, trzeba odpowiednio do niej zmieniać formuły, jednak
większość zmian dotyczy funkcji Table.ColumnNames, w której statyczne odwołania do kolumn
należy zastępować odwołaniami dynamicznymi. Taki przypadek poznałeś już w rozdziale 3.,
„Łączenie danych z kilku źródeł”, w ćwiczeniu 3.4, w którym połączyłeś dane z kilku arkuszy,
uzupełniłeś je o kolumnę z informacjami kontekstowymi i zmieniłeś nazwę kolumny z 2015 na Rok.
Następnie zmodyfikowałeś funkcję Table.ColumnNames tak, aby zmieniała nazwę pierwszej kolumny,
a nie kolumny o nazwie 2015. W ten sposób utworzyłeś bardziej stabilne zapytanie i zapobiegłeś
problemom z odświeżaniem raportu w przyszłości.
W tym rozdziale poznasz różne modyfikacje kodu zawierającego funkcję Table.ColumnNames,
pozwalające uniknąć najczęściej spotykanych pułapek, tworzyć stabilne zapytania i minimalizować
prawdopodobieństwo wystąpienia problemu z odświeżaniem raportu.
248
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
RYSUNEK 10.2. W pasku formuły widać, jak w poszczególnych krokach, np. „Zmieniono typ”,
wykorzystywane są nazwy kolumn
249
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
{"Losowa kolumna 1", type number}, {"Losowa kolumna 2", type number},
250
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
Gwoli wyjaśnienia, niektóre kolumny wymagają określenia właściwego typu danych. Jeżeli tego
nie zrobisz, nie będziesz mógł wykonywać pewnych operacji, np. sumowania lub uśredniania
wartości, ani przetwarzać wartości czasowych w tabelach przestawnych w Excelu lub elementach
wizualizacyjnych w Power BI. Edytor Power Query został zaprojektowany tak, aby niejawnie
określał typy danych we wszystkich kolumnach tabeli. Gdyby ten krok nie był wykonywany
automatycznie, a Ty zapomniałbyś zrobić to ręcznie, nie mógłbyś umieszczać pól liczbowych
w obszarze Wartości w tabeli przestawnej w Excelu i w elemencie wizualnym w Power BI.
251
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zamiast zdawać się na automatyczne określanie typów danych, lepiej usunąć krok Zmieniono typ
i ręcznie wybrać typy. Operację należy wykonywać jak najpóźniej w całym procesie przetwarzania
danych, z niżej opisanych powodów.
Wskazówka. Podczas zmieniania typów danych w edytorze Power Query warto przestrzegać
zasady „im później, tym lepiej”. Dobrą praktyką jest ręczne zmienianie typów kolumn
i niezdawanie się na ustalanie automatyczne. Im później jawnie określi się typy, tym lepiej.
Zobacz też. Przykład trudnego do wykrycia błędu spowodowanego zmianą typu danych
na wczesnym etapie przekształceń jest opisany w artykule na stronie https://datachant.com/
2017/01/11/10-common-mistakes-powerbi-powerquery-pitfall-2.
Trwałość zmian. W niektórych przypadkach zmiana typu danych na początku procesu nie jest
trwała. Przykładowo podczas łączenia skoroszytów zapisanych w folderze zmiana typu danych
wykonana w przykładowym zapytaniu nie jest przenoszona do wynikowego zapytania.
Zapewne zastanawiasz się, czy możesz skonfigurować edytor Power Query tak, aby nie wykrywał
i nie określał typów danych, żebyś nie musiał ręcznie usuwać kroku, tak jak na rysunku 10.3. Jest to
możliwe, ale indywidualnie dla każdego skoroszytu i raportu Power BI. Nie można tego zrobić dla
wszystkich przyszłych raportów.
Aby wyłączyć w edytorze Power Query automatyczne wykrywanie i określanie typów kolumn,
otwórz okno Opcje zapytania w Excelu (w tym celu w karcie Dane kliknij ikonę Pobierze dane i wybierz
polecenie Opcje dodatku Query) lub Opcje w programie Power BI Desktop (w karcie Plik kliknij polecenie
Opcje i ustawienia, a następnie Opcje). Następnie w Excelu w sekcji Bieżący skoroszyt lub w Power BI
Desktop w sekcji Bieżący plik kliknij polecenie Ładowanie danych i usuń zaznaczenie opcji
Automatycznie wykrywaj nagłówki i typy kolumn dla źródeł bez struktury (patrz rysunek 10.4).
Niestety, nie ma analogicznej opcji w sekcji Globalne, Ładowanie danych. Dlatego powyższy
proces trzeba powtarzać w każdym nowym raporcie.
Na koniec, po usunięciu kroku Zmieniono typ lub wyłączeniu opcji jego automatycznego
tworzenia jawnie określaj typy kolumn, które zawierają daty i liczby potrzebne do analizy.
Ewentualnie możesz modyfikować krok Zmieniono typ w sposób opisany w ćwiczeniu 10.1, w kroku
9. Zwróć uwagę, że użyta tam formuła odwołuje się do wielu kolumn tekstowych. Odwołania te
możesz usunąć, a wtedy unikniesz problemów z odświeżaniem raportów, gdyby w przyszłości
zmieniły się nazwy kolumn. Kolumny te są w poniższej formule wyróżnione pogrubioną czcionką:
= Table.TransformColumnTypes(#"Nagłówki o podwyższonym poziomie",{{"Data", type date},
{"Kolor", type text}, {"Kategoria dostawcy", type text}, {"Nazwa dostawcy", type text},
{"Kategoria klienta", type text}, {"Miasto", type text}, {"Przychód", type number}})
252
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
Aby dodatkowo usprawnić zapytanie, usuń z panelu Zastosowane kroki krok Zmieniono typ
i ręcznie zmień typy kolumn Data i Przychód albo zmień istniejącą formułę w następujący sposób:
= Table.TransformColumnTypes(#"Nagłówki o podwyższonym poziomie",{{"Data", type date},
{"Przychód", type number}})
Wskazówka. Jeżeli przetwarzasz tabele, które mają zbyt wiele kolumn, aby ręcznie zmieniać ich
typy, i szukasz sposobu automatycznego określenia ich typów bez jawnego odwoływania się do
nazw, bardzo Ci się przyda formuła opisana w artykule pod adresem: http://datachant.com/
2018/05/14/automatic-detection-of-column-types-in-powerquery.
253
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
254
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
Wskazówka. Jeżeli nie lubisz wyrażeń warunkowych, opisanych w kroku 8., użyj polecenia
Filtry tekstu, tak jak w krokach 9. i 10. W ten sposób całkowicie unikniesz pułapki. Zawsze
lepiej używać tego polecenia, niż zaznaczać wartości w panelu filtru.
Gotowe rozwiązanie jest zapisane w plikach R10-02 - rozwiązanie.xlsx oraz R10-02 - rozwiązanie.pbix.
255
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
= {1..6}
3. W karcie Przekształć kliknij ikonę Do tabeli. W oknie, które się pojawi, kliknij przycisk OK.
4. W nagłówku kolumny Column1 kliknij ikonę filtru. Pojawi się panel filtru.
5. Usuń zaznaczenie wartości 1 i kliknij OK. Wartość ta zostanie poprawnie usunięta z tabeli.
Zwróć uwagę, że w pasku formuły pojawi się następujący kod:
= Table.SelectRows(#"Przekonwertowane na tabelę", each ([Column1] <> 1))
6. Ponownie kliknij ikonę filtru i usuń zaznaczenie wartości 1 i 2. Efekt będzie zgodny
z oczekiwaniami. Pasek formuły będzie zawierał poniższy kod:
= Table.SelectRows(#"Przekonwertowane na tabelę", each ([Column1] <> 1 and [Column1]
<> 2))
7. Jeszcze raz kliknij ikonę filtru i usuń zaznaczenie wartości 1, 2 i 3. Efekt dalej będzie
poprawny. W panelu podglądu będą widoczne tylko wartości 4, 5 i 6. Natomiast w formule
będą użyte znaki równości i wartości, których nie zaznaczyłeś w panelu filtru:
= Table.SelectRows(#"Przekonwertowane na tabelę", each ([Column1] = 4 or [Column1] = 5
or [Column1] = 6))
Jednak poprawny jest kod zawierający znaki nierówności i wartości, których nie zaznaczyłeś.
Zatem formuła powinna wyglądać tak:
= Table.SelectRows(#"Przekonwertowane na tabelę", each ([Column1] <> 1 and [Column1] <>
2 and [Column1] <> 3))
Dlaczego warunki zawierające znaki równości i zaznaczone wartości są takie niebezpieczne?
Wyobraź sobie, że w przyszłości w kolumnie pojawią się dodatkowo liczby 7, 8, 9 i 10. W kroku 7.
utworzyłeś filtr odrzucający liczby 1, 2 i 3. Jeżeli w filtrze będą użyte znaki równości i zaznaczone
wartości, po odświeżeniu raportu liczby 7, 8, 9 i 10 zostaną odrzucone.
Powyższy przykład jest bardzo prosty, ale daje wyobrażenie, co się może stać, kiedy danych
będzie dużo. Taka jest istota pułapki 3.: w panelu podglądu widoczny jest tylko fragment danych.
Przykładowo w arkuszu użytym w ćwiczeniu 10.2 w kolumnie Kolor znajdowały się również inne
kolory oprócz czarnego i niebieskiego, ale w panelu podglądu były widoczne tylko te dwa. Gdy
usunąłeś zaznaczenie koloru czarnego, liczby wartości zaznaczonych i niezaznaczonych były sobie
równe i w warunkach filtru zostały użyte znaki równości.
Jedną z najczęściej wykonywanych operacji narażonych na pułapkę 3. jest wyszukiwanie
wartości w panelu filtru. Zazwyczaj wyszukiwanie stosuje się, gdy lista wartości jest długa. Zamiast ją
przewijać, można wyszukać pożądane wartości, wpisując ich nazwy w polu wyszukiwania. Usunięcie
zaznaczeń przy wyszukiwanych wartościach zawsze powoduje utworzenie warunków zawierających
znaki równości, co w przyszłości może być źródłem problemów.
256
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
257
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
poprawność kodu. W takich sytuacjach, po utwierdzeniu się, że kod jest dobry, zaleca się usunięcie
kroku zmieniającego kolejność kolumn, aby zmniejszyć prawdopodobieństwo wystąpienia błędu
podczas odświeżania raportu w przyszłości.
Czasami jednak zmiana kolejności kolumn jest ważna, gdy np. trzeba kontrolować kolejność pól
pokazywanych w tabeli przestawnej w Excelu lub kolumn zapytania załadowanego do arkusza.
Oprócz tego jest kilka specyficznych przypadków wymagających umieszczenia kolumn w zapytaniu
w określonej kolejności. Przykładowo w rozdziale 4., „Łączenie niezgodnych tabel”, w ćwiczeniu 4.4
umieściłeś kolumnę wyliczeniową na początku tabeli, abyś ją potem przetransponować i zamienić
na nagłówki kolumn.
Jeżeli kolejność kolumn jest ważna, zmieniaj ją dopiero wtedy, gdy zapytanie będzie zawierało
wyłącznie kolumny wykorzystywane w raporcie. (Więcej o wybieraniu kolumn dowiesz się
w podrozdziale poświęconym pułapce 5.). Złą praktyką jest ładowanie tabeli zawierającej setki
kolumn, zmienianie ich kolejności, a następnie usuwanie tych, które są niepotrzebne. Zapytanie
będzie bardziej stabilne, jeżeli najpierw wybierzesz kilkanaście kolumn, a potem zmienisz ich kolejność.
W ćwiczeniu 10.3 dowiesz się, jak można zmieniać kolejność kolumn bez odwoływania się do ich nazw.
258
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
będziesz mógł zebrać wszystkie fragmenty w jedną pokazaną niżej formułę (zapisaną w kilku
wierszach, aby była bardziej czytelna):
= Table.ReorderColumns(
#"Nagłówki o podwyższonym poziomie",
List.InsertRange(
List.Difference(
Table.ColumnNames(#"Nagłówki o podwyższonym poziomie"),
{"Miasto", "Przychód"}
),
1,
{"Miasto", "Przychód"}
)
)
259
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Ćwiczenie 10.3.
Część II. Niestandardowa funkcja FnZmianaKolejnościKolumn
Technika opisana w części I ćwiczenia przydaje się bardzo często. Aby ułatwić sobie pracę, możesz
utworzyć funkcję niestandardową wykonującą przekształcenia opisane w kroku 7. W tym celu
wykonaj następujące kroki.
1. Utwórz puste zapytanie, a następnie w zaawansowanym edytorze wpisz następujący kod:
Zobacz też. Istnieją inne sposoby użycia funkcji Table.ReorderColumns pozwalające uniknąć
problemów z odświeżaniem raportów. Możesz wykorzystać trzeci argument funkcji, aby nie
uwzględniała brakujących pól lub zamiast nich stosowała wartości null. Unika się w ten
sposób problemów z odświeżaniem raportów, ale mogą pojawiać się nieoczekiwane efekty.
Więcej informacji na ten temat znajdziesz na stronie https://datachant.com/2017/01/18/
power-bi-pitfall-4.
Gotowe rozwiązanie jest zapisane w plikach R10-03 - rozwiązanie.xlsx oraz R10-03 - rozwiązanie.pbix.
260
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
Za każdym razem, gdy usuwasz kolumnę, narażasz się na ryzyko problemów z odświeżaniem
raportów, gdyby kolumna ta znikła z danych źródłowych. Czy porozumiałeś się z autorem danych
źródłowych? Z tych samych powodów, co Ty, może on uznać, że niektóre kolumny nie są ważne
i postanowi usunąć je ze źródła.
Aby zmniejszyć zagrożenie problemami z odświeżaniem, stosuj prostą praktykę: skupiaj się na
kolumnach, które mają pozostać, a nie tych, które mają być usunięte. Edytor Power Query oferuje
przekształcenia do usuwania i zachowywania kolumn. Choć prościej zaznaczyć kolumnę i nacisnąć
klawisz Delete, zazwyczaj lepiej wybrać kolumny, która mają być zachowane. Ćwiczenie 10.4
ilustruje ten proces na przykładzie kolumn Losowa kolumna 1 i Losowa kolumna 2 zawierających
dane firmy Światowi Importerzy, wykorzystanie w ćwiczeniu 10.1.
261
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
262
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
RYSUNEK 10.7. Zadanie polega na zmianie nazw kolumn bez odwoływania się do nich za pomocą nazw
263
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
4. W panelu Zastosowane kroki usuń krok Zmieniono typ. W panelu podglądu pojawi się
tabela zawierająca siedem losowych kolumn. W tym ćwiczeniu poznasz kilka zasobów
zmiany ich nazw.
Ręcznie zmień nazwy Losowa kolumna 1 i Losowa kolumna 2 odpowiednio na Czynnik 1
i Czynnik 2. W pasku formuły pojawi się następujący kod:
= Table.RenameColumns(#"Nagłówki o podwyższonym poziomie",{{"Losowa kolumna 1",
"Czynnik 1"}, {"Losowa kolumna 2", "Czynnik 2"}})
Gdy w przyszłości w tabeli źródłowej nie będzie jednej z powyższych kolumn, raport się
nie odświeży.
Załóżmy, że autor danych powiadomił Cię, że zamierza w przyszłości zmienić nazwy kolumn,
ale będą one umieszczone w tabeli tej samej kolejności, co dotychczas. Możesz się zatem odwoływać
do tych kolumn, wykorzystując ich pozycje w tabeli. Poniżej przedstawiony jest przykład, jak można
zmienić nazwy pierwszych dwóch kolumn:
= Table.RenameColumns(#"Nagłówki o podwyższonym poziomie", {{Table.ColumnNames(#"Nagłówki
o podwyższonym poziomie"){6}, "Czynnik 1"}, {Table.ColumnNames(#"Nagłówki o podwyższonym
poziomie"){7}, "Czynnik 2"}})
264
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
Aby kod nie był tak skomplikowany, wykorzystaj inteligentną funkcję, taką jak niżej:
= FnZmianaNazwWedługIndeksów(
#"Nagłówki o podwyższonym poziomie",
List.Transform(
{1..7},
each "Czynnik " & Text.From(_)
),
{6..12}
)
Drugim argumentem funkcji jest lista tworzona dynamicznie za pomocą funkcji List.Transform,
której pierwszym argumentem jest lista indeksów od 1 do 7, a zwracanym wynikiem przekształcona
lista tekstów składających się z prefiksu "Czynnik " i wartości indeksu. Trzecim argumentem funkcji
FnZmianaNazwWedługIndeksów jest lista indeksów kolumn (od 6 do 12), których nazwy mają być
zmienione. Kod funkcji FnZmianaNazwWedługIndeksów jest następujący:
(Źródło as table, NoweNazwyKolumn as list, Indeksy as list) =>
let
StareNazwyKolumn = List.Transform(Indeksy, each Table.ColumnNames(Źródło){_}),
NowaLista = List.Zip({ StareNazwyKolumn, NoweNazwyKolumn}),
#"Zmieniono nazwy kolumn" = Table.RenameColumns(Źródło, NowaLista)
in
#"Zmieniono nazwy kolumn"
Przeanalizujmy powyższą funkcję krok po kroku. Argument Źródło jest tabelą, której kolumny
mają być przemianowane. NoweNazwyKolumn jest listą nowych nazw, a Indeksy listą indeksów
kolumn. W pierwszym wierszu wyrażenia let odczytywana jest lista aktualnych nazw kolumn
o zadanych indeksach:
StareNazwyKolumn = List.Transform(Indeksy, each Table.ColumnNames(Źródło){_}),
W następnym wierszu za pomocą funkcji List.Zip jest tworzona lista zagnieżdżonych list,
z których każda zawiera dwa elementy: starą i nową nazwę kolumny o zadanym indeksie:
NowaLista = List.Zip({StareNazwyKolumn, NoweNazwyKolumn}),
I tak poniższa formuła:
List.Zip({"a","b","c"}, {"A", "B", "C"}}
Funkcja Table.TransformColumnNames
Nazwy kolumn można zmienić w jeszcze inny sposób. Jak pamiętasz, w rozdziale 4. zmieniłeś nazwy
wszystkich kolumn za pomocą funkcji Table.TransformColumnNames. Wszystkie znaki podkreślenia
zastąpiłeś spacjami, a ponadto zamieniłeś pierwsze litery słów na wielkie. Tę funkcję możesz również
wykorzystać w tym przypadku w następującej ogólnej formule:
= Table.TransformColumnNames(#"Nagłówki o podwyższonym poziomie", each Text.Replace(_, "Losowa
kolumna", "Czynnik"))
265
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Sposób ma tę zaletę, że poprawnie zmienia nazwy kolumn nawet wtedy, gdy zostaną umieszczone
w tabeli źródłowej w innej kolejności. Jednak zachowaj ostrożność, stosując tę metodę, abyś niechcący
nie przemianował kolumn, które nie powinny być zmienione.
Wskazówka. W większości przypadków wystarczy prosta zmiana nazw kolumn, tak jak to
robiłeś do tej pory. Nie komplikuj tego, co jest proste.
Gotowe rozwiązanie jest zapisane w plikach R10-05 - rozwiązanie.xlsx oraz R10-05 - rozwiązanie.pbix.
RYSUNEK 10.8. Po podzieleniu wartości oddzielonych przecinkami w kolumnie Kolor można określić,
ile jest produktów w poszczególnych kolorach
266
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
267
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 10.9. W oknie Dzielenie kolumny według ogranicznika w sekcji Opcje zaawansowane
ukryta jest opcja dzielenia kolumny na wiersze
Formuła ta powoduje podzielenie kolumny Kolory na dokładnie dwie kolumny, o czym się
za chwilę przekonasz.
10. Ponieważ Twoim celem jest utworzenie tabeli kodów produktów i ich kolorów,
musisz zdekomponować tabelę. Zaznacz kolumnę Kod produktu.
11. W karcie Przekształć rozwiń ikonę Anuluj przestawienie kolumn i wybierz polecenie Anuluj
przestawienie innych kolumn. Kolumny Kolory.1 i Kolory.2 zostaną przekształcone
odpowiednio w Atrybut i Wartość. Ta ostatnia zawiera kolory produktów poprawnie
przypisane do ich kodów. Zauważ, że przed niektórymi nazwami kolorów pojawią się spacje.
Aby je usunąć, wykonaj na kolumnie Wartość przekształcenie Przycięcie lub w panelu
Zastosowane kroki kliknij krok Podzielono kolumnę według ogranicznika, a następnie kliknij
ikonę ustawień. W oknie, które się pojawi, w liście Wybierz lub wprowadź ogranicznik wskaż
pozycję --Niestandardowe--, po czym w polu niżej wpisz przecinek i spację (, ). Poniżej
przedstawiona jest poprawiona formuła kroku Podzielono kolumnę według ogranicznika:
= Table.SplitColumn(#"Usunięto inne kolumny", "Kolory", Splitter.SplitTextByDelimiter(",
", QuoteStyle.Csv), {"Kolory.1", "Kolory.2"})
12. Usuń kolumnę Atrybut i załaduj zapytanie do arkusza lub raportu. W dalszej analizie możesz
utworzyć wykres słupkowy, tak jak na rysunku 10.8.
13. Aby sprawdzić, co się stanie, gdy pojawi się produkt w więcej niż dwóch kolorach, zapisz
raport i otwórz plik R10-06.xlsx.
14. W kolumnie D3 dopisz dodatkowe kolory, np. czarny i czerwony. Zapisz skoroszyt i zamknij go.
Wróć do utworzonego wcześniej raportu i odśwież go. Nowe kolory nie pojawią się w raporcie.
Aby rozwiązać problem, powinieneś wykonać operacje opisane w ćwiczeniu 2.8, tj. podzielić
kolumnę na wiersze. Jeżeli jednak z jakiegoś powodu musisz podzielić kolumny na kolumny, określ
właściwą liczbę nowych kolumn. Załóżmy, że wiesz z góry, iż liczba kolorów nie będzie większa niż 20.
W kroku Podzielono kolumnę według ogranicznika wpisz następującą formułę:
= Table.SplitColumn(#"Usunięto inne kolumny", "Kolory", Splitter.SplitTextByDelimiter(", ",
QuoteStyle.Csv), 20)
268
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
269
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Obie formuły różnią się głównie tym, że poniższy fragment kodu użyty w pierwszej z nich:
{
{"Kolumna liczbowa 1", type text},
{"Kolumna liczbowa 2", type text}
}
został zastąpiony funkcją List.Transform zwracającą taką samą listę, jednak bez odwoływania się
do nazw kolumn:
List.Transform(
KolumnyDoScalenia,
each {_, type text}
)
Funkcja ta odczytuje z listy KolumnyDoScalenia kolejne nazwy kolumn i przekształca je na listę
nazw kolumn tekstowych.
Choć z powyższej funkcji będziesz korzystał raczej rzadko, jest to ważny przykład, ponieważ
pokazuje, jak stosować funkcje operujące na listach do tworzenia skalowanych i stabilnych zapytań.
Podsumowanie
W tym rozdziale wzbogaciłeś swoje umiejętności przetwarzania danych. Nauczyłeś się patrzeć
dalekowzrocznie i tworzyć zapytania, które będą działać długo i stabilnie bez konieczności ich
nieustannego dostosowywania do zmieniających się danych. Poznałeś najczęściej spotykane pułapki,
z powodu których raporty mogą się nie odświeżać lub będą pojawiać się w nich błędne dane.
Aby nie wpadać w te pułapki, musisz przestrzegać trzech ogólnych zasad: świadomego działania,
stosowania dobrych praktyk i umiejętnego modyfikowania kodu M. Abyś mógł wykrywać
w formułach statycznie wpisywane nazwy kolumn i błędne warunki, wyświetlaj pasek formuły
i często sprawdzaj jego zawartość.
270
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 10. OD ZŁYCH DO DOBRYCH ZAPYTAŃ
W tym rozdziale poznałeś kilka dobrych praktyk, dzięki którym zmniejszysz ryzyko pojawienia się
błędów w zapytaniach. Jeżeli formalnie lub nieformalnie umówisz się z autorami danych w kwestii
ich formatu, będziesz mógł podczas tworzenia zapytań przyjmować poprawne założenia i podejmować
właściwe decyzje dotyczące wyboru rozwiązania problemu.
Nauczyłeś się również usprawniać zapytania, wprowadzając niewielkie zmiany w formułach M.
Tabela 10.1 zawiera podsumowanie najważniejszych pułapek, ich skutków i sposobów unikania.
271
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
TABELA 10.1. Najważniejsze pułapki, ich skutki i sposoby unikania — ciąg dalszy
272
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11.
W tym rozdziale nauczysz się używać narzędzia Power Query do pozyskiwania kluczowych informacji
z tekstowych źródeł danych. Już teraz na pewno wiele kolumn w Twoich tabelach zawiera bogate,
ale niewykorzystywane dane tekstowe. Parafrazując cytat Homera, możesz uznać, że wiele słów
zawartych w tych danych jest pustych jak wiatr. Kolumn tekstowych zazwyczaj nie wykorzystuje się
w raportach, ewentualnie pozyskuje się z niektórych wierszy pewne informacje kontekstowe.
W rzeczywistości jednak można z nich uzyskiwać bardzo dużo cennych informacji. W rozdziałach
12., „Zaawansowana analiza tekstu: rozpoznawanie znaczenia” i 13., „Analiza sieci społecznościowych”,
poznasz kilka bardzo przydatnych metod, dzięki którym odkryjesz w kolumnach tekstowych ukryte
w nich skarby.
Techniki opisane w tym rozdziale przydają się szczególnie do analizowania takich informacji
tekstowych jak wyniki ankiet, komentarze operacyjne czy wpisy na portalach społecznościowych.
Dowiesz się teraz, jak stosując popularne przekształcenia, można wyodrębniać znaczenia słów.
Najpierw poznasz prostą technikę wyszukiwania słów kluczowych, a później będziesz stopniowo
wzbogacał swój arsenał o bardziej zaawansowane metody umożliwiające rozwiązywanie za pomocą
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
narzędzia Power Query często spotykanych, ale skomplikowanych problemów. Swoją przygodę
będziesz kontynuował w kolejnym rozdziale, w którym poznasz zaawansowane techniki analizy
danych w chmurze Azure, obejmujące m.in. tłumaczenia tekstu, analizę nastroju i wyszukiwanie
kluczowych fraz. Nie będziesz przy tym potrzebował pomocy analityków ani programistów.
Zobacz też. W rozdziale 13., „Analiza sieci społecznościowych”, nauczysz się importować za
pomocą narzędzia Power Query bieżące wpisy z Facebooka, natomiast tematem tego rozdziału
jest analiza tekstu. Dlatego w ćwiczeniu wykorzystasz skoroszyt Excela R11-01.xlsx. Jeżeli jesteś
niecierpliwy, przejrzyj zawarte w nim zapytanie importujące bieżące wpisy.
Wyobraź sobie, że jesteś analitykiem danych w wydawnictwie Microsoft Press i zajmujesz się
mediami społecznościowymi. Twoim zadaniem jest określenie, który z poniższych produktów jest
najbardziej promowany na Facebooku:
Microsoft Excel,
Visual Studio,
Azure,
Windows.
Czy potrafisz wyszukać te cztery frazy w arkuszu w kolumnie Wpis? Poniższe ćwiczenie
pokazuje krok po kroku, jak można to zrobić.
1. Utwórz w Excelu nowy skoroszyt lub w Power BI Desktop nowy raport.
W Excelu: kliknij kartę Dane, a następnie polecenia Pobierz dane/Z pliku/Ze skoroszytu.
W Power BI Desktop: rozwiń menu Pobierz dane i wybierz Excel.
274
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
RYSUNEK 11.1. Kolumna Wpis zawiera wpisy wydawnictwa Microsoft Press na Facebooku; Twoim zadaniem
jest wyszukanie w nich zadanych słów kluczowych
Uwaga. W punkcie 9d wpisałeś temat małymi literami (microsoft excel), ponieważ w funkcji
wyszukiwania wielkość liter ma znaczenie. Temat, który w punkcie 9e wpisałeś wielkimi
i małymi literami, wykorzystasz w raporcie.
275
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 11.2. Okno Dodawanie kolumny warunkowej z warunkami umożliwiającymi wyszukiwanie fraz
„Microsoft Excel”, „Visual Studio”, „Azure” i „Windows”
10. Kliknij przycisk Dodaj regułę. Pojawi się nowy wiersz umożliwiający zdefiniowanie kolejnego
warunku. Powtórz punkt 9. z następującymi zmianami: w punkcie 9d w polu Wartość wpisz
visual studio, a w polu Wartość wyjściowa Visual Studio.
11. Kliknij przycisk Dodaj regułę. Powtórz punkt 9. z następującymi zmianami: w punkcie 9d
w polu Wartość wpisz azure, a w polu Wartość wyjściowa Azure.
12. Kliknij przycisk Dodaj regułę. Powtórz punkt 9. z następującymi zmianami: w punkcie 9d
w polu Wartość wpisz windows, a w polu Wartość wyjściowa Windows.
13. W polu W przeciwnym razie wpisz Inny. Sprawdź, czy wszystkie ustawienia są takie, jak na
rysunku 11.2 i kliknij OK, aby zamknąć okno.
Oczywiście, nie jest to skuteczny sposób wyszukiwania wszystkich możliwych tematów
wpisów wydawnictwa Microsoft Press na Facebooku. Wiele wpisów zostanie sklasyfikowanych
jako Inny. Niektóre z nich reklamują książki o Office 365, inne o bazie SQL Server, a jeszcze
inne zawierają informacje o promocjach, np. „visit www.microsoftpressstore.com
today—and discover deals, new books, and special promotions!”.
Dla uproszczenia przyjmijmy, że na razie opisany sposób spełnia Twoje potrzeby i możesz
w kolumnie Temat odrzucić wiersze zawierające tekst Inny.
14. W nagłówku kolumny Temat kliknij ikonę filtru, usuń zaznaczenie pozycji Inny i kliknij OK.
15. Na koniec usuń kolumnę Małe litery, zmień nazwę zapytania na Wpisy Microsoft Press
i załaduj dane do raportu.
Gotowe rozwiązanie jest zapisane w plikach R11-01 - rozwiązanie.xlsx oraz R11-01 - rozwiązanie.pbix.
Teraz, gdy osiągnąłeś swój cel, przyjrzyjmy się najważniejszym mankamentom metody, którą
zastosowałeś w tym ćwiczeniu.
276
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
277
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. W teorii zbiorów iloczyn kartezjański może obejmować wiele zestawów elementów.
Wynikiem jest wtedy zbiór wszystkich kombinacji elementów po jednym z każdego zestawu.
W narzędziu Power Query iloczyn kartezjański dwóch tabel (a nawet tej samej tabeli) tworzy się
poprzez dodanie do pierwszej tabeli kolumny niestandardowej zawierającej odwołania do drugiej
tabeli. Po rozwinięciu takiej kolumny tworzony jest iloczyn kartezjański, taki jak na rysunku 11.3.
Na rysunku 11.3 w lewym górnym rogu widoczna jest tabela zawierająca trzy wpisy, a w prawym
górnym znajduje się tabela ze słowami kluczowymi. Wynikiem iloczynu kartezjańskiego jest nowa
tabela zawierająca wszystkie kombinacje wpisów i słów kluczowych, pokazana w dolnej części rysunku.
W ten sposób można tworzyć pary wartości zawierające wszystkie możliwe kombinacje i dalej je
przetwarzać. W tym przypadku przetwarzanie będzie polegało na wyszukiwaniu słowa kluczowego
we wpisie, a następnie filtrowaniu wierszy, w których słowa zostały znalezione.
Jeżeli nie wiesz jeszcze, jak utworzyć iloczyn kartezjański i jak go użyć do wyszukiwania słów
kluczowych na szeroką skalę, wykonaj następne ćwiczenie, w którym znajdziesz odpowiedzi na
swoje pytania.
278
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
RYSUNEK 11.4. Skoroszyt R11-02 - rozwiązanie.xlsx zawiera wyniki analizy tematów wpisów wydawnictwa
Microsoft Press na Facebooku
Część I. Przygotowanie
W tym ćwiczeniu wykorzystasz te same dane źródłowe, co w poprzednim. Najpierw jednak musisz
wykonać pewne operacje przygotowawcze.
1. Utwórz w Excelu nowy skoroszyt lub w Power BI Desktop nowy raport.
W Excelu: kliknij kartę Dane, a następnie polecenia Pobierz dane/Z pliku/Ze skoroszytu.
W Power BI Desktop: rozwiń menu Pobierz dane i wybierz Excel.
2. Odszukaj plik R11-01.xlsx i kliknij przycisk Importuj.
3. W oknie Nawigator zaznacz Arkusz1 i kliknij przycisk Przekształć dane.
4. Zmień nazwę zapytania na Wpisy Microsoft Press.
Teraz utworzysz odwołanie do zapytania Wpisy Microsoft Press i użyjesz go do przygotowania
nowej tabeli zawierającej wpisy i tematy. W tabeli tej będą wielokrotnie występowały wpisy
z tymi samymi identyfikatorami.
5. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Wpisy Microsoft Press
i z podręcznego menu wybierz polecenie Odwołanie.
6. Zmień nazwę nowego zapytania na Tematy wpisów.
7. Zaznacz zapytanie Tematy wpisów, a następnie w karcie Strona główna kliknij ikonę
Wybieranie kolumn.
8. W oknie, które się pojawi, zaznacz pozycje ID wpisu i Wpis, a następnie kliknij OK.
279
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
9. Zaznacz kolumnę Wpis, a następnie w karcie Dodaj kolumnę kliknij ikonę Duplikuj kolumnę.
10. Zaznacz kolumnę Wpis — kopia, a następnie w karcie Przekształć kliknij ikonę Format
i wybierz polecenie Małe litery.
11. Zmień nazwę kolumny Wpis — kopia na Małe litery.
12. Lista słów kluczowych znajduje się w pliku C:\Dane\R11\Słowa kluczowe.txt. Aby utworzyć
na jego podstawie nowe zapytanie, kliknij w karcie Strona główna ikonę Nowe źródło, następnie
wybierz polecenia Plik/Plik tekstowy lub CSV i zaimportuj plik C:\Dane\R11\Słowa kluczowe.txt.
13. W oknie Słowa kluczowe.txt, które się pojawi, kliknij OK.
14. W zapytaniu Słowa kluczowe zmień nazwę kolumny na Słowo kluczowe.
15. Zaznacz kolumnę Słowo kluczowe, a następnie w karcie Przekształć kliknij ikonę Format
i wybierz polecenie Małe litery. Wtedy będziesz miał pewność, że w filtrze, którego użyjesz
w następnej części ćwiczenia, nie pominiesz żadnego tematu z powodu różnego traktowania
wielkich i małych liter.
= #"Słowa kluczowe"
c. Kliknij OK, aby zamknąć okno.
18. Pojawi się kolumna Iloczyn kartezjański zawierająca w każdym wierszu obiekt Table
reprezentujący tabelę Słowa kluczowe. Rozwiniesz ją teraz.
19. W nagłówku kolumny Iloczyn kartezjański kliknij ikonę rozwinięcia. (Ewentualnie zaznacz
tę kolumnę, a następnie w karcie Przekształć kliknij ikonę Rozwiń). W panelu, który się
pojawi, zaznacz pozycję Słowo kluczowe i usuń zaznaczenie opcji Użyj oryginalnej nazwy
kolumny jako prefiksu. Kliknij OK.
W panelu podglądu pojawi się tabela zawierająca iloczyn kartezjański. Teraz dowiesz się,
dlaczego jest tak przydatny. Po utworzeniu wszystkich kombinacji wpisów i tematów
zastosujesz filtr przepuszczający tylko wpisy zawierające znalezione tematy. Utworzysz w tym
celu kolumnę warunkową, w której następnie zastosujesz filtr.
20. W karcie Dodaj kolumnę kliknij ikonę Kolumna warunkowa. W oknie Dodawanie kolumny
warunkowej, które się pojawi, wprowadź opisane niżej i przedstawione na rysunku 11.5 zmiany.
a. W polu Nazwa nowej kolumny wpisz Temat.
b. W rozwijanej liście Nazwa kolumny wybierz pozycję Małe litery.
c. W rozwijanej liście Operator wybierz pozycję zawiera.
280
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
RYSUNEK 11.5. Za pomocą kolumny warunkowej można powiązać wpisy Microsoft Press na Facebooku
ze słowami kluczowymi umieszczonymi w tabeli będącej wynikiem iloczynu kartezjańskiego
d. W pierwszej rozwijanej liście poniżej etykiety Wartość wskaż pozycję Wybierz kolumnę,
a w drugiej wybierz Słowo kluczowe.
e. W pierwszej rozwijanej liście poniżej etykiety Wartość wyjściowa wskaż pozycję
Wybierz kolumnę, a w drugiej wybierz Słowo kluczowe.
f. W polu W przeciwnym razie wpisz null.
g. Kliknij OK, aby zamknąć okno.
Pojawi się kolumna Temat z wartościami null w wierszach, w których wpis nie zawiera słowa
kluczowego.
21. W nagłówku kolumny Temat kliknij ikonę filtru, a następnie wybierz polecenie Usuń puste.
22. Usuń kolumny Wpis, Małe litery i Słowo kluczowe.
Przeanalizujmy to, co zrobiłeś do tej pory. Za pomocą iloczynu kartezjańskiego powiązałeś wpisy
ze słowami kluczowymi zawartymi w dynamicznej liście. Do utworzenia raportu będziesz potrzebował
dwóch tabel. Pierwsza z nich to Wpisy Microsoft Press zawierająca m.in. kolumny ID wpisu i Wpis,
a druga to Tematy wpisów z kolumnami ID wpisu i Temat.
281
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 11.6. Utworzenie relacji pomiędzy polem „ID wpisu” tabeli „Wpisy Microsoft Press” a polem
„ID wpisu” tabeli „Tematy wpisów”
282
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
Teraz możesz zająć się analizą danych (patrz rysunek 11.4). Gotowe rozwiązanie jest zapisane
w plikach R11-02 - rozwiązanie.xlsx oraz R11-02 - rozwiązanie.pbix. Za pomocą wykresu
przestawnego i fragmentatora możesz sprawdzać, ile wpisów na różne tematy pojawiało się
na Facebooku na przestrzeni czasu.
Zapisz raport. Za chwilę wykonasz ważną operację zwiększającą wydajność przetwarzania
danych. Wcześniej jednak przeanalizujemy, co udało Ci się do tej pory osiągnąć. Kiedy zastosowałeś
iloczyn kartezjański, usunąłeś trzy mankamenty wymienione w ćwiczeniu 11.1.
Możesz teraz ładować większe listy słów kluczowych bez konieczności ręcznego wpisywania
ich w ustawieniach kolumny warunkowej. W ten sposób usunąłeś mankament 1.
Listę słów kluczowych możesz dynamicznie ładować z zewnętrznego pliku, przy czym nie
musisz wiedzieć zawczasu, które z nich będą wykorzystane. Usunąłeś więc mankament 2.,
jednak możesz zwiększyć wydajność tego rozwiązania. Nie zamykaj edytora Power Query,
ponieważ ten temat będzie opisany dalej w tym rozdziale.
Jeżeli wpis zawiera kilka słów kluczowych, możesz z nim skojarzyć kilka tematów.
Usunąłeś mankament 3.
Wskazówka. Choć funkcja Table.Buffer bardzo skutecznie skraca czas ładowania danych
do raportu, nie używaj jej przy każdym scalaniu tabel. Przykładowo funkcja ta nie przydaje się
w przekształceniach Scal zapytania lub Dołącz zapytania. Warto ją stosować tylko wtedy, gdy
do utworzenia kolumny niestandardowej wymagany jest dostęp do innego źródła danych.
283
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
284
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
Wskazówka. Aby porównać czasy odświeżania zapytań, należy użyć odpowiednio dużych zbiorów
danych. Żeby sztucznie powiększyć zbiór użyty w tym ćwiczeniu, zwielokrotnij tabelę za pomocą
funkcji Table.Repeat. W tym celu w zapytaniu Wpisy Microsoft Press dodaj niestandardowy
krok i wpisz w nim następującą formułę:
= Table.Repeat(#"Zmieniono typ", 100)
(Wpis, SłowaKluczowe)=>
Table.SelectRows(SłowaKluczowe, each Text.Contains(Wpis, [Słowo kluczowe]))
Argumentami tej funkcji są wpis i tabela słów kluczowych, a zwracanym wynikiem fragment
tej tabeli zawierający słowa kluczowe występujące we wpisie. Zwróć uwagę na przyjęte
założenie, że tabela zawiera kolumnę o nazwie Słowo kluczowe.
Kliknij przycisk Gotowe, aby zamknąć edytor.
7. W panelu Zapytania kliknij zapytanie Tematy wpisów z funkcją.
8. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. W polu Nazwa nowej
kolumny wpisz Słowa kluczowe, a w polu Formuła kolumny niestandardowej wpisz
następującą formułę:
= FnWyszukajSłowaKluczowe([Małe litery], #"Słowa kluczowe")
Każda komórka w nowej kolumnie niestandardowej będzie zawierała listę słów kluczowych
znalezionych w kolumnie Małe litery.
285
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. Jak już się przekonałeś w ćwiczeniu 11.2, przetwarzanie danych za pomocą kolumny
niestandardowej może być długotrwałą operacją. W tym przykładzie silnik języka M
nieustannie ładuje listę słów kluczowych ze źródła danych. Aby temu zapobiec, na końcu
ćwiczenia użyjesz funkcji Table.Buffer.
9. Kliknij OK, aby zamknąć okno Kolumna niestandardowa, a następnie rozwiń kolumnę Słowa
kluczowe (usuń przy tym zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako prefiksu).
10. Pojawi się kolumna Słowo kluczowe zawierająca tematy znalezione we wpisach. Jeżeli dany
wpis nie zawiera żadnego tematu, wtedy w powyższej kolumnie zostanie umieszczona
wartość null.
11. Kliknij w nagłówku kolumny Słowo kluczowe ikonę filtru i wybierz polecenie Usuń puste.
12. Usuń kolumny Wpis i Małe litery. Zmień nazwę kolumny Słowo kluczowe na Temat.
13. Aby załadować zapytanie do raportu i porównać wydajność trzech zapytań, kliknij w karcie
Strona główna ikonę Zamknij i załaduj. Następnie w Excelu w karcie Dane kliknij ikonę
Zapytania i połączenia. W panelu o tej samej nazwie kliknij prawym przyciskiem myszy
zapytanie Tematy wpisów z funkcją i z podręcznego menu wybierz polecenie Załaduj do.
W oknie Importowanie danych zaznacz opcje Utwórz tylko połączenie oraz Załaduj te dane
do modelu danych. Na koniec kliknij ikonę Odśwież wszystko. Zwróć uwagę, że nowe
zapytanie ładuje się najdłużej. Jest nieco wolniejsze od zapytania Tematy wpisów
wykorzystującego iloczyn kartezjański bez funkcji Table.Buffer. Teraz dowiesz się,
jak możesz zwiększyć wydajność zapytania.
14. Otwórz edytor Power Query i w panelu Zapytania kliknij prawym przyciskiem myszy
zapytanie Tematy wpisów z funkcją. Z podręcznego menu wybierz polecenie Duplikuj
i zmień nazwę nowego zapytania na Tematy wpisów (najszybsze).
15. Zaznacz ostatnie zapytanie, a następnie w karcie Strona główna kliknij ikonę
Edytor zaawansowany.
16. Poniżej instrukcji let wpisz poniższy kod:
286
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
RYSUNEK 11.8. Najszybciej ładuje się zapytanie „Tematy wpisów (najszybsze)”, wykorzystujące funkcję
niestandardową i funkcję Table.Buffer
Dlaczego ostatnie zapytanie wykorzystujące funkcję Table.Buffer jest szybsze niż iloczyn
kartezjański, a bez tej funkcji jest wolniejsze? W kroku 6. zaimplementowałeś odwołanie do tabeli
Słowa kluczowe wewnątrz funkcji. Silnik języka M, zaprojektowany tak, aby domyślnie zajmował
minimalną ilość pamięci, usuwał z niej tabelę Słowa kluczowe po wykorzystaniu. Z tego powodu
podczas wyliczania wartości w nowej kolumnie tabela ta była wielokrotnie odczytywana z pliku.
W zapytaniu wykorzystującym iloczyn kartezjański odwołanie do tabeli Słowa kluczowe znajduje się
w głównym kodzie, więc tabela ta nie jest ładowana wielokrotnie z pliku.
Dzięki zastosowaniu funkcji Table.Buffer silnik języka M umieścił tabelę Słowa kluczowe
w pamięci na stałe i nowe zapytanie było szybsze niż zapytanie wykorzystujące iloczyn kartezjański
(nawet po zastosowaniu w nim funkcji Table.Buffer). Zapytanie z iloczynem kartezjańskim jest
wolniejsze od zapytania z funkcją niestandardową, ponieważ zajmuje więcej pamięci i wykonuje
bardziej złożone przekształcenia. Silnik musi w nim replikować każdy wiersz z wpisem tyle razy,
ile jest wierszy w tabeli Słowa kluczowe, a potem stosować filtr. Te dwa przekształcenia nie są
wykonywane w zapytaniu wykorzystującym funkcję niestandardową, dzięki czemu jest ono
wydajniejsze.
Gotowe rozwiązanie jest zapisane w pliku R11-03 - rozwiązanie.xlsx.
287
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
288
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
289
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
13. W panelu Zastosowane kroki zaznacz krok Podzielono kolumnę według ogranicznika
i przyjrzyj się kodowi w pasku formuły. Jak pokazuje rysunek 11.9, formuła jest bardzo
skomplikowana.
RYSUNEK 11.9. Krok „Podzielono kolumnę według ogranicznika” nie uwzględnia znaków interpunkcyjnych;
aby rozwiązać problem, musisz zmodyfikować formułę
Zwróć uwagę, że formuła składa się z dwóch części: pierwsza dzieli kolumnę Wpis na obiekty
typu List, które następnie rozwija. Nie musisz dokładnie rozumieć kodu tej formuły. Skup się
na jej najważniejszej części, wyróżnionej na rysunku 11.9 i pokazanej niżej:
Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv)
Zastąp powyższy kod następującym:
Splitter.SplitTextByAnyDelimiter(#"Znaki interpunkcyjne", QuoteStyle.Csv)
W ten sposób możesz dzielić wpisy według dowolnych ograniczników umieszczonych
w liście Znaki interpunkcyjne. Pomysłowe, prawda?
Wskazówka. Jeżeli chcesz podzielić kolumnę według kilku ograniczników, użyj przekształcenia
Podziel kolumny według ogranicznika, a następnie odpowiednio zmień formułę M. Zastąp funkcję
Splitter.SplitTextByDelimiter funkcją Splitter.SplitTextByAnyDelimiter, a zamiast
pojedynczego ogranicznika użyj listy ograniczników. Technikę tę możesz wykorzystywać
do dzielenia kolumny na kolumny oraz na wiersze.
W wyniku podzielenia wpisów według różnych znaków interpunkcyjnych pojawiło się dużo
wierszy z pustymi komórkami, które musisz odfiltrować.
14. W panelu Zastosowane kroki zaznacz ostatni krok, a następnie w nagłówku kolumny Słowo
kliknij ikonę filtru i wybierz polecenie Usuń puste.
15. Zamknij edytor Power Query i załaduj zapytania Wpisy Microsoft Press oraz Wszystkie słowa
do modelu danych. Nie ładuj zapytania Znaki interpunkcyjne. Utwórz relację pomiędzy
polami ID wpisu obu tabel (w podobny sposób utworzyłeś relację w ćwiczeniu 11.2 pomiędzy
polami ID wpisu tabel Wpisy Microsoft Press i Tematy wpisów).
16. Zapisz raport. Będzie Ci potrzebny w następnej części ćwiczenia.
290
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
Gdy utworzysz w programie Power BI Desktop wykres słupkowy lub w Excelu tabelę przestawną,
umieszczając pole Słowo w obszarach Wiersze i Wartości, tak jak na rysunku 11.10, okaże się, że
najczęściej we wpisach występują powszechnie używane słowa, co nie jest przydatną informacją.
Dlaczego najczęściej występuje słowo http? Ponieważ wiele wpisów zawiera adresy URL stron
internetowych, zaczynające się od prefiksu http://. Czy nie lepiej byłoby pozostawić odnośniki
niepodzielone i potraktować je jak całe słowa?
291
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
23. W oknie Wstawianie kroku, które się pojawi, kliknij przycisk Wstaw. Domyślnie
przekształcenie to usuwa spacje znajdujące się przed słowem i po słowie. Tutaj
zmodyfikujesz je tak, aby usuwało również znaki interpunkcyjne.
Zwróć uwagę na następujący fragment kodu w pasku formuły:
= Table.TransformColumns(#"Podzielono kolumnę według ogranicznika",{{"Wpis", Text.Trim,
type text}})
Zastąp ten fragment następującym:
= Table.TransformColumns(#"Podzielono kolumnę według ogranicznika",{{"Wpis", each
Text.Trim(_, #"Znaki interpunkcyjne"), type text}})
W ten sposób zamiast domyślnych argumentów funkcji Text.Trim użyjesz innych, jawnie
podanych. Jak pamiętasz z rozdziału 9., „Wprowadzenie do języka M”, instrukcja each służy
do tworzenia prostych funkcji. Drugim argumentem funkcji Text.Trim jest lista znaków
przeznaczonych do usunięcia. W tym przypadku jest to lista Znaki interpunkcyjne, którą
utworzyłeś wcześniej.
Uwaga. Lista Znaki interpunkcyjne zawiera spację, znak tabulacji, powrotu kursora i nowego
wiersza, które już zostały użyte do podzielenia wpisów. Aby całe zapytanie było bardziej wydajne,
utwórz duplikat tej listy, usuń z niego powyższe znaki i umieść jego nazwę w drugim argumencie
funkcji Text.Trim.
Teraz na podstawie zapytania Wszystkie słowa — bez interpunkcji utwórz tabelę przestawną,
tak jak na rysunku 11.11. Jak widać, nie ma w niej słowa http.
292
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
293
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
7. Usuń kolumnę Stop-słowa i zamknij edytor. Nie ładuj zapytania Stop-słowa do modelu
danych, natomiast załaduj do niego zapytanie Bez stop-słów.
Utwórz tabelę przestawną zliczającą wystąpienia słów w zapytaniu Bez stop-słów (patrz rysunek
11.13). Na podstawie uzyskanych wyników można wyciągnąć kilka interesujących wniosków.
294
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
295
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
d. W rozwijanej liście poniżej tabeli Tematy wpisów wybierz pozycję Słowa kluczowe.
e. W tabeli Słowa kluczowe zaznacz kolumnę Słowo kluczowe.
f. W rozwijanej liście Rodzaj sprzężenia wybierz pozycję Wewnętrzne
(tylko pasujące wiersze) i kliknij OK.
8. Zmień nazwę kolumny Słowo na Temat.
9. Aby uniknąć sytuacji, w której to samo słowo kluczowe pojawi się kilka razy w tym samym
wpisie, zaznacz kolumny ID wpisu i Temat, a następnie w karcie Strona główna kliknij ikonę
Usuń wiersze i wybierz polecenie Usuń duplikaty. Teraz dane słowo kluczowe będzie
skojarzone z danym identyfikatorem wpisu tylko raz.
Na tym możesz zakończyć ćwiczenie. Jednak pojawia się nowe wyzwanie. Czy zauważyłeś,
że plik Słowa kluczowe.txt zawiera dwuczłonowe frazy, np. power query, power bi lub power pivot?
Ponieważ na początku ćwiczenia podzieliłeś wpisy na pojedyncze słowa, nie będziesz w stanie
wyszukać w nich dwuczłonowych słów kluczowych. W następnej części ćwiczenia dowiesz się,
jak rozwiązać ten problem.
Zapisz skoroszyt lub raport. Wykorzystasz go w następnej części ćwiczenia do wyszukiwania
wieloczłonowych słów kluczowych.
RYSUNEK 11.14. Dwuczłonowe słowa kluczowe można wyszukiwać, stosując tabelę konwersji
i przedstawioną tu sekwencję przekształceń
296
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
Jak pokazuje rysunek 11.14, najpierw musisz utworzyć tabelę konwersji. Użyjesz do tego celu
odwołania do tabeli Słowa kluczowe. Aby kontynuować ćwiczenie, wykonaj poniższe kroki.
10. W panelu Zapytania zaznacz zapytanie Słowa kluczowe i z podręcznego menu wybierz
polecenie Odwołanie. Zmień nazwę nowego zapytania na Tabela konwersji.
11. Aby pozostawić w zapytaniu wyłącznie frazy zawierające spacje, wykonaj poniższe kroki.
a. W karcie Przekształć kliknij ikonę Format i wybierz polecenie Przycięcie. Tabela Słowa
kluczowe nie zawiera wprawdzie wiodących ani końcowych spacji, ale dobrą praktyką
jest stosowanie tego przekształcenia przed wykonaniem kolejnych kroków.
b. W nagłówku kolumny Słowo kluczowe kliknij ikonę filtru, a następnie wybierz polecenia
Filtry tekstu i Zawiera.
c. W oknie Filtrowanie wierszy, które się pojawi, wpisz spację w polu po prawej stronie
rozwijanej listy zawiera i kliknij OK. Teraz tabela widoczna w panelu podglądu powinna
zawierać dziewięć wierszy.
12. Zmień nazwę kolumny Słowo kluczowe na Źródło.
13. Aby utworzyć kopię kolumny Źródło, w której spacje będą zastąpione znakami podkreślenia,
wykonaj następujące kroki.
a. Zaznacz kolumnę Źródło, a następnie w karcie Dodaj kolumnę kliknij ikonę Duplikuj.
b. Zmień nazwę nowej kolumny na Cel.
c. W karcie Strona główna kliknij ikonę Zamienianie wartości.
d. W oknie Zamienianie wartości, które się pojawi, wpisz w polu Wartość do znalezienia
spację, a w polu Zamień na wpisz znak podkreślenia. Kliknij OK, aby zamknąć okno.
Tabela konwersji jest gotowa (patrz rysunek 11.4). Teraz pora, abyś dowiedział się, jak jej
użyć. W kolejnych krokach każdą wartość w kolumnie Wpis w tabeli Wpisy Microsoft Press,
występującą w kolumnie Źródło, w tabeli konwersji musisz zamienić na jej odpowiednik
w kolumnie Cel. Przekształcenie to musisz wykonać przed krokiem Podzielono kolumnę
według ogranicznika. Zamienianie pojedynczych wartości w edytorze Power Query jest
proste, ale tutaj masz całą sekwencję par Źródło/Cel.
Niestety, interfejs edytora nie oferuje funkcjonalności umożliwiającej zastępowanie kilku
różnych ciągów znaków. Co więcej, funkcja Table.ReplaceValue nie ma odpowiednika
pozwalającego zastąpić kilka wartości. Dlatego musisz zastosować dość skomplikowaną
technikę polegającą na użyciu funkcji List.Accumulate.
Jak pamiętasz z rozdziału 9., „Wprowadzenie do języka M”, argumentami funkcji
List.Accumulate są lista, obiekt inicjujący i funkcja akumulująca, która powinna zawierać
obiekt stanu i obiekt bieżący (reprezentujący element listy podczas jej iterowania).
Po wykonaniu przekształcenia i przetworzeniu całej listy funkcja ta zwraca obiekt stanu
zawierający zakumulowane wyniki. Teraz jest dobry moment, abyś na chwilę wrócił do
rozdziału 9. i przypomniał sobie opis funkcji List.Accumulate, gdyż wtedy będziesz
wiedział, jak działa wyrażenie, które za chwilę wpiszesz. Jeśli nawet nie znasz dobrze
języka M, możesz kontynuować ćwiczenie, ponieważ nie musisz w pełni rozumieć
wyrażeń, których tutaj użyjesz.
297
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Zanim wykorzystasz funkcję List.Accumulate, dowiedz się, jak możesz przekształcić tabelę
konwersji w listę par wartości źródło-cel, którą umieścisz w argumencie powyższej funkcji.
Rysunek 11.15 pokazuje, jak do tego celu użyć funkcji Table.ToRecords zwracającej listę
rekordów (po jednym dla każdego wiersza oryginalnej tabeli).
RYSUNEK 11.15. Za pomocą funkcji Table.ToRecords można przekształcić tabelę konwersji w listę rekordów
Teraz, gdy wiesz już, jak utworzyć listę rekordów, dowiesz się, jakiej funkcji możesz użyć,
aby zdefiniować funkcję akumulującą. Argumentem takiej funkcji powinien być wpis
z Facebooka, a przekształcenie powinno polegać na zastąpieniu wartości Źródło jej
odpowiednikiem z kolumny Cel. Aby np. ciąg power bi nie został w kolejnym kroku
podzielony na dwa osobne słowa, funkcja musi go zastąpić ciągiem power_bi.
Poniżej przedstawiony jest kod funkcji akumulującej:
(wpis, rekordKonwersji) =>
Text.Replace(
wpis,
rekordKonwersji[Źródło],
rekordKonwersji[Cel]
)
Funkcja ta zastępuje za pomocą funkcji Text.Replace we wpisie z Facebooka
(pierwszy argument) ciąg źródłowy (drugi argument) ciągiem docelowym (trzeci argument).
14. Teraz masz już wszystkie części niezbędne do utworzenia formuły wykorzystującej funkcję
List.Accumulate:
List.Accumulate(
Table.ToRecords(#"Tabela konwersji"),
[Wpis],
(wpis, rekordKonwersji) =>
Text.Replace(
wpis,
rekordKonwersji[Źródło],
rekordKonwersji[Cel]
)
)
Powyższa formuła użyta w kolumnie niestandardowej będzie modyfikować każdą wartość
umieszczoną w kolumnie Wpis w następujący sposób: wyszuka w niej wszystkie słowa
kluczowe zawarte w kolumnie Źródło i zastąpi je ich odpowiednikami z kolumny Cel.
Formułę tę zastosujesz w kolumnie niestandardowej i będzie ona wykonywana dla każdego
wiersza zawierającego wpis Microsoft Press na Facebooku. Za każdym razem będzie iterować
pary Źródło/Cel w tabeli konwersji. Stanem inicjującym (drugim argumentem funkcji
List.Accumulate) będzie wartość z kolumny Wpis. Funkcja akumulująca (trzeci argument
funkcji List.Accumulate) zawiera stan i bieżące argumenty (o nazwach wpis i rekordKonwersji).
298
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
Argument stanu zawiera wartość bieżącej komórki w kolumnie Wpis. Bieżącym argumentem
funkcji akumulującej jest bieżący rekord zawierający parę Źródło/Cel. Funkcja akumulująca
będzie zastępowała we wpisie słowo kluczowe Źródło jego odpowiednikiem Cel. W kolejnej
iteracji funkcja List.Accumulate użyje następnej pary Źródło/Cel.
W kolejnych krokach wykorzystasz funkcję List.Accumulate do zastąpienia spacji znakami
podkreślenia w słowach kluczowych we wpisach. Operację tę zaimplementujesz przed
krokiem Podzielono kolumnę według ogranicznika.
15. W panelu Zapytania zaznacz zapytanie Wszystkie słowa — bez interpunkcji dzielące wpisy na
słowa. W panelu Zastosowane kroki zaznacz krok Tekst pisany małymi literami znajdujący się
przed krokiem Podzielono kolumnę według ogranicznika.
16. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. W oknie Wstawianie kroku,
które się pojawi, kliknij przycisk Wstaw.
17. W oknie Kolumna niestandardowa, które się pojawi, wprowadź poniższe zmiany.
a. W polu Nazwa nowej kolumny wpisz Zmodyfikowany wpis.
b. W polu Formuła kolumny niestandardowej wpisz formułę z kroku 14. Kliknij OK,
aby zamknąć okno.
W nowej kolumnie Zmodyfikowany wpis pojawią się wpisy z zastąpionymi wartościami.
Aby sprawdzić, czy funkcja List.Accumulate spełniła swoje zadanie, utwórz tymczasowy
krok filtrujący wpisy zawierające frazy power query i power pivot. W tym celu w panelu
Zastosowane kroki zaznacz krok Dodano kolumnę niestandardową, a następnie w nagłówku
kolumny Wpis kliknij ikonę filtru. Wybierz polecenia Filtry tekstu i Zawiera. W oknie
Filtrowanie wierszy wpisz w pierwszym polu po prawej stronie power query i zaznacz opcję
Oraz. W dolnej rozwijanej liście po lewej stronie wybierz pozycję zawiera i w polu po jej
prawej stronie wpisz power pivot. Kliknij OK, aby zamknąć okno.
W panelu podglądu pojawi się m.in. wiersz zawierający w kolumnie Wpis następujący tekst:
microsoft office 2016 step by step …
• solve business intelligence problems with power pivot and power query …
Natomiast w kolumnie Zmodyfikowany wpis będzie widoczny zmieniony tekst:
microsoft office 2016 step by step …
• solve business intelligence problems with power_pivot and power_query …
18. Usuń tymczasowy filtr. W tym celu usuń z panelu Zastosowane kroki krok Przefiltrowano
wiersze1.
19. W panelu Zastosowane kroki zaznacz krok Dodano kolumnę niestandardową i usuń kolumnę
Wpis. W oknie Wstawianie kroku, które się pojawi, kliknij przycisk Wstaw.
20. Zmień nazwę kolumny Zmodyfikowany wpis na Wpis. Jak poprzednio, w oknie Wstawianie
kroku kliknij Wstaw.
Teraz wszystkie dwuczłonowe słowa kluczowe zawierają znaki podkreślenia zamiast spacji,
dzięki czemu nie zostaną podzielone w kolejnym kroku.
21. Aby na koniec odtworzyć spacje, zaznacz w panelu Zapytania zapytanie Bez stop-słów,
a następnie w panelu Zastosowane kroki zaznacz ostatni krok. W tym miejscu zastąpisz
znaki podkreślenia spacjami.
299
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
22. Znaki podkreślenia możesz zastąpić na dwa sposoby. Pierwszy jest dość prosty: jeżeli jesteś
pewien, że żaden ważny tekst w karcie Słowo nie zawiera znaku podkreślenia, możesz
zastosować przekształcenie Zamień wartości.
Drugi sposób jest lepszy, jeżeli kolumna zawiera teksty ze znakami podkreślenia
(inne niż słowa kluczowe). Aby zastąpić te znaki tylko w słowach kluczowych,
wykonaj następujące kroki.
a. Zaznacz zapytanie Bez stop-słów, a następnie w karcie Dodaj kolumnę kliknij ikonę
Kolumna niestandardowa.
b. W polu Nazwa nowej kolumny wpisz Zmodyfikowane słowo.
c. W polu Formuła kolumny niestandardowej wpisz poniższy kod:
List.Accumulate(
Table.ToRecords(#"Tabela konwersji"),
[Słowo],
(słowo, rekordKonwersji) =>
if słowo = rekordKonwersji[Cel] then
rekordKonwersji[Źródło]
else
słowo
)
d. Kliknij OK, aby zamknąć okno.
Powyższa formuła jest nieco prostsza niż użyta w kroku 14. Jest wykorzystywana w kolumnie
niestandardowej, a więc wykonywana dla każdego wiersza z wpisem. Podobnie jak poprzednia
formuła, iteruje rekordy zawierające pary Źródło/Cel. Początkowym stanem (drugi argument
funkcji List.Accumulate) jest wartość w kolumnie Słowo. Funkcja akumulująca (trzeci
argument funkcji List.Accumulate) zawiera stan i bieżące argumenty (o nazwach słowo
i rekordKonwersji). Argument stanu zawiera wartość bieżącej komórki w kolumnie Słowo.
Bieżącym argumentem funkcji akumulującej jest bieżący rekord zawierający parę Źródło/Cel.
Funkcja akumulująca porównuje bieżące słowo z wartością w kolumnie Cel (zawierającą
słowo kluczowe ze znakiem podkreślenia). Jeżeli słowa są takie same, funkcja zwraca
odpowiednik z kolumny Źródło, ponieważ celem jest przywrócenie słowa zawierającego
spację. Jeżeli słowa są różne, funkcja zwraca oryginalne słowo. W kolejnej iteracji funkcja
List.Accumulate używa następnej pary Źródło/Cel.
23. Aby sprawdzić, czy formuła działa poprawnie, odfiltruj w kolumnie Słowo wartość power_bi.
Pojawią się wiersze zawierające w kolumnie Zmodyfikowane słowo powyższy ciąg.
Po sprawdzeniu, że wszystko działa poprawnie, usuń krok filtru.
24. Usuń kolumnę Słowo, a następnie zmień nazwę kolumny Zmodyfikowane słowo na Słowo.
25. W panelu Zapytania zaznacz zapytanie Tematy wpisów i w nagłówku kolumny Temat
kliknij ikonę filtru. W panelu filtru powinny pojawić się dwuczłonowe słowa kluczowe.
Zanim załadujesz zapytanie Tematy wpisów do raportu, popraw jego wydajność za pomocą
funkcji Table.Buffer lub List.Buffer. Jak pamiętasz, w krokach 14. i 22. utworzyłeś kolumny
niestandardowe odwołujące się do tabeli konwersji. W ćwiczeniach 11.2 i 11.3 dowiedziałeś
się, że silnik M w kolumnie niestandardowej wielokrotnie odczytuje dane z zewnętrznych
źródeł. W kolejnych krokach rozwiążesz ten problem i skrócisz czas ładowania zapytania
za pomocą funkcji List.Buffer.
300
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
26. Zaznacz zapytanie Wszystkie słowa — bez interpunkcji, a następnie w karcie Strona główna
kliknij ikonę Edytor zaawansowany.
Powyżej wiersza zaczynającego się od #"Dodano kolumnę niestandardową" wpisz następujący
wiersz:
BuforListy = List.Buffer(Table.ToRecords(#"Tabela konwersji")),
W kroku #"Dodano kolumnę niestandardową" w pierwszym argumencie funkcji
List.Accumulate zastąp funkcję Table.ToRecords(#"Tabela konwersji") zmienną
BuforListy. Poniżej przedstawiony jest cały kod tego kroku po wprowadzeniu zmiany:
#"Dodano kolumnę niestandardową" = Table.AddColumn(
#"Tekst pisany małymi literami",
"Zmodyfikowany wpis",
each List.Accumulate(
BuforListy,
[Wpis],
(wpis, rekordKonwersji) =>
Text.Replace(
wpis,
rekordKonwersji[Źródło],
rekordKonwersji[Cel]
)
),
27. Kliknij przycisk Gotowe, aby zamknąć zaawansowany edytor.
28. Zaznacz zapytanie Bez stop-słów, a następnie w karcie Strona główna kliknij ikonę
Edytor zaawansowany.
Powyżej wiersza zaczynającego się od #"Dodano kolumnę niestandardową" wpisz
następujący kod:
BuforListy = List.Buffer(Table.ToRecords(#"Tabela konwersji")),
W kroku #"Dodano kolumnę niestandardową" w pierwszym argumencie funkcji List.Accumulate
zastąp funkcję Table.ToRecords(#"Tabela konwersji") zmienną BuforListy. Poniżej
przedstawiony jest cały kod tego kroku po wprowadzeniu opisanej zmiany:
#"Dodano kolumnę niestandardową" = Table.AddColumn(
#"Usunięto kolumny",
"Zmodyfikowane słowo",
each List.Accumulate(
BuforListy,
[Słowo],
(słowo, rekordKonwersji) =>
if słowo = rekordKonwersji[Cel] then
rekordKonwersji[Źródło]
else
słowo
)
),
Teraz możesz załadować zapytanie Lista tematów do raportu i utworzyć nową tabelę lub
wykres pokazujące najczęstsze tematy wpisów wydawnictwa Microsoft Press na Facebooku
(patrz rysunek 11.16).
301
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 11.16. Raport przedstawia liczbę wpisów na Facebooku według tematów, w tym przypadku
w formie tabeli przestawnej i wykresu przestawnego w Excelu
Gotowe rozwiązanie jest zapisane w plikach R11-06 - rozwiązanie.xlsx oraz R11-06 - rozwiązanie.pbix.
302
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 11. PODSTAWY ANALIZY TEKSTU
RYSUNEK 11.17. W programie Power BI Desktop dane tekstowe można wizualizować w postaci chmury
słownej; opcja „Słowa ignorowane” pozwala dzielić wpisy na słowa na poziomie wizualizacji
4. W wynikach wyszukiwania pojawi się niestandardowy element Word Cloud. Kliknij przycisk
Dodaj. W oknie z powiadomieniem, które się pojawi, kliknij OK.
5. Kliknij ikonę Pobierz dane, następnie wybierz pozycję Program Excel i kliknij przycisk
Połącz.
6. Odszukaj plik C:\Dane\R11\R11-01.xlsx i kliknij przycisk Otwórz.
7. W oknie Nawigator zaznacz pozycję Facebook i kliknij przycisk Załaduj.
8. W panelu Wizualizacje kliknij element WordCloud. Przeciągnij z panelu Pola pole Wpis
do panelu Wizualizacje do pola Kategoria. Po chwili zostaną do niego załadowane dane.
9. Kliknij chmurę słowną w głównym panelu. W panelu Wizualizacje kliknij ikonę Format,
a następnie włącz opcję Słowa ignorowane oraz Domyślne słowa ignorowane. Jak się
przekonasz, Power BI Desktop skutecznie usuwa stop-słowa. Aby dodać własne stop-słowo,
wpisz je w polu Słowa.
Jeżeli załadujesz dużo wpisów do chmury słownej, wtedy wszelkie interakcje z raportem będą
odbywały się bardzo powoli. Aby rozwiązać ten problem, podziel wpisy w edytorze Power
Query na słowa, tak jak to zrobiłeś w ćwiczeniach 11.4 i 11.5, a następnie uzyskane dane
załaduj do chmury słownej. Innym ważnym powodem, dla którego powinieneś wykonywać
to przekształcenie, jest możliwość późniejszego prezentowania najczęściej używanych słów
za pomocą innych elementów wizualnych, np. wykresu słupkowego. Tego rodzaju elementy,
w odróżnieniu od chmury słownej, nie mają wbudowanych funkcjonalności pomijania
stop-słów ani dzielenia długich wpisów na pojedyncze słowa.
Gotowe rozwiązanie jest zapisane w pliku R11-07 - rozwiązanie.pbix, w którym zostały
wykorzystane różne techniki opisane w tym rozdziale, m.in. analiza liczby słów i tematów.
Za sprawą bardzo użytecznych powiązań tworzonych pomiędzy elementami wizualnymi
w Power BI można wydobywać więcej kluczowych informacji z dostępnych danych tekstowych.
303
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Podsumowanie
W tym rozdziale poznałeś kilka technik pozyskiwania informacji z danych tekstowych. Niektóre
dane, takie jak daty, kody pocztowe czy adresy, można przetwarzać wprost, ale do analizy tekstu
lepiej nadają się opisane tutaj metody.
We wpisach umieszczonych przez wydawnictwo Microsoft Press na Facebooku wyszukiwałeś
słowa kluczowe i określałeś tematy. Dowiedziałeś się, jak za pomocą kolumny warunkowej można
wyszukiwać niewielką liczbę słów kluczowych. Bardzo skuteczną metodą wyszukiwania dużych
ilości słów dynamicznie ładowanych z zewnętrznych źródeł jest iloczyn kartezjański. Nauczyłeś się
tworzyć niestandardowe funkcje wyszukujące słowa kluczowe. Przekonałeś się, że za pomocą funkcji
Table.Buffer i List.Buffer można ograniczyć liczbę odwołań w kolumnach niestandardowych do
zewnętrznych źródeł danych, dzięki czemu raporty ładują się szybciej.
Poznałeś techniki dzielenia wpisów na słowa i pomijania stop-słów. Dowiedziałeś się, jak scalając
zapytania, możesz filtrować dane w tabelach według słów kluczowych pochodzących z zewnętrznych
źródeł. Aby pominąć stop-słowa, użyłeś lewego antysprzężenia. Technika ta przydaje się podczas
filtrowania wierszy w oparciu o zewnętrzną listę wartości. Aby powiązać podzielone słowa z listą
słów kluczowych, scaliłeś zapytania za pomocą sprzężenia wewnętrznego, które przydaje się również
do filtrowania danych w oparciu o zewnętrzną listę słów.
W tym rozdziale dowiedziałeś się też, jak wyszukiwać wieloczłonowe słowa kluczowe. W tym
celu tymczasowo przekształciłeś wpisy za pomocą funkcji List.Accumulate i tabeli konwersji.
Na koniec poznałeś chmurę słowną — element wizualny w Power BI umożliwiający prezentowanie
danych tekstowych.
Twoja przygoda z analizą tekstu dopiero się zaczyna. W rozdziale 12., „Zaawansowana analiza
tekstu: rozpoznawanie znaczenia”, dowiesz się, jak wykorzystać potęgę sztucznej inteligencji usługi
Azure do przeprowadzania zaawansowanych analiz tekstu. Nauczysz się stosować takie techniki jak
tłumaczenie tekstu, analiza nastroju i wyszukiwanie fraz — i to bez pomocy analityków i programistów.
304
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12.
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
W tym rozdziale dowiesz się, jak w Excelu i Power BI tworzyć zapytania przekładające tekst na
inny język, rozpoznające jego nastrój i wyszukujące kluczowe frazy. Wykorzystasz w tym celu dwa
interfejsy API oferowane przez usługę Azure Cognitive Services: Text Analytics i Translator Text
(patrz rysunek 12.1).
RYSUNEK 12.1. Implementacja w Excelu lub Power BI procesu przedstawionego na tym rysunku nie wymaga
programowania; całą magię realizuje czarna skrzynka o nazwie Azure Cognitive Services
306
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
RYSUNEK 12.2. Odświeżenie raportu powoduje wykonanie trzech kroków: załadowanie danych z zewnętrznego
źródła, przesłanie ich do usługi Azure Cognitive Services i umieszczenie wyników w raporcie
Usługa Azure Cognitive Services jest przykładem usługi SaaS (ang. software-as-a-service
— oprogramowanie jako usługa). Oznacza to, że nie musisz pisać kodu, który na zewnętrznych
serwerach wykonywałby żądane operacje. Wystarczy, że załadujesz dane, przygotujesz je, prześlesz
do usługi Azure Cognitive Services i uzyskane wyniki umieścisz w raporcie. To wszystko wykonasz
w jednym miejscu przy wsparciu edytora Power Query. Do komunikacji pomiędzy raportem a usługą
wykorzystywana jest metoda HTTP POST i proste funkcje M, które poznasz dalej w tym rozdziale.
Aby zacząć korzystać z interfejsów Translator Text API i Text Analytics API, musisz najpierw
uzyskać do nich klucze w sposób opisany w następnym punkcie rozdziału.
307
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Uwaga. Z usługi Azure Cognitive Services można korzystać bezpłatnie bez ograniczeń
czasowych, pod warunkiem że raport zawiera niewielką ilość danych. Ponadto bezpłatnie
można jej używać przez pierwszy miesiąc.
Uwaga. Nie udostępniaj kluczy innym osobom. Dalej w tym rozdziale dowiesz się więcej
o zabezpieczaniu kluczy w edytorze Power Query.
308
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
RYSUNEK 12.3. Skopiuj do schowka jeden z kluczy dostępnych w sekcji Klucze zasobu Translacja
Teraz, gdy wiesz już, jak przygotować zasoby interfejsu Translator Text API w usłudze Azure
i uzyskać klucze, zrób to samo dla interfejsu Text Analytics API, niezbędnego w analizie nastroju
tekstu i wyodrębnianiu z niego kluczowych fraz.
309
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
f. W rozwijanej liście Lokalizacja grupy zasobów wybierz pozycję (Europa) Europa Zachodnia.
g. Kliknij przycisk Utwórz.
4. W panelu po lewej stronie kliknij odnośnik Pulpit nawigacyjny, a następnie odnośnik
Analityka. W panelu Analityka — Szybki start kliknij po lewej stronie w sekcji
ZARZĄDZANIE ZASOBAMI odnośnik Klucze.
5. Podobnie jak na rysunku 12.3, zostaną utworzone dwa klucze, które wykorzystasz w ćwiczeniach
12.2 do analizy nastrojów tekstów i 12.4 do wyodrębnienia z nich kluczowych fraz.
Uwaga. Jak już wspomniałem, nie udostępniaj kluczy innym osobom. Dalej w tym rozdziale
dowiesz się więcej o zabezpieczaniu kluczy w edytorze Power Query.
310
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
RYSUNEK 12.4. W oknie „Opcje zapytania” wyłączaj opcję ładowania w tle danych do panelu podglądu
Pamiętaj, że nawet gdy wyłączysz tę opcję, edytor Power Query po każdorazowym otwarciu go
i wybraniu określonych zapytań będzie odwoływał się do interfejsu API usługi Azure Cognitive
Services, aby załadować do panelu podglądu najnowsze dane.
Stosuj przyrostowe odświeżanie danych. W wersji Power BI Premium dostępna jest opcja
przyrostowego odświeżania danych zapobiegająca intensywnemu odwoływaniu się do interfejsu
API. W Excelu i bezpłatnej wersji Power BI nie ma tej opcji. Przy każdorazowym odświeżeniu
raportu zapytanie ładuje wszystkie dane, ponieważ wcześniej załadowane dane nie są nigdzie
przechowywane. Jeżeli będziesz często odświeżał raport wykorzystujący usługę Azure Cognitive
Services, wielokrotnie wyślesz do niej te same dane, co może skutkować osiągnięciem limitu
odwołań do interfejsu API. Aby tego uniknąć, twórz opisane w tym rozdziale zapytania,
wykorzystując kilka plików Excela. Do każdego pliku będą wtedy przyrostowo ładowane dane
obejmujące tylko określony przedział czasu. Następnie za pomocą opisanej w rozdziale 3.,
„Łączenie danych z kilku źródeł”, techniki importowania danych z plików zapisanych w folderze
będziesz mógł w jednym raporcie scalić wszystkie fragmenty, odwołując się do interfejsu API tylko
w niezbędnym zakresie.
311
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Tłumaczenie tekstu
Automatyczne tłumaczenie tekstu za pomocą edytora Power Query w Excelu lub Power BI Desktop
może być bardzo dobrym sposobem pozyskiwania informacji z treści napisanych w różnych językach.
W tym podrozdziale dowiesz się, jak tłumaczyć kolumny tekstowe za pomocą interfejsu Translator
Text API usługi Azure Cognitive Services. Na pewno korzystałeś już z tłumaczy internetowych, ręcznie
kopiując i wklejając teksty napisane w obcych językach. Opisana tutaj technika pozwoli Ci zautomatyzować
ten proces i pozyskiwać z danych tekstowych niedostępne wcześniej informacje (patrz rysunek 12.5).
312
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
Aby przetłumaczyć tekst, musisz uwierzytelnić się w usłudze, wysyłając do niej klucz API. W ćwiczeniu
12.1 dowiesz się, jak możesz to zrobić z wykorzystaniem nagłówka Ocp-Apim-Subscription-Key.
Oprócz tego musisz przesłać tekst przeznaczony do przetłumaczenia. W wersji 3.0 interfejsu API
tekst należy umieścić w ciele żądania w formacie JSON, tak jak niżej:
[
{"Text":"Hello world"}
]
W ten sposób można przesłać maksymalnie 25 komunikatów, każdy o maksymalnej długości
1000 znaków (włącznie ze spacjami), przy czym łączna długość wszystkich komunikatów nie może
przekroczyć 5000 znaków. Aby podzielić dłuższy komunikat na mniejsze części, akceptowane przez
interfejs API, użyj metody BreakSentence opisanej na stronie https://docs.microsoft.com/pl-pl/
azure/cognitive-services/translator/reference/v3-0-break-sentence. Ponieważ w tym rozdziale nie ma
miejsca na szczegółowe opisanie wszystkich technik, skupimy się na tłumaczeniu pojedynczych
komunikatów.
313
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
W ten sposób umieścisz rekord wewnątrz listy. Zaznacz w panelu Zastosowane kroki krok
Zaimportowano plik tekstowy. W panelu podglądu zobaczysz efekt wprowadzonych
modyfikacji. Tabela będzie zawierała komunikat zapisany w wymaganym formacie JSON:
[{"Text":"Hello world"}]
5. Teraz, gdy wiesz już, jak przygotowywać komunikaty w formacie JSON, usuń Zapytanie1. Za chwilę
wykorzystasz funkcję Json.FromValue w innej funkcji M, wysyłającej żądanie do interfejsu API.
Wskazówka. W formacie JSON rekordy i listy definiuje się w odwrotny sposób w porównaniu
z językiem M. W języku M nawiasy kwadratowe stosuje się do definiowania rekordów, natomiast
w formacie JSON do definiowania listy. Z kolei nawiasy klamrowe w języku M definiują listę,
a w JSON rekord. Pamiętaj o tym podczas tworzenia w języku M formuł przygotowujących
w formacie JSON dane do wysłania do interfejsu API.
314
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
Uwaga. Zazwyczaj w celu zaimportowania danych z internetu nie trzeba pisać od podstaw
formuł M, tak jak w tym ćwiczeniu. Zamiast tego wystarczy użyć polecenia Dane/Z sieci Web
w Excelu lub Pobierz dane/Internet w Power BI Desktop, a następnie w oknie Z sieci Web
wpisać odpowiedni adres URL. Po wybraniu opcji Zaawansowane można nawet definiować
nagłówki HTTP. Jeżeli jednak trzeba przesłać treść w ciele żądania, wtedy należy utworzyć
formułę M z funkcją Web.Contents.
Funkcja Web.Contents ma dwa parametry, czyli adres URL i opcje. W drugim argumencie
umieszcza się wszystkie dane, m.in. nagłówki i treść, które mają znaleźć się w żądaniu.
W powyższej formule rekord Headers składa się z par klucz-wartość zawierających nagłówki
HTTP wymagane w żądaniu wysyłanym do interfejsu API.
Nagłówek Ocp-Apim-Subscription-Key zawiera wartość parametru KluczAPI, który
utworzyłeś w kroku 7. Ponieważ w nazwie nagłówka użyte są myślniki, które w języku M
są znakami specjalnymi, nazwa została umieszczona wewnątrz cudzysłowów i poprzedzona
znakiem # . Drugi klucz w rekordzie Headers zawiera inny wymagany nagłówek
Content-Type .
Drugi rekord, Content, zawiera wynik funkcji Json.Value opisanej w kroku 4.
Zwróć uwagę, że w funkcji Web.Contents możesz umieścić również inne rekordy, m.in
RelativePath i Query, do których możesz przenieść fragmenty adresu URL. Poniżej
przedstawiona jest formuła M zawierająca nowe elementy wyróżnione pogrubioną czcionką.
Jak widać, teraz adres URL zawiera tylko nazwę domeny.
315
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
let
Źródło = Web.Contents(
"https://api.cognitive.microsofttranslator.com",
[
RelativePath = "translate",
Query = [
#"api-version" = "3.0",
to = "pl"
],
Headers = [
#"Ocp-Apim-Subscription-Key" = KluczAPI,
#"Content-Type" = "application/json"
],
Content = Json.FromValue({[Text = "Hello world"]})
]
)
in
Źródło
316
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
317
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
318
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
RYSUNEK 12.7. Ustaw poziomy prywatności umożliwiające wysyłanie komunikatów przeznaczonych do przetłumaczenia
319
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
a. W rozwijanej liście obok pola zawierającego nazwę katalogu c:\ wybierz pozycję
Organizacyjne.
b. W rozwijanej liście obok pola zawierającego adres URL
https://api.cognitive.microsofttranslator.com wybierz pozycję Organizacyjne.
c. Kliknij przycisk Zapisz.
Wskazówka. Jeżeli przez pomyłkę wybierzesz inne poziomy prywatności, np. Publiczne
i Organizacyjne, wtedy żądanie nie zostanie poprawnie obsłużone. Aby w takim przypadku
usunąć poziomy prywatności, kliknij w karcie Strona główna ikonę Ustawienia źródła danych
i wyczyść uprawnienia dla obu źródeł danych.
Uwaga. Jeżeli interesuje Cię wyłącznie przetwarzanie danych w Excelu, pomiń tę sekcję i otwórz
plik R12-02 - rozwiązanie.xlsx, w którym do wprowadzenia klucza API zostały zastosowane
techniki opisane w rozdziale 8., „Praca grupowa”. Poinformuj osobę, której udostępnisz skoroszyt,
aby w odpowiedniej komórce wpisała swój klucz. Zastosowany sposób rozwiązuje również
problem komunikatu Formula.Firewall opisany też w 8. rozdziale.
Teraz na podstawie raportu Power BI utwórz szablon, który sprawi, że nie ujawnisz swojego
klucza API, a jednocześnie inny użytkownik, który będzie chciał otworzyć raport, będzie mógł
w wygodny sposób wpisać własny klucz. Jak pamiętasz, szablon (plik .pbit) utworzyłeś już
w rozdziale 8. Tutaj ten proces jest opisany ponownie, ponieważ jest to przypadek specjalny: są dwa
parametry, OryginalnyTekst i JęzykDocelowy, które nie powinny być widoczne w podczas otwierania
szablonu, natomiast powinien pojawić się parametr KluczAPI.
1. Otwórz raport, który utworzyłeś w ćwiczeniu 12.2, lub gotowy plik R12-02 - rozwiązanie.pbix.
(W drugim przypadku zmień wartość parametru KluczAPI. W tym celu w karcie Strona
główna kliknij ikonę Edytuj zapytania, a następnie w panelu Zapytania zaznacz parametr
KluczAPI i w polu Wartość bieżąca wpisz swój klucz).
W karcie Strona główna kliknij ikonę Edytuj zapytania. W edytorze Power Query w panelu
Zapytania będą widoczne trzy parametry: KluczAPI, OryginalnyTekst i JęzykDocelowy.
Dwa ostatnie są wykorzystywane w niestandardowej funkcji, którą utworzyłeś wcześniej.
2. Aby parametry OryginalnyTekst i JęzykDocelowy nie były pokazywane podczas otwierana
szablonu, przekształć je w zapytania.
320
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
RYSUNEK 12.8. Raport Power BI (w postaci szablonu) i skoroszyt Excela (wykorzystujący nazwany zakres
komórek) możesz udostępniać innym użytkownikom bez ujawniania swojego klucza API
Wskazówka. Aby unieważnić klucz API, zaloguj się do portalu usługi Azure, przejdź do zasobów
tłumaczeniowych i w oknie Translacja — Klucze kliknij przyciski Wygeneruj ponownie klucz 1
i Wygeneruj ponownie klucz 2.
321
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
W tym podrozdziale dowiesz się, jak można przetwarzać dane tekstowe i oceniać ich nastroje.
Nauczysz się wykorzystywać edytor Power Query i interfejs Text Analytics API do automatycznego
analizowania nastrojów. Jak pokazuje rysunek 12.9, wynikiem analizy jest liczba z przedziału od 0
do 1, gdzie 0 oznacza negatywny, a 1 pozytywny nastrój tekstu.
Zobacz też. Pełny opis składni żądania wysyłanego do interfejsu Sentiment Analytics API jest
dostępny na stronie https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/
how-tos/text-analytics-how-to-sentiment-analysis.
322
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
Przygotowanie danych
Zanim prześlesz tekst do usługi Sentiment Analytics, zapoznaj się z kilkoma zaleceniami i wymaganiami.
1. Z każdym komunikatem musisz wysyłać jego unikatowy identyfikator i kod języka.
2. Zalecane jest wysyłanie komunikatów składających się z jednego lub dwóch zdań, a nie
dużych bloków tekstu. Długość komunikatu nie może przekraczać 5000 znaków.
Usługa działa dokładniej, jeżeli tekst składa się z niewielkich części.
3. W jednym żądaniu możesz wysłać maksymalnie 1000 komunikatów.
4. Do usługi możesz wysyłać maksymalnie 100 żądań w ciągu jednej minuty.
5. Całkowita wielkość wszystkich komunikatów w jednym żądaniu nie może przekroczyć 1 MB.
6. Komunikat musi być zapisany w formacie JSON. (Tym wymogiem nie musisz się przejmować.
Za pomocą edytora Power Query możesz łatwo nadać tabeli wymagany format).
Poniżej przedstawiona jest przykładowa treść w formacie JSON, którą można umieścić
w żądaniu do interfejsu API:
{
"documents": [
{
"language": "en",
"id": "1",
"text": "We love this trail and make the trip every year."
},
{
"language": "en",
"id": "2",
"text": "Poorly marked trails! I thought we were goners. Worst hike ever."
},
{
"language": "en",
"id": "3",
"text": "This is my favorite trail. It has beautiful views."
}
]
}
W odpowiedzi na żądanie uzyskasz następujące dane w formacie JSON:
{
"documents": [
{
"score": 0.87631344795227051,
"id": "1"
},
{
"score": 0.05087512731552124,
"id": "2"
},
{
"score": 0.97651207447052,
"id": "3"
}
],
"errors": []
}
Nie przejmuj się formatem. Jego obsługa w edytorze Power Query jest prosta i intuicyjna.
323
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
324
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
1. Utwórz pusty skoroszyt w Excelu lub raport w Power BI, zaimportuj do niego skoroszyt
C:\Dane\R11\R11-01.xlsx i otwórz edytor Power Query.
2. W oknie Nawigator kliknij Arkusz1, a następnie przycisk Przekształć dane.
3. Zmień nazwę zapytania na Wpisy.
Zwróć uwagę na kolumny Wpis i ID wpisu zawierające wymagane w żądaniu informacje.
Ponieważ tabela zawiera kilkaset wpisów, z których potrzebnych będzie jedynie dziesięć,
musisz zredukować ich liczbę.
4. W karcie Strona główna kliknij ikonę Zachowaj wiersze i wybierz polecenie Zachowywanie
pierwszych wierszy. W oknie o tej samej nazwie, które się pojawi, w polu Liczba wierszy
wpisz 10 i kliknij przycisk OK. Koniecznie wykonaj ten krok, ponieważ musisz ograniczyć
liczbę wierszy.
325
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
9. W karcie Strona główna kliknij ikonę Wybieranie kolumn. W oknie o tej samej nazwie,
które się pojawi, zaznacz pozycje text oraz id. Kliknij OK.
Pora utworzyć kolumnę z oznaczeniami języka. Nie jest obowiązkowa. Gdy będziesz
przetwarzał komunikaty w różnych językach, pomiń ten krok.
Dla uproszczenia ćwiczenia przyjmijmy założenie, że wszystkie komunikaty są w języku
angielskim. Dlatego użyjesz oznaczenia en. Pod koniec tego rozdziału dowiesz się, jakich
oznaczeń języków możesz używać i jak je dynamiczne stosować, jeżeli kolumna text zawiera
komunikaty napisane w różnych językach.
10. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. W oknie o tej samej nazwie,
które się pojawi, w polu Nazwa nowej kolumny wpisz language, a w polu Formuła kolumny
niestandardowej wpisz "en". Kliknij OK, aby zamknąć okno.
W panelu podglądu (patrz rysunek 12.10) pojawią się trzy kolumny o nazwach, których
trzeba użyć w treści żądania w formacie JSON.
RYSUNEK 12.10. Aby przeprowadzić analizę nastroju, należy utworzyć tabelę z kolumnami o nazwach id,
text i language, następnie przekształcić ją do formatu JSON i wysłać do usługi Azure Cognitive Services
326
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
{documents = …}
Jak pamiętasz z ćwiczenia 12.1, rekord w formacie JSON definiuje się za pomocą nawiasów
klamrowych i można do tego celu użyć funkcji Json.FromValue. Kliknij zatem ikonę fx obok
paska formuły. W panelu Zastosowane kroki pojawi się nowy krok o nazwie Niestandardowe1,
a w pasku formuły następujący kod:
= #"Dodano kolumnę niestandardową"
Wpisz w jego miejscu następujący kod:
= [documents = #"Dodano kolumnę niestandardową"]
12. Aby utworzyć rekord w formacie JSON, umieść powyższy kod w argumencie funkcji
Json.FromValue, tak jak niżej:
= Json.FromValue([documents = #"Dodano kolumnę niestandardową"])
W panelu podglądu pojawi się ikona reprezentująca treść w formacie JSON, którą właśnie
utworzyłeś. Teraz dowiesz się, jak ją przygotować do wysłania.
327
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
= Web.Contents(
"https://westeurope.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment", [
Headers = [
#"Ocp-Apim-Subscription-Key" = KluczAPI
],
Content = Niestandardowe1
]
)
Uwaga. Jeżeli swoje zasoby analityczne utworzyłeś w innej lokalizacji niż Europa Zachodnia,
zmień odpowiednio fragment westeurope. Nazwę lokalizacji znajdziesz w portalu Azure na
stronie zasobów analitycznych w sekcji Przegląd.
Uwaga. Ignorowanie poziomów prywatności jest niezbędne w tym ćwiczeniu. Istnieje wprawdzie
dość skomplikowany sposób utworzenia zapytania, dzięki któremu powyższy komunikat nie
będzie się pojawiał, jednak jego opis wykracza poza zakres tej książki. Ponadto związany z tym
nakład pracy może nie być proporcjonalny do uzyskanych efektów.
328
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
RYSUNEK 12.11. Konwersja treści w formacie JSON na tabelę jest bardzo prosta; wyniki analizy nastroju
zwrócone przez interfejs Sentiment Analytics API zostały zamienione na tabelę z kolumnami
identyfikatorów komunikatów i ich ocenami
329
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
26. W edytorze pojawi się następujące wyrażenie (tutaj nieznacznie zmodyfikowane w celu
dopasowania go do rozmiarów strony, ale zwracające ten sam wynik):
let
Źródło = Wpisy,
#"Zmieniono nazwy kolumn" =
Table.RenameColumns(Źródło,{{"Wpis", "text"}, {"ID wpisu", "id"}}),
#"Przefiltrowano wiersze" =
Table.SelectRows(#"Zmieniono nazwy kolumn", each [text] <> null and [text] <> ""),
#"Usunięto duplikaty" =
Table.Distinct(#"Przefiltrowano wiersze", {"id"}),
#"Usunięto inne kolumny" =
Table.SelectColumns(#"Zmieniono nazwy kolumn",{"id", "text"}),
#"Dodano kolumnę niestandardową" =
Table.AddColumn(#"Usunięto inne kolumny", "language", each "en"),
Niestandardowe1 = Json.FromValue([documents = #"Dodano kolumnę niestandardową"]),
Niestandardowe2 = Json.Document(
Web.Contents(
"https://westeurope.api.cognitive.microsoft.com/" &
"text/analytics/v2.0/sentiment", [
Headers=[#"Ocp-Apim-Subscription-Key"=KluczAPI],
Content=Niestandardowe1
]
)
),
documents = Niestandardowe2[documents],
#"Przekonwertowane na tabelę" = Table.FromList(
documents, Splitter.SplitByNothing(), null, null, ExtraValues.Error
),
#"Rozwinięty element Column1" = Table.ExpandRecordColumn(
#"Przekonwertowane na tabelę", "Column1", {"id", "score"}, {"id", "score"}
)
in
#"Rozwinięty element Column1"
27. Aby przekształcić powyższy kod w niestandardową funkcję, usuń dwa wiersze poniżej
instrukcji let, ponieważ dotyczą one konkretnego źródła danych i w nowej funkcji nie będą
potrzebne. Funkcja powinna przetwarzać dowolną tabelę zawierającą komunikaty tekstowe
i ich unikatowe identyfikatory. Dlatego trzeba usunąć odwołanie do zapytania Wpisy
i przekształcenie zmieniające nazwy kolumn. Nazwy kolumn będą zmieniane po użyciu
funkcji z innymi danymi.
28. Usuń również dwa następne wiersze. Funkcje Table.SelectRows i Table.Distinct zostały
użyte w celu usunięcia z danych pustych wartości i duplikatów, które mogłyby być
przyczyną błędów.
Po wprowadzeniu powyższych zmian pierwszy wiersz poniżej instrukcji let będzie zawierał
następujący kod:
#"Usunięto inne kolumny" =
Table.SelectColumns(#"Zmieniono nazwy kolumn",{"id", "text"}),
29. Zastąp fragment #"Zmieniono nazwy kolumn" zmienną Źródło, a przed instrukcją let wpisz
wiersz (Źródło) =>. Aby poprawić czytelność kodu, wprowadź poniższe kosmetyczne zmiany.
a. Oba wystąpienia fragmentu #"Rozwinięty element Column1" (powyżej i poniżej wiersza
in) zastąp identyfikatorem OcenaNastroju.
330
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
331
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Sprzężenie prawe spowoduje, że wynikowa tabela będzie zawierała wszystkie wpisy nawet
wtedy, kiedy usługa z powodu błędu nie zwróci ich ocen. (Więcej szczegółowych informacji
o potencjalnych błędach znajdziesz dalej w tym rozdziale).
34. Rozwiń kolumnę Wpisy. W panelu, który się pojawi, zaznacz wszystkie kolumny oprócz
ID wpisu, która już się znajduje w scalonym zapytaniu. Teraz załaduj tabelę Oceny nastroju
do raportu i usuń z niego tabelę Wpisy. Zapisz raport, ponieważ użyjesz go w następnym
ćwiczeniu.
Gotowe rozwiązanie jest zapisane w plikach R12-03 - rozwiązanie.xlsx oraz R12-03 - rozwiązanie.pbix.
Zapobieganie błędom
Aby zapobiec pojawianiu się błędów podczas wysyłania żądań do interfejsu Text Analytics API,
przed użyciem funkcji FnOkreślenieNastroju wykonuj następujące operacje.
1. Sprawdzaj, czy kolumna zawierająca unikatowe identyfikatory ma nazwę id.
2. Sprawdzaj, czy kolumna zawierająca komunikaty ma nazwę text.
332
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
3. Usuwaj puste wartości z kolumny text. Wysyłanie pustych komunikatów nie ma sensu.
Jeżeli wraz ze zwykłymi komunikatami będziesz wysyłał puste, wtedy usługa usunie je listy
wyników (którą rozwinąłeś w ćwiczeniu 12.6, w kroku 23.), a w polu errors umieści listę
błędów. Ponadto wysyłanie pustych komunikatów wyczerpuje limit żądań.
4. Usuwaj duplikaty z kolumny id w sposób opisany w ćwiczeniu 12.8, w kroku 8. Wysłanie
duplikatu do interfejsu API spowoduje, że całe żądanie zakończy się poniższym błędem
i żaden zawarty w nim komunikat nie zostanie przetworzony.
DataSource.Error: Funkcja Web.Contents nie może pobrać zawartości z „https://westeurope.
api.cognitive.microsoft.com/text/analytics/v2.0/sentiment” (400): Bad Request
5. Sprawdzaj, czy komunikaty składają się z maksymalnie 5000 znaków. Inaczej w liście w polu
errors (które możesz rozwinąć w ćwiczeniu12.3, w kroku 20.) pojawi się następujący błąd:
A document within the request was too large to be processed. Limit document size to:
5120 characters
(Dokument zawarty w żądaniu jest zbyt długi, aby można go było przetworzyć.
Zmniejsz wielkość dokumentu do 5000 znaków).
Aby skrócić każdy komunikat do 5000 znaków, wykonaj poniższe kroki.
a. Zaznacz kolumnę text.
b. W karcie Strona główna kliknij ikonę Podziel kolumny i wybierz polecenie
Według liczby znaków.
c. W oknie Dzielenie kolumny według liczby znaków, które się pojawi, w polu
Liczba znaków wpisz 5000.
d. Zaznacz opcję Jedno, jak najdalej z lewej strony.
6. W jednym żądaniu wysyłaj maksymalnie 1000 komunikatów. Jeżeli będzie ich więcej, całe
żądanie zakończy się błędem Bad Request. Liczbę komunikatów możesz łatwo ograniczyć za
pomocą przekształcenia Zachowywanie pierwszych wierszy. W kolejnym ćwiczeniu dowiesz
się, jak możesz dużą liczbę komunikatów podzielić na grupy po 1000 wierszy i każdą z nich
przetwarzać osobno.
Uwaga. Aby ograniczyć do minimum liczbę żądań wysyłanych do interfejsu API, zbiór 100
komunikatów podzielisz na dziesięć bloków, każdy zawierający dziesięć komunikatów. Jeżeli
będziesz chciał zastosować opisane rozwiązanie z własnymi danymi, podziel dane na bloki,
każdy o wielkości 1000 komunikatów.
333
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
7. Jeżeli nie zapisałeś wyników ćwiczenia 12.3, otwórz skoroszyt Excela R12-03 - rozwiązanie.xlsx
lub raport Power BI R12-03 - rozwiązanie.pbix i uruchom edytor Power Query.
8. W panelu Zapytania zaznacz parametr KluczAPI. W panelu podglądu wklej w polu
Wartość bieżąca swój klucz do interfejsu Text Analytics API.
9. Zaznacz zapytanie Wpisy, a następnie w panelu Zastosowane kroki kliknij ikonę ustawień
kroku Zachowano pierwsze wiersze. W oknie Zachowywanie pierwszych wierszy, które się
pojawi, wpisz w polu Liczba wierszy wartość 100 i kliknij OK.
10. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Wpisy i wybierz
polecenie Odwołanie. Zmień nazwę nowego zapytania na Ocenione wpisy.
11. Zmień nazwę kolumny ID wpisu na id, a kolumny Wpis na text.
12. Usuń puste wartości z kolumny text i duplikaty z kolumny id.
13. W karcie Dodaj kolumnę kliknij ikonę Kolumna indeksu.
14. Zaznacz kolumnę Indeks. W karcie Przekształć kliknij ikonę Standardowy i wybierz polecenie
Podziel bez reszty. W oknie o tej samej nazwie, które się pojawi, wpisz w polu Wartość liczbę
10 i kliknij OK. Pierwsze 10 komunikatów otrzyma indeks 0, następne 10 indeks 1 itd.
Uwaga. Gdy w przyszłości będziesz przetwarzał większe ilości danych, wpisz w kroku 8.
wartość 1000. Tutaj wartość 10 została użyta jedynie w celach demonstracyjnych.
15. W karcie Przekształć kliknij ikonę Grupowane według. Pojawi się okno o tej samej nazwie.
Wprowadź w nim zmiany opisane niżej i pokazane na rysunku 12.13.
a. W polu Nazwa nowej kolumny wpisz Podzbiór.
b. W rozwijanej liście Operacja wybierz pozycję Wszystkie wiersze.
c. Kliknij OK, aby zamknąć okno.
RYSUNEK 12.13. Za pomocą przekształcenia „Grupowane według” możesz przetwarzać tekst w blokach
po 1000 komunikatów
334
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
16. W panelu podglądu pojawi się tabela z kolumnami Indeks i Podzbiór. Każdy z dziesięciu
wierszy zawiera obiekt Table z podzbiorem komunikatów.
17. W karcie Dodaj kolumnę kliknij ikonę Wywołaj funkcję niestandardową.
18. W oknie o tej samej nazwie, które się pojawi, wybierz w rozwijanej liście Zapytanie funkcji
pozycję FnOkreślenieNastroju.
19. W rozwijanej liście Źródło (opcjonalnie) wybierz pozycję Podzbiór i kliknij OK.
20. Jeżeli będzie trzeba, skonfiguruj poświadczenia i ustaw poziomy prywatności danych,
tak jak w ćwiczeniu 12.3, w krokach od 17. do 19.
21. Usuń kolumny Indeks i Podzbiór.
22. Rozwiń kolumnę FnOkreślenieNastroju. W panelu, który się pojawi, zaznacz pozycje id
i score oraz usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako prefiksu. Kliknij OK.
23. Zmień nazwy kolumn i scal wyniki z zapytaniem Wpisy w sposób opisany w ćwiczeniu 12.3,
w krokach od 32. do 34.
Wskazówka. Jeżeli używasz programu Power BI Desktop, nie musisz scalać zapytania Ocenione
wpisy. Po załadowaniu go do raportu zostanie automatycznie utworzona relacja typu „jeden do
jednego” z zapytaniem Wpisy; z jej pomocą będziesz mógł skojarzyć komunikaty z ich ocenami.
Zobacz też. Aby dowiedzieć się więcej o interfejsie Key Phrase API, odwiedź stronę
https://docs.microsoft.com/pl-pl/azure/cognitive-services/text-analytics/how-tos/
text-analytics-how-to-keyword-extraction.
335
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
https://[lokalizacja].api.cognitive.microsoft.com/text/analytics/v2.0/sentiment
i zastąp go fragmentem KeyPhrases, tak jak niżej:
https://[lokalizacja].api.cognitive.microsoft.com/text/analytics/v2.0/KeyPhrases
5. W poniższym wierszu zastąp oba wystąpienia nazwy score:
336
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
documents = OdpowiedźJSON[documents],
#"Przekonwertowane na tabelę" = Table.FromList(
documents, Splitter.SplitByNothing(), null, null, ExtraValues.Error
),
KluczoweFrazy = Table.ExpandRecordColumn(
#"Przekonwertowane na tabelę", "Column1", {"id", "keyPhrases"},
{"id", "keyPhrases"}
)
in
KluczoweFrazy
7. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Ocenione wpisy i wybierz
polecenie Duplikuj.
8. Zmień nazwę nowego zapytania na Kluczowe frazy. Następnie zaznacz je i w panelu
Zastosowane kroki usuń wszystkie kroki poniżej Pogrupowano wiersze. Teraz możesz
zastosować nową niestandardową funkcję do przekształcenia zgrupowanych wierszy.
9. W karcie Dodaj kolumnę kliknij ikonę Wywołaj funkcję niestandardową.
10. W oknie o tej samej nazwie, które się pojawi, w rozwijanej liście Zapytanie funkcji wybierz
pozycję FnWyodrębnienieKluczowychFraz.
11. W rozwijanej liście Źródło (opcjonalnie) wybierz pozycję Podzbiór i kliknij OK.
12. Usuń kolumny Indeks i Podzbiór.
13. Rozwiń kolumnę FnWyodrębnienieKluczowychFraz. W panelu, który się pojawi, zaznacz
pozycje id oraz keyPhrases i usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny
jako prefiksu. Kliknij OK.
14. Jeśli będzie trzeba, wybierz właściwe poświadczenia i poziomy prywatności danych
(tak jak to zrobiłeś w ćwiczeniu 12.3, w krokach od 17. do 19.).
15. W panelu podglądu pojawią się kolumny id oraz keyPhrases zawierające obiekty typu List.
Każdy element listy zawiera kluczową frazę i jej identyfikator.
16. Rozwiń kolumnę keyPhrases i wybierz polecenie Rozwiń do nowych wierszy.
17. Zmień nazwę kolumny id na ID wpisu, a kolumny keyPhrases na Kluczowa fraza.
18. Jeżeli używasz programu Power BI Desktop, załaduj zapytanie Kluczowe frazy do elementu
wizualnego Word Cloud, tak jak na rysunku 12.14. (Sposób, jak to zrobić, jest opisany
w rozdziale 11., w ćwiczeniu 11.7).
Wskazówka. Aby umieścić w chmurze słownej wieloczłonowe frazy, rozwiń sekcję ustawień
Ogólne i wyłącz opcję Rozbijanie na wyrazy. Oprócz tego utwórz relację pomiędzy tabelami
Kluczowe frazy a Ocenione wpisy wykorzystującą kolumny ID wpisu w obu tabelach. W tym
celu w karcie Strona główna kliknij ikonę Zarządzaj relacjami i w oknie Tworzenie relacji
wybierz w rozwijanej liście Kierunek filtrowania krzyżowego pozycję Oba.
337
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 12.14. Chmura słowna w programie Power BI Desktop ilustruje liczby wystąpień kluczowych fraz
338
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 12. ZAAWANSOWANA ANALIZA TEKSTU: ROZPOZNAWANIE ZNACZENIA
4. Jeżeli dane zawierają komunikaty napisane w różnych językach, wtedy kolumna niestandardowa
zawierająca oznaczenie jednego języka spowoduje, że uzyskane oceny nastroju tekstu i kluczowe
frazy będą błędne. Aby rozwiązać ten problem, usuń z kodu wiersz rozpoczynający się od
#"Dodano kolumnę niestandardową" w następujący sposób.
a. Odszukaj wiersze:
339
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Ponieważ trzy opisane interfejsy Text Analytics API są do siebie podobne, w tym ćwiczeniu nie
będziemy zajmować się szczegółami wykrywania języka. Zamiast tego zapoznaj się z plikami R12-06
- rozwiązanie.xlsx oraz R12-06 - rozwiązanie.pbix, w których powyższa funkcja została użyta do
przetwarzania komunikatu „Cześć ludzie” zapisanego w różnych językach.
Gratulacje! Teraz możesz wykorzystać opisane w tym rozdziale techniki we własnych
zaawansowanych analizach tekstu obejmujących określanie nastroju i wyszukiwanie kluczowych
fraz w tekstach napisanych w różnych językach. Poniżej przedstawiony jest przykład takiej analizy.
1. Za pomocą interfejsu Language Detection API przetłumacz wszystkie komunikaty
(w blokach po 1000 wierszy).
2. Utwórz listę obsługiwanych języków.
3. Wykorzystując techniki opisane w rozdziale 11., utwórz dwa zapytania wybierające
komunikaty:
a. napisane w obsługiwanych językach,
b. napisane w nieobsługiwanych językach.
4. Komunikaty wybrane przez drugie zapytanie przetłumacz na język angielski
(lub inny obsługiwany język) i dołącz do wyników pierwszego zapytania.
5. Określ nastroje połączonych komunikatów i wyodrębnij z nich kluczowe frazy.
Podsumowanie
W tym rozdziale dowiedziałeś się, jak za pomocą Excela lub Power BI oraz usługi Azure Cognitive
Services tłumaczyć teksty, określać ich nastroje, wyodrębniać z nich kluczowe frazy i wykrywać
języki. Dzięki tym technikom, wykorzystującym potęgę sztucznej inteligencji, możesz pozyskiwać
nowe informacje z tekstowych źródeł danych.
Zanim zastosujesz opisane metody w praktyce, przejrzyj punkt „Uwagi dotyczące korzystania
z usługi Azure Cognitive Services za pomocą edytora Power Query” i zastosuj zawarte w nim porady,
aby ograniczyć liczbę żądań wysyłanych do interfejsu API. Nie udostępniaj klucza API innym osobom.
Pamiętaj, że nie jest możliwe planowanie odświeżania za pomocą usługi Power BI raportów
utworzonych w opisany tutaj sposób (chyba że w czasie, gdy czytasz tę książkę, firma Microsoft
zaoferowała taką możliwość). Raporty można odświeżać tylko w Excelu i Power BI Desktop.
Techniki określania nastroju tekstu i wyodrębniania kluczowych fraz ujawniają swoją potęgę
jeszcze bardziej, gdy stosuje się je razem z liczbowymi analizami i koreluje uzyskiwane wyniki.
W ten sposób można pozyskiwać nowe informacje o zachowaniach klientów, ich opiniach i wpływie
wywieranym na wyniki firmy.
W rozdziale 13., „Analiza sieci społecznościowych”, spełniona jest obietnica z rozdziału 11.,
„Podstawy analizy tekstu” — opisane są w nim techniki analizowania społecznościowych
zachowań ludzkich za pomocą Excela i Power BI w oparciu o dane uzyskiwane z Facebooka.
340
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13.
Facebook jest pozycjonowany tak, aby ludzie mogli w nim znaleźć odpowiedzi na
pytania typu: „Jakie restauracje sushi odwiedzili ostatnio moi znajomi i które im się
spodobały?”. Takie pytania prawdopodobnie można zadawać tylko na Facebooku
i nigdzie indziej…
— Marc Zuckerberg
Przy użyciu polecenia Pobierz dane w Excelu i Power BI Desktop możesz łączyć się z wieloma różnymi,
bogatymi źródłami danych — plikami, firmowymi repozytoriami i serwisami internetowymi.
Wykorzystując swoje świeżo nabyte umiejętności posługiwania się edytorem Power Query, możesz
z każdego źródła pozyskiwać najróżniejsze rodzaje informacji. Ograniczeniem jest jedynie Twoja
wyobraźnia.
Ponieważ zbliżamy się do końca książki, nadszedł czas, abyś dowiedział się, jak wykorzystać
swoje umiejętności do pozyskiwania informacji z bogatych, publicznie dostępnych źródeł danych.
Rzeczywiste i urozmaicone zbiory danych otwierają nowe możliwości dla innych doświadczeń.
Przetwarzając nieznane wcześniej dane, inne niż firmowe, do których jesteś przyzwyczajony,
odkryjesz nieznane dotąd techniki, które poszerzą Twoją wiedzę.
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Rozdział skupia się na analizie jednej z sieci społecznościowych — na Facebooku. Edytor Power
Query jest wyposażony w konektor, za pomocą którego możesz analizować swój profil lub dowolną
publiczną stronę w tym serwisie1. Serwis jest dostępny dla każdego, możesz zatem ćwiczyć
przetwarzanie danych bez określonej struktury, różnego typu tabel i nieoczyszczonych danych
pochodzących z heterogenicznych źródeł.
Jeżeli zajmujesz się analizą mediów społecznościowych, w tym rozdziale nie tylko poznasz nowe
techniki, ale również nauczysz się badać aktywność użytkowników serwisów społecznościowych
i identyfikować trendy w ich zachowaniu. Jeśli nie jesteś analitykiem, nie przejmuj się. W tym
rozdziale poznasz kilka doskonałych metod, dzięki którym będziesz mógł zbierać informacje
o swojej firmie i konkurencji, jak również tworzyć efektowne prezentacje dla współpracowników.
Uwaga. Jeżeli nie masz konta w serwisie Facebook, nie będziesz mógł wykonać tego ćwiczenia,
dlatego załóż je teraz.
1
Abyś mógł w opisanych ćwiczeniach analizować wybraną publiczną stronę (tutaj Microsoft Press),
musisz uzyskać zezwolenie z Facebooka. Szczegółowe informacje znajdziesz na stronie
https://developers.facebook.com/docs/apps/review — przyp. red.
342
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
1. Połącz się z Facebookiem za pomocą Excela lub Power BI Desktop (patrz rysunek 13.1).
RYSUNEK 13.1. Aby połączyć się z Facebookiem, kliknij ikonę Pobierz dane w karcie Dane w Excelu lub
w karcie Strona główna w Power BI Desktop
W Excelu: utwórz pusty skoroszyt, a następnie w karcie Dane kliknij ikonę Pobierz dane
i wybierz polecenia Z usług online/Z serwisu Facebook.
W Power BI Desktop: utwórz pusty raport, a następnie w karcie Strona główna kliknij ikonę
Pobierz dane. W oknie o tej samej nazwie, które się pojawi, kliknij polecenie Usługi online,
wybierz pozycję Witryna Facebook i kliknij przycisk Połącz.
2. Jeżeli pierwszy raz łączysz się z Facebookiem, pojawi się komunikat informujący o potencjalnych
zmianach wprowadzonych w interfejsie API. Zaznacz opcję Nie ostrzegaj ponownie w przypadku
tego łącznika i kliknij przycisk OK.
3. Pojawi się okno Facebook, w którym musisz wybrać identyfikator obiektu do zaimportowania.
Domyślnie w polu „Me” nazwa użytkownika lub identyfikator obiektu umieszczony jest
identyfikator me (ja) reprezentujący Twój profil. W tym polu możesz wpisać inny
identyfikator, np. microsoftpress reprezentujący stronę wydawnictwa Microsoft Press.
Pozostaw domyślne ustawienia i kliknij OK.
Wskazówka. W oknie Facebook znajduje się rozwijana lista Połączenie, w której możesz wybrać
węzły grafu do zaimportowania, np. Znajomi, Komentarze lub Oznaczenia „lubię to”. Ponieważ
interfejs API Facebooka nieustannie się zmienia, nie wszystkie węzły są przydatne. Przykładowo
warto wybierać kombinację identyfikatora me i połączenia Oznaczenia „lubię to”, tak jak w tym
ćwiczeniu, natomiast wybranie innego identyfikatora z tym samym połączeniem spowoduje,
że dane będą puste.
343
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
4. Pojawi się okno Dostęp do serwisu Facebook. Jeżeli pierwszy raz łączysz się z Facebookiem,
wykonaj poniższe kroki.
a. Kliknij przycisk Zaloguj się. W nowym oknie wpisz swój login i hasło.
b. W oknie, które się pojawi, przejrzyj rodzaje uprawnień dostępu, jakie może uzyskać
aplikacja Microsoft Power BI, m.in. do Twojego profilu publicznego, listy znajomych,
komentarzy, aktualizacji stanu, osobistego opisu, polubień i adresu e-mail. Zmień
uprawnienia według potrzeb i kliknij przycisk Kontynuuj.
Uwaga. Twoje poświadczenia do Facebooka nie są zapisywane w raporcie Power BI. Jeżeli
udostępnisz raport innej osobie, która odświeży go na swoim komputerze, pojawi się okno
logowania do Facebooka. Jeżeli za pomocą usługi opublikujesz raport, który będzie
automatycznie odświeżany, będziesz musiał w ustawieniach usługi wpisać swoje poświadczenia
do Facebooka.
c. Jeżeli masz na Facebooku swoją stronę lub aplikację i pojawi się kolejne okno z prośbą
o udzielenie uprawnień, kliknij przycisk OK.
5. W oknie Dostęp do serwisu Facebook kliknij przycisk Połącz.
6. W panelu podglądu pojawi się rekord zawierający pola name, connections i id (patrz rysunek 13.2).
RYSUNEK 13.2. Dane odczytane za pomocą interfejsu Facebook Graph API są prezentowane w edytorze
Power Query w postaci rekordu; po grafie można poruszać się po kliknięciu odnośnika Record
Odczytany rekord sam w sobie nie zawiera wprawdzie cennych informacji, jednak w tym
miejscu musisz poznać kilka jego ważnych elementów. Zwróć uwagę na następujący kod,
który pojawi się w pasku formuły:
= Facebook.Graph("https://graph.facebook.com/v2.10/me")
Funkcja Facebook.Graph ma jeden argument, jest to adres URL. Zanim zaczniesz manipulować
tym adresem, musisz poznać kilka podstawowych zasad korzystania z interfejsu Graph API.
(Ma on wiele ciekawych cech, których opis wykracza poza zakres tego rozdziału).
Pierwszą ważną częścią adresu jest wersja interfejsu (tutaj 2.10). Zazwyczaj każda kolejna
wersja umożliwia odczytywanie nowych treści. Aby uzyskać do nich dostęp, odpowiednio
zmień numer wersji interfejsu. Pamiętaj, że z danej wersji można korzystać przez określony
czas. Informacje o datach wygaśnięcia poszczególnych wersji znajdują się na stronie Graph
API Changelog, https://developers.facebook.com/docs/graph-api/changelog.
344
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
Kolejną ważną częścią adresu URL jest punkt końcowy, w tym przypadku me, oznaczający
użytkownika, którego dane będą odczytywane. Za pomocą tego punktu wysyła się do interfejsu
bardziej skomplikowane żądania z parametrami filtrującymi dane i wyodrębniającymi
określone informacje. W ćwiczeniu 13.2 poznasz kilka przykładowych, najczęściej
stosowanych punktów.
7. Kliknij w polu connections obiekt Record. Pojawią się następujące klucze, których
wartościami są obiekty Table: books (książki), feeds (strumienie), friends (znajomi), games
(gry), likes (polubienia), movies (filmy), music (muzyka), permissions (uprawnienia), posts
(komentarze) i television (telewizja). Są to tzw. węzły. Kliknięcie obiektu Table w danym
węźle powoduje jego wyszczególnienie i załadowanie zawartych w nim danych.
Za pomocą interfejsu Facebook Graph API można uzyskać dostęp do wielu innych
węzłów, nie tylko do wyżej wymienionych. Ich pełna lista znajduje się na stronie
https://developers.facebook.com/docs/graph-api/reference/v3.1/user. Jak pamiętasz, w kroku
4b udzieliłeś aplikacji Power BI określonych uprawnień dostępu do swojego profilu.
Aplikacja domyślnie nie żąda wszystkich uprawnień i dlatego nie odczytuje wszystkich
węzłów dostępnych na Facebooku. Kolejne kroki demonstrują te ograniczenia.
8. W panelu Zastosowane kroki usuń ostatni krok, a następnie w pasku formuły dopisz
na końcu adresu URL ciąg /family, tak jak niżej:
= Facebook.Graph("https://graph.facebook.com/v2.10/me/family")
Gdy naciśniesz klawisz Enter, panel podglądu opustoszeje. Aplikacja Power BI nie otrzymała
uprawnienia user_relationship i nie mogła uzyskać dostępu do węzła family.
9. Przywróć formułę do pierwotnej postaci:
= Facebook.Graph("https://graph.facebook.com/v2.10/me")
Ponownie kliknij w polu connections obiekt Record.
10. Kliknij w polu likes obiekt Table, W panelu podglądu pojawią się strony, które polubiłeś
(patrz rysunek 13.3). Widoczne będą też kolumny id (identyfikator strony na Facebooku)
oraz created_time (data i czas polubienia). Na podstawie tej ostatniej kolumny utwórz dwie
nowe, zawierające bardzo przydatne informacje, takie jak daty i godziny polubienia stron.
11. Aby utworzyć kolumnę Data na podstawie kolumny created_time, zmień najpierw typ
danych tej kolumny na Data/godzina/strefa czasowa. Zaznacz kolumnę, a następnie w karcie
Dodaj kolumnę rozwiń ikonę Data i kliknij polecenie Tylko data.
12. Po utworzeniu kolumny Data zmień typ danych w kolumnie created_time na Godzina.
W ten sposób wyodrębnisz z niej oznaczenia czasu. Następnie w kolumnie Dodaj kolumnę
kliknij polecenia Godzina, Godzina i Godzina. Pojawi się nowa kolumna o nazwie Godzina,
na podstawie której możesz np. utworzyć wykres pokazujący, w jakich godzinach najczęściej
klikałeś przycisk Lubię to! (Taką analizę przeprowadzisz na końcu tego ćwiczenia i zapiszesz
w szablonie Power BI).
345
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 13.3. Po kliknięciu obiektu Table w polu likes wyświetlisz w edytorze Power Query listę stron,
które polubiłeś
13. Usuń kolumnę object_link, a następnie pierwszym trzem kolumnom nadaj odpowiednio
nazwy Strona, ID i Czas.
14. Jeżeli używasz programu Power BI Desktop, wykonaj operacje opisane w powyższej
wskazówce, aby utworzyć kolumnę Adres URL strony, a następnie poniższe kroki,
aby utworzyć kolumnę zawierającą adresy URL obrazów stron.
a. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. Pojawi się okno o tej
samej nazwie.
b. W polu Nazwa nowej kolumny wpisz Obraz.
c. W polu Formuła kolumny niestandardowej wpisz poniższy kod:
= "https://graph.facebook.com/" & [ID] & "/picture?type=large"
d. Kliknij OK, aby zamknąć okno.
Wskazówka. W programie Power BI Desktop możesz wskazać, że adresy URL w danej kolumnie
wskazują strony lub ich obrazy. Następnie w raporcie możesz użyć fragmentatora, tabeli lub
macierzy do wyświetlenia obrazów lub odnośników.
15. Zmień nazwę zapytania na Ulubione strony i załaduj je do skoroszytu Excela lub raportu
Power BI. Za pomocą wykresu przestawnego w Excelu lub wykresu w Power BI możesz
pokazać, ile stron polubiłeś na przestrzeni czasu. Taki raport będzie zawierał podobną treść
jak strona https://www.facebook.com/me/likes.
Gotowe rozwiązanie jest zapisane w plikach R13-01 - rozwiązanie.xlsx oraz R13-01 - rozwiązanie.pbix.
346
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
RYSUNEK 13.4. Graf społecznościowy użytkowników Excela i Power BI, którzy używają konektora
do Facebooka
347
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Jak się wkrótce przekonasz, przedstawisz tylko tych swoich znajomych, którzy zaimportowali
dane z Facebooka za pomocą narzędzia Power Query (w Excelu lub Power BI Desktop).
1. Utwórz w Excelu nowy skoroszyt lub w Power BI Desktop nowy raport.
W Excelu: kliknij kartę Dane, a następnie polecenia Z usług online/Z serwisu Facebook.
W Power BI Desktop: w karcie Strona główna rozwiń menu Pobierz dane. W oknie o tej
samej nazwie, które się pojawi, wybierz sekcję Usługi online (ewentualnie w polu
wyszukiwania wpisz Facebook), zaznacz pozycję Witryna Facebook i kliknij przycisk Połącz.
2. W oknie Facebook, które się pojawi, wpisz w pierwszym polu me, a w rozwijanej liście
Połączenie wybierz pozycję Znajomi i kliknij OK. W oknie podglądu, które się pojawi,
kliknij przycisk Załaduj. W panelu podglądu pojawi się lista Twoich znajomych.
Uwaga. Jeżeli w panelu podglądu pojawi się pusta tabela, nie będziesz mógł kontynuować
ćwiczenia. Musisz wcześniej pozyskać znajomych, którzy używali konektora do Facebooka
w Excelu i Power BI. W kolejnych krokach przyjęte jest założenie, że tacy znajomi pojawili
się w panelu podglądu.
348
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
6. Aby wyróżnić wspólnych znajomych, kliknij w karcie Dodaj kolumnę ikonę Kolumna
niestandardowa. W oknie o tej samej nazwie, które się pojawi, wprowadź następujące zmiany.
a. W polu Nazwa nowej kolumny wpisz Wspólni znajomi.
b. W polu Formuła niestandardowej kolumny wpisz poniższy kod i kliknij OK:
349
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 13.5. Raport o swoich znajomych możesz wzbogacić o informacje o stronach, które polubili
9. Aby dowiedzieć się, jakie strony polubili Twoi znajomi, rozwiń kolumnę object_link.
W panelu, który się pojawi, usuń zaznaczenie wszystkich pozycji oprócz connections.
Usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako prefiksu i kliknij OK.
10. Rozwiń kolumnę. W panelu, który się pojawi, usuń zaznaczenie wszystkich pozycji oprócz
likes. Usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako prefiksu i kliknij OK.
11. Zmień nazwę zapytania na Baza. Kliknij prawym przyciskiem myszy zapytanie
i z podręcznego menu wybierz polecenie Odwołanie.
12. Zmień nazwę zapytania na Znajomi. Zaznacz je i usuń z niego kolumnę likes.
13. W panelu Zapytania kliknij prawym przyciskiem myszy Baza i z podręcznego menu wybierz
polecenie Odwołanie. Zmień nazwę zapytania na Strony. Zaznacz je i usuń z niego kolumny
name i id.
14. W zapytaniu Strony rozwiń kolumnę likes. W panelu, który się pojawi, usuń zaznaczenie
wszystkich pozycji oprócz name i id. Usuń zaznaczenie opcji Użyj oryginalnej nazwy
kolumny jako prefiksu i kliknij OK.
15. Aby strony nie powtarzały się, zaznacz kolumnę id, a następnie w karcie Strona główna
kliknij ikonę Usuń wiersze i wybierz polecenie Usuń duplikaty.
Ponieważ niektórzy znajomi mogli nie polubić żadnych stron, usuń puste wiersze.
16. W nagłówku kolumny id kliknij ikonę filtru i wybierz polecenie Usuń puste.
Teraz pora utworzyć nową tabelę wiążącą znajomych z polubionymi przez nich stronami.
350
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
17. W panelu Zapytania kliknij prawym przyciskiem myszy zapytanie Baza i z podręcznego
menu wybierz polecenie Odwołanie. Zmień nazwę nowego zapytania na Znajomi i strony.
Następnie zaznacz je, usuń kolumnę name, a nazwę kolumny id zmień na friend id.
18. Rozwiń kolumnę likes. W panelu, który się pojawi, usuń zaznaczenie wszystkich pozycji
oprócz id. Usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako prefiksu i kliknij OK.
19. Zmień nazwę kolumny id na page id.
W tym momencie możesz wzbogacić zapytania Strony i Znajomi o adresy URL profili
i obrazów w sposób opisany w ćwiczeniu 13.1. Poniżej przedstawiona jest formuła
zwracająca adres profilu:
"https://www.facebook.com/" & [id]
Natomiast formuła zwracająca adres obrazu wygląda następująco:
"https://graph.facebook.com/" & [id] & "/picture?type=large"
20. Załaduj zapytania do skoroszytu Excela lub raportu Power BI, a następnie wykonaj
poniższe kroki.
a. Wyłącz ładowanie zapytania Baza (w sposób opisany w rozdziale 3., w ćwiczeniu 3.1).
b. W diagramie relacji utwórz relacje pomiędzy kolumną id w tabeli Znajomi a kolumną
friend id w tabeli Znajomi i strony. Następnie utwórz drugą relację pomiędzy kolumną
id w tabeli Strony a kolumną page id w tabeli Znajomi i strony.
Gotowe rozwiązanie jest zapisane w plikach R13-03 - rozwiązanie.xlsx oraz R13-03 - rozwiązanie.pbix.
351
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
RYSUNEK 13.6. Stosując techniki analizy tekstu, możesz za pomocą Power Query analizować nastroje wpisów
i komentarzy na Facebooku
Uwaga. Ćwiczenie to możesz wykonać na dowolnej stronie Facebooka. W tym celu w kroku 2.,
w pierwszym polu okna wpisz zamiast microsoftpress nazwę żądanej strony. Aby uzyskać tę nazwę,
otwórz w przeglądarce żądaną stronę i skopiuj do schowka fragment adresu URL zawierający
nazwę głównego folderu. Przykładowo strona poświęcona narzędziu Power BI ma adres https://www.
facebook.com/microsoftbi. Aby ją przeanalizować, wpisz w kroku 2. nazwę microsoftbi. Nazwę tę
możesz również zmienić później, modyfikując argument funkcji Facebook.Graph w formule
kroku Źródło, np. Facebook.Graph("https://graph.facebook.com/v2.10/microsoftbi/posts").
352
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
W panelu podglądu pojawi się tabela z następującymi kolumnami: message, created_time, id,
object_link i story.
3. Wyodrębnij z kolumny created_time datę i godzinę. W tym celu wykonaj kroki 11. i 12.
z ćwiczenia 13.1.
4. Nadaj kolumnom czytelne nazwy. W tym celu zmień kolumny message, created_time, id
i story odpowiednio na Komunikat, Czas, ID i Relacja.
W krokach od 6. do 14. opisana jest prosta metoda odczytywania komentarzy z Facebooka.
Jak się przekonasz, jest wprawdzie łatwa w implementacji, ale dość wolna i skutkuje
wysłaniem do interfejsu API wielu żądań, szczególnie w przypadku popularnych stron,
takich jak Microsoft Press. W ćwiczeniu 13.5 dowiesz się, jak usprawnić zapytanie. Na razie
jednak pozostańmy przy prostszym, choć wolniejszym sposobie. Pamiętaj jednak, że po
wysłaniu dużej liczby żądań przez Power Query do interfejsu API Facebooka możesz
otrzymać następujący komunikat:
Facebook: (#17) User request limit reached
(Przekroczono limit żądań).
W takim przypadku przerwij pracę nad raportem na kilka godzin. W serwisie Facebook
zaimplementowany jest mechanizm ograniczający liczbę żądań wysyłanych przez
użytkowników do interfejsu API. Na szczęście, wykonując operacje opisane w kroku 5.,
możesz uniknąć tego błędu.
5. W zakresie Strona główna kliknij ikonę Zachowaj wiersze i wybierz polecenie Zachowywanie
pierwszych wierszy. W oknie o tej samej nazwie, które się pojawi, w polu Liczba wierszy wpisz
100 i kliknij OK. Dzięki temu będziesz mógł kontynuować ćwiczenie, jak również skrócisz
czas przetwarzania zapytania i unikniesz komunikatu o przekroczeniu limitu żądań.
Pamiętaj, aby po zakończeniu etapu przygotowywania danych usunąć powyższy krok.
6. Rozwiń kolumnę object_link. W panelu, który się pojawi, usuń zaznaczenie wszystkich
kolumn oprócz connections. Usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako
prefiksu i kliknij OK.
7. Kolumna object_link zostanie zastąpiona kolumną connections. Rozwiń ją, a następnie
w panelu, który się pojawi, zaznacz pozycję field. Usuń zaznaczenie opcji Użyj oryginalnej
nazwy kolumny jako prefiksu i kliknij OK.
W miejscu oryginalnej kolumny connections pojawi się kolumna z komentarzami, zawierająca
w każdym wierszu obiekt Table. W każdym z nich znajdują się komentarze do danego wpisu.
Uwaga. Po wykonaniu kroku 7. w panelu widoczna będzie również pozycja likes (polubienia).
Kolumna ta będzie zawierać jednak puste obiekty Table, dlatego że za pomocą konektora do
Facebooka nie można odczytywać liczby polubień danego wpisu. Aby można było to robić, musiałbyś
napisać własny konektor lub skomplikowaną formułę M, co wykracza poza zakres tej książki.
353
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Dobrą praktyką jest usuwanie duplikatów z kolumny ID. Jeżeli tego nie zrobisz, zapytanie
zakończy się błędem. Gdy dalej w tym ćwiczeniu będziesz tworzył relację pomiędzy tabelami
Wpisy i Komentarze, przyjmiesz założenie, że kolumna ID w tabeli Wpisy zawiera unikatowe
wartości.
8. Zaznacz kolumnę ID, a następnie w karcie Strona główna kliknij ikonę Usuń wiersze
i wybierz polecenie Usuń duplikaty.
9. Zmień nazwę zapytania na Wpisy — baza.
10. Kliknij zapytanie prawym przyciskiem myszy i z podręcznego menu wybierz polecenie
Odwołanie. Zmień nazwę nowego zapytania na Wpisy.
11. Zaznacz zapytanie Wpisy i usuń z niego kolumnę comments.
12. Kliknij prawym przyciskiem myszy zapytanie Wpisy — baza i z podręcznego menu wybierz
polecenie Odwołanie. Zmień nazwę nowego zapytania na Komentarze.
13. Zaznacz zapytanie Komentarze, a następnie w karcie Strona główna kliknij ikonę Wybieranie
kolumn. W oknie o tej samej nazwie, które się pojawi, zaznacz kolumny ID oraz comments
i kliknij OK.
14. Rozwiń kolumnę comments i w panelu, który się pojawi, usuń zaznaczenie wszystkich
kolumn oprócz id. Usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako prefiksu
(patrz rysunek 13.7) i kliknij OK.
RYSUNEK 13.7. Aby odczytać komentarze do wpisów, rozwiń kolumnę comments i zaznacz pola message oraz id
354
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
16. Aby usunąć wiersze wpisów bez komentarzy, w nagłówku kolumny Komentarz kliknij ikonę
filtru i wybierz polecenie Usuń puste.
Teraz dodaj do tabel Wpisy i Komentarze kolumny z adresami URL.
17. Zaznacz zapytanie Wpisy i wykonaj poniższe kroki.
W kolumnie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. Pojawi się okno o tej
samej nazwie.
W polu Nazwa nowej kolumny wpisz Profil.
W polu Formuła kolumny niestandardowej wpisz następujący kod:
"https://www.facebook.com/" & [ID]
Kliknij OK, aby zamknąć okno.
18. Zaznacz zapytanie Komentarze i wykonaj kroki od 17a do 17d, ale tym razem w kodzie pasku
formuły zamiast ID użyj ID komentarza, tak jak niżej:
"https://www.facebook.com/" & [Comment ID]
19. Zanim załadujesz zapytania do raportu, zaznacz zapytanie Wpisy — baza, a następnie usuń
z panelu Zastosowane kroki krok Zachowano pierwsze wiersze. Jak pamiętasz, w kroku 5.
ograniczyłeś liczbę wierszy do 100, aby podczas przygotowywania zapytania skrócić jego czas
przetwarzania w panelu podglądu i uniknąć komunikatu o błędzie.
20. Załaduj zapytania do skoroszytu Excela lub raportu Power BI. W tym celu wykonaj
poniższe kroki.
a. Wyłącz ładowanie zapytania Wpisy — baza (w sposób opisany w rozdziale 3.,
w ćwiczeniu 3.1).
b. W diagramie relacji utwórz relacje pomiędzy kolumną ID w tabeli Wpisy a kolumną ID
w tabeli Komentarze.
21. Zapisz raport, ponieważ będzie Ci potrzebny dalej w tym rozdziale, kiedy dowiesz się,
jak ładować dane za ustalony okres i skrócić czas przetwarzania zapytania.
Gotowe rozwiązanie jest zapisane w plikach R13-04 - rozwiązanie.xlsx oraz R13-04 - rozwiązanie.pbix.
= Facebook.Graph("https://graph.facebook.com/v2.10/microsoftpress/posts")
355
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
5. Aby odczytać wyłącznie wpisy z 2019 r. i nowsze, dopisz do adresu URL znak zapytania
i parametr since=2019-01-01, tak jak niżej (całą formułę wpisz w jednym wierszu):
= Facebook.Graph("https://graph.facebook.com/v2.10/microsoftpress/posts?since=2019-01-01")
Aby odczytać wyłącznie wpisy z 2019 r., dopisz dodatkowo do adresu URL parametr
until=2019-12-31, tak jak niżej (formułę wpisz w jednym wierszu):
= Facebook.Graph("https://graph.facebook.com/v2.10/microsoftpress/posts?since=2017-01-
01&until=2019-12-31")
6. W panelu podglądu pojawią się wpisy wyłącznie z 2019 r.
356
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
= Facebook.Graph("https://graph.facebook.com/v2.10/microsoftpress/posts")
5. Do adresu URL użytego w funkcji Facebook.Graph dopisz znak zapytania i następujący
parametr:
fields=message,created_time,comments,story,shares
Formuła po zmianach wygląda następująco (wpisz ją w jednym wierszu):
= Facebook.Graph("https://graph.facebook.com/v2.10/microsoftpress/
posts?fields=message,created_time,comments,story,shares")
Dodatkowo zmień wersję interfejsu API na najnowszą 4.0:
= Facebook.Graph("https://graph.facebook.com/v4.0/microsoftpress/
posts?fields=message,created_time,comments,story,shares")
Wskazówka. Umieszczając w adresie URL numer najnowszej wersji interfejsu API, możesz
uzyskać dostęp do dodatkowych danych. Przykładowo za pomocą parametru shares możesz
odczytać informacje niedostępne w standardowym interfejsie edytora Power Query.
Za pomocą parametru fields w adresie URL jawnie określa się rodzaje informacji, które mają
być odczytane i umieszczone w raporcie. W tym przypadku są to message (komunikat),
created_time (data i godzina utworzenia), comments (komentarze) i story (relacja). Można
również użyć pola likes (polubienia), jednak zawsze będzie ono zawierało puste wyniki.
6. Ponieważ w kroku 5. jawnie wymieniłeś pola w adresie URL, nie musisz rozwijać kolumny
object_link. Dlatego w panelu Zastosowane kroki usuń kroki Rozwinięty element object_link
oraz Rozwinięty element connections. Jeżeli utworzyłeś krok Zachowano pierwsze wiersze,
również go usuń.
7. W panelu Zapytania zaznacz zapytanie Wpisy.
8. Usuń kolumnę object_link.
9. Rozwiń kolumnę shares. W panelu, który się pojawi, zaznacz pozycję count oraz opcję
Użyj oryginalnej nazwy kolumny jako prefiksu i kliknij OK.
10. Zmień nazwę nowej kolumny z shares.count na Liczba udostępnień, a jej typ na
Liczba całkowita.
Teraz, po utworzeniu kolumny Liczba udostępnień zawierającej liczby udostępnień
poszczególnych wpisów zajmij się komentarzami. Liczby komentarzy do każdego wpisu
możesz odczytać na kilka sposobów. Jeżeli znasz dodatek Power Pivot do Excela lub
357
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
funkcjonalności karty Modelowanie w Power BI, możesz utworzyć prostą miarę DAX zliczającą
liczbę wierszy w tabeli Komentarze. Jeżeli wolisz zrobić to w Power Query, wykonaj opisane
niżej kroki.
11. W panelu Zastosowane kroki zaznacz krok Źródło.
12. Zwróć uwagę, że kolumna comments zawiera obiekty Table lub wartości null. Teraz utwórz
niestandardową kolumnę zawierającą liczby wierszy w poszczególnych obiektach lub zera, jeżeli
komórka w kolumnie comments zawiera wartość null. W tym celu wykonaj następujące kroki.
a. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. W oknie Wstawianie
kroku, które się pojawi, kliknij przycisk Wstaw. Pojawi się okno Kolumna niestandardowa.
b. W polu Nazwa nowej kolumny wpisz Liczba komentarzy.
c. W polu Formuła kolumny niestandardowej wpisz następujący kod:
if [comments] = null then 0 else Table.RowCount([comments])
d. Kliknij OK, aby zamknąć okno.
13. Zmień typ kolumny Liczba komentarzy na Liczba całkowita.
14. Zapisz skoroszyt lub raport. Wykorzystasz go w ćwiczeniu 13.6.
Teraz, gdy wiesz już, jak zliczać komentarze i udostępnienia wpisów, możesz analizować aktywność
użytkowników na dowolnej stronie serwisu (po uprzednim uzyskaniu akceptacji Facebooka).
Gotowe rozwiązanie jest zapisane w plikach R13-05 - rozwiązanie.xlsx oraz R13-05 - rozwiązanie.pbix.
358
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
Uwaga. Nazwa microsoftpress wpisana w polu Wartość bieżąca jest tymczasową wartością,
z której będziesz korzystał tylko przez chwilę. Dzięki niej w kroku 8. przyspieszysz wyświetlanie
danych w panelu podglądu, ponieważ edytor Power Query wykorzysta informacje, które
odczytał wcześniej ze strony Microsoft Press i zapisał w pamięci podręcznej.
RYSUNEK 13.9. Funkcję FnŁadowanieWpisów, utworzoną w kroku 9., możesz wykorzystywać do analizowania
różnych stron Facebooka; aby ją zmodyfikować, wprowadź zmiany w zapytaniu „Ładowanie wpisów”
10. Kliknij prawym przyciskiem myszy zapytanie Strony i wybierz polecenie Odwołanie.
Zmień nazwę nowego zapytania na Wpisy — wszystkie strony.
11. W panelu Zapytania zaznacz nowe zapytanie, a następnie w karcie Dodaj kolumnę kliknij
ikonę Wywołaj funkcję niestandardową.
359
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
12. W oknie o tej samej nazwie, które się pojawi, wybierz w rozwijanej liście Zapytanie funkcji
pozycję FnŁadowanieWpisów. W rozwijanej liście NazwaStrony wybierz pozycję
NazwaObiektuStrony i kliknij OK.
Obok kolumny Strona pojawi się kolumna FnŁadowanieWpisów z obiektami Table,
z których każdy zawiera dane strony Facebooka.
13. Rozwiń kolumnę FnŁadowanieWpisów. W panelu, który się pojawi, sprawdź, czy zaznaczone
są wszystkie pozycje. Usuń zaznaczenie opcji Użyj oryginalnej nazwy kolumny jako prefiksu
i kliknij OK.
Teraz zapytanie Wpisy — wszystkie strony zawiera wszystkie potrzebne wpisy.
14. Niestety, w kroku 13. zmieniły się typy danych w kolumnach. Dlatego w zapytaniu Wpisy
— wszystkie strony zmień typ kolumny Data na Data, typ kolumny Czas na Godzina,
a kolumny Godzina na Liczba całkowita.
Jak pamiętasz, zapytania Wpisy i Komentarze odwołują się do oryginalnego zapytania
Wpisy — baza odczytującego wpisy wydawnictwa Microsoft Press. Zmień powyższe dwa
zapytania tak, aby odwoływały się do Wpisy — wszystkie strony.
15. W panelu Zapytania zaznacz zapytanie Wpisy. W panelu Zastosowane kroki zaznacz krok
Źródło i w pasku formuły wpisz następujący kod:
= #"Wpisy - wszystkie strony"
16. W panelu Zapytania zaznacz zapytanie Komentarze. W panelu Zastosowane kroki zaznacz
krok Źródło i w pasku formuły wpisz kod z kroku 15.
Teraz zapytania Wpisy i Komentarze będą odwoływały się do zapytania Wpisy — wszystkie
strony. Zapytanie Wpisy — baza nie będzie już potrzebne i możesz je bezpiecznie usunąć.
17. Aby załadować zmienione zapytania do raportu, wykonaj poniższe kroki.
W Excelu: w karcie Strona główna rozwiń ikonę Zamknij i załaduj i wybierz polecenie
Zamknij i załaduj do. W oknie Importowanie danych, które się pojawi, zaznacz opcję
Utwórz tylko połączenie. Dzięki temu do modelu danych zostaną załadowane tylko
zapytania Wpisy i Komentarze.
W Power BI Desktop: w panelu Zapytania kliknij prawym przyciskiem myszy zapytanie
Ładowanie wpisów i z podręcznego menu wybierz polecenie Wyłącz ładowanie.
Analogicznie zmień zapytanie Wpisy — wszystkie strony.
18. Załaduj zapytanie Strony do modelu danych w Excelu lub Power BI, a następnie utwórz relację
pomiędzy kolumną NazwaObiektuStrony w tabeli Strony a kolumną NazwaObiektuStrony
w tabeli Wpisy.
Teraz możesz sprawdzić, na której ze stron użytkownicy są bardziej aktywni i częściej
udostępniają wpisy. Rysunek 13.10 przedstawia przykładowe porównanie.
Gotowe rozwiązanie jest zapisane w plikach R13-06 - rozwiązanie.xlsx oraz R13-06 - rozwiązanie.pbix.
360
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 13. ANALIZA SIECI SPOŁECZNOŚCIOWYCH
Podsumowanie
W tym rozdziale poznałeś graf społecznościowy i dowiedziałeś się, jak importować z Facebooka
dane, dzięki którym można znaleźć odpowiedzi na różne pytania osobiste i biznesowe. Nauczyłeś się
łączyć za pomocą Excela i Power BI z punktami końcowymi Facebooka i odczytywać różne informacje,
np. profil, polubienia, dane znajomych, wpisy i komentarze.
Poznałeś kilka technik korzystania z konektora do Facebooka, analizowania swojego profilu
i stron publicznych. W ćwiczeniu 13.1 zaimportowałeś z Facebooka informacje o ulubionych
stronach. W ćwiczeniu 13.2 nauczyłeś się poruszać po grafie społecznościowym i wyszukiwać
znajomych, bezpośrednich i pośrednich, którzy używają Power Query i Power BI. W ćwiczeniu 13.3
wyszukałeś strony, które polubili Twoi znajomi (ale tylko ci, którzy używają Power Query
z konektorem do Facebooka). W ćwiczeniu 13.4 zastosowałeś metodę odczytywania wpisów
i komentarzy, a w ćwiczeniu 13.5 usprawniłeś zapytania i zaimportowałeś liczby udostępnień
wpisów. Na koniec, w ćwiczeniu 13.6 rozszerzyłeś zapytania o możliwość importowania danych
różnych stron Facebooka za pomocą niestandardowej funkcji.
Teraz, wykorzystując posiadane umiejętności analizowania stron, wpisów i komentarzy na
Facebooku oraz zaawansowane techniki analizy tekstu z rozdziałów 11. i 12., możesz tworzyć
przydatne, efektowne raporty o popularności dowolnej marki w serwisie Facebook.
W następnym i ostatnim rozdziale, wykorzystasz swoje świeżo nabyte umiejętności przetwarzania
danych do wykonania kilku ćwiczeń obejmujących różne zagadnienia opisane w tej książce. Wiem,
że jesteś do tego gotów.
361
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
362
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 14.
Napisanie tego zajęło mi trzy miesiące, wymyślenie trzy minuty, a zebranie danych
całe życie.
— F. Scott Fitzgerald
W TYM ROZDZIALE:
wcielisz się w szefa działu analiz fikcyjnej firmy Światowi Importerzy,
podejmiesz się wyzwania przygotowania nieuporządkowanych danych do analizy,
zagregujesz i zdekomponujesz tabele w skomplikowanym scenariuszu przetwarzania
danych z kilku plików,
wykorzystasz różne metody scalania zapytań do porównania zawartości dwóch tabel.
Gratulacje! Dotarłeś do ostatniego rozdziału. Nadszedł czas, abyś sprawdził swoje umiejętności
przetwarzania danych w finałowym projekcie.
Przeszedłeś długą drogę. W poprzednich rozdziałach nauczyłeś się oczyszczać nieuporządkowane
dane, scalać tabele, ujednolicać niezgodne nazwy kolumn, agregować i dekomponować tabele oraz
wykonywać wiele innych przekształceń. Nadeszła pora, abyś sprawdził nabytą wiedzę i wykorzystał
ją do wykonania poważnego zadania.
Ćwiczenie 14.1.
Ratowanie sytuacji u Światowych Importerów
Wyobraź sobie, że jesteś nowym szefem działu analiz w firmie Światowi Importerzy. W ubiegły
weekend miał miejsce zmasowany cyberatak na firmową bazę danych. Zespół specjalistów pracuje
nad odzyskaniem danych o przychodach, a Ty dostałeś zadanie odtworzenia na podstawie starych
danych, które nie ucierpiały podczas ataku, raportu podsumowującego przychody. Twój poprzednik
zapisał dane za lata 2015 – 2017 w trzech skoroszytach Excela, z których każdy zawiera 12 arkuszy,
po jednym dla każdego miesiąca. Oprócz tego są dostępne dane za 2018 r., zapisane w nowym,
skomplikowanym formacie.
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Czy zdołasz zaimportować wszystkie 36 arkuszy i scalić je z danymi za 2018 r. w jednej tabeli,
podobnej do pokazanej na rysunku 14.1?
RYSUNEK 14.1. Twoje zadanie polega na połączeniu danych o przychodach firmy Światowi Importerzy za
lata 2015 – 2017, zapisanych z trzech skoroszytach (każdy zawierający 12 arkuszy po jednym dla każdego
miesiąca) i danych za rok 2018 zapisanych w pliku CSV w wielowierszowych rekordach
Uwaga. Zachęcam, abyś w tym miejscu przerwał lekturę i spróbował samodzielnie wykonać
zadanie. Może Ci to zająć kilka godzin. Gdy będziesz potrzebował pomocy, skorzystaj ze
wskazówek zawartych w kolejnym punkcie.
Wskazówki
Nie wiesz, co robić? Podziel zadanie na następujące części.
1. Zaimportuj skoroszyty Excela zapisane w folderze C:\Dane\R14\Przychody.
2. Utwórz nową kolumnę zawierającą 36 obiektów Table, reprezentujących 36 arkuszy
z przychodami za lata 2015 – 2017.
364
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 14. KOŃCOWY PROJEKT: WSZYSTKO RAZEM
3. W każdym arkuszu pomiń pierwszy wiersz, jak również kolumnę i wiersz zawierające sumy
przychodów.
4. W każdym arkuszu zastosuj funkcję FnDekompozycjaTabeli
(patrz rozdział 7., „Zaawansowane metody dekomponowania i agregowania tabel”).
5. Zaimportuj plik 2018.csv i zagreguj dane w sposób opisany w rozdziale 7.
6. Dołącz do zdekomponowanych danych przychody za 2018 r. Zwróć uwagę na niezgodność
nazw kolumn. Aby przypomnieć sobie sposób ujednolicania nazw kolumn, wróć do
rozdziału 3., „Łączenie danych z kilku źródeł”.
Uwaga. Przerwij lekturę w tym miejscu i spróbuj samodzielnie kontynuować zadanie. Poświęć
na to kilka dodatkowych godzin. Jeżeli będziesz potrzebował pomocy, przeczytaj ponownie
rozdział 7. Jeżeli mimo wszystko będzie Ci potrzebne dodatkowe wsparcie, wykonaj ćwiczenie
krok po kroku.
365
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
= Table.Skip([Data], 1)
c. Kliknij OK. Nowa kolumna będzie zawierała obiekty Table pozbawione pierwszych wierszy.
d. Usuń kolumnę Data.
10. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. W oknie o tej samej
nazwie, które się pojawi, wprowadź następujące zmiany.
a. W polu Nazwa nowej kolumny wpisz Pominięta kolumna sumująca.
b. W polu Formuła kolumny niestandardowej wpisz poniższą formułę:
= Table.RemoveColumns(
[Pominięty pierwszy wiersz], {
List.Last(Table.ColumnNames([Pominięty pierwszy wiersz]))
}
)
c. Kliknij OK. Powyższa formuła usuwa ostatnią kolumnę tabeli. Wykorzystana jest w niej
funkcja Table.ColumnNames zwracająca nazwy kolumn w każdym obiekcie w kolumnie
Pominięty pierwszy wiersz oraz funkcja List.Last zwracająca nazwę ostatniej kolumny.
d. Usuń kolumnę Pominięty pierwszy wiersz.
11. W karcie Dodaj kolumnę kliknij ikonę Kolumna niestandardowa. W oknie o tej samej
nazwie, które się pojawi, wprowadź następujące zmiany.
a. W polu Nazwa nowej kolumny wpisz Tabela podsumowująca.
b. W polu Formuła kolumny niestandardowej wpisz poniższą formułę:
Uwaga. Inny niż opisany w krokach od 9. do 11. sposób uporządkowania tabel podsumowujących
polega na użyciu jednej funkcji. Utwórz puste zapytanie i wpisz następujący kod:
(tabelaWejściowa) =>
let
PominiętyPierwszyWiersz = Table.Skip(tabelaWejściowa, 1),
PominiętaKolumnaSumująca = Table.RemoveColumns(
PominiętyPierwszyWiersz, {
List.Last(Table.ColumnNames(PominiętyPierwszyWiersz))
}
),
Wynik = Table.RemoveLastN(PominiętaKolumnaSumująca, 1)
in
Wynik
366
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 14. KOŃCOWY PROJEKT: WSZYSTKO RAZEM
367
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
15. Rozwiń kolumnę Zdekomponowana. W panelu, który się pojawi, usuń zaznaczenie opcji
Użyj oryginalnej nazwy kolumny jako prefiksu i kliknij OK.
W panelu podglądu pojawią się dane ze wszystkich zdekomponowanych tabel. Teraz czas zająć
się przychodami za 2018 r.
368
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 14. KOŃCOWY PROJEKT: WSZYSTKO RAZEM
Uwaga. W kroku 14. określiłeś nazwy kolumn w zdekomponowanej tabeli zawierającej dane za
lata 2015 – 2017. Jeżeli nazwy te są inne niż podane w argumentach PolaWierszy i PolaKolumn
funkcji FnDekomponujTabelę, w tym kroku pojawią się dodatkowe kolumny o niezgodnych
nazwach. Aby to poprawić, użyj odpowiednich nazw w kroku 14. lub zmień nazwy kolumn
w zapytaniu Przychody 2018.
26. Zmień typ danych w kolumnie Przychód na Waluta lub Liczba dziesiętna, a kolumny Data
na typ Data.
27. Na koniec załaduj zapytanie Przychody do raportu i wyłącz ładowanie zapytania
Przychody 2018.
W Excelu: w karcie Dane kliknij ikonę Zapytania i połączenia. W panelu o tej samej nazwie
kliknij prawym przyciskiem myszy zapytanie Przychody 2018 i wybierz polecenie Załaduj do.
W oknie Importowanie danych, które się pojawi, zaznacz opcję Utwórz tylko połączenie
i kliknij OK.
W Power BI Desktop: w edytorze Power Query kliknij prawym przyciskiem myszy
zapytanie Przychody 2018 i usuń zaznaczenie opcji Włącz ładowanie.
Gotowe rozwiązanie jest zapisane w plikach R14-01 - rozwiązanie.xlsx oraz R14-01 - rozwiązanie.pbix.
369
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Wskazówki
Jeżeli nie wiesz, jak wykonać to zadanie, skorzystaj z poniższych wskazówek.
1. Haker zmienił dane w kolumnie Przychód. Aby znaleźć różnice, scal dwa zapytania,
wykorzystując wszystkie kolumny oprócz powyższej. Następnie rozwiń kolumnę Przychód
z drugiego zapytania i zastosuj filtr wyszukujący różnice w tej kolumnie w obu zapytaniach.
2. Aby znaleźć wiersze dodane przez hakera, scal kolumny w tabeli uzyskanej w ćwiczeniu 14.1
ze zhakowaną tabelą za pomocą prawego antysprzężenia. Dzięki temu po rozwinięciu
kolumny pojawią się wiersze, które istnieją tylko w zhakowanej tabeli.
Rozwiązanie
Aby wyszukać wiersze ze zmienionymi przychodami, scal dwie tabele za pomocą wszystkich kolumn
oprócz Przychód. Jeżeli nie wiesz, jak to zrobić, wykonaj poniższe kroki.
1. Zaimportuj do edytora Power Query w Excelu lub Power BI Desktop dane z pliku
R14-01 - rozwiązanie.xlsx. Zmień nazwę nowego zapytania na Poprawne.
2. Zaimportuj dane z pliku R14-02 - zhakowane dane.xlsx. Zmień nazwę nowego zapytania
na Zhakowane.
3. W panelu Zapytania zaznacz zapytanie Poprawne, a następnie w karcie Strona główna
rozwiń ikonę Scal zapytania i wybierz polecenie Scal zapytania jako nowe.
4. W oknie Scalanie, które się pojawi, wprowadź następujące zmiany.
a. W pierwszej tabeli zaznacz, trzymając przyciśnięty klawisz Ctrl, kolumny Data, Kolor,
Kategoria dostawcy, Nazwa dostawcy, Kategoria klienta i Miasto. Ważna jest kolejność kolumn.
b. W rozwijanej liście poniżej wybierz pozycję Zhakowane. W drugiej tabeli zaznacz,
trzymając przyciśnięty klawisz Ctrl, kolumny Data, Kolor, Kategoria dostawcy,
Nazwa dostawcy, Kategoria klienta i Miasto. Ważna jest kolejność kolumn.
c. W rozwijanej liście Rodzaj sprzężenia wybierz Wewnętrzne (tylko pasujące wiersze),
tak jak na rysunku 14.3. Kliknij OK, aby zamknąć okno.
5. Zmień nazwę nowego zapytania na Zmienione wiersze, a następnie rozwiń kolumnę
Zhakowane. W panelu, który się pojawi, usuń zaznaczenie wszystkich pozycji oprócz
Przychód. Zaznacz opcję Użyj oryginalnej nazwy kolumny jako prefiksu i kliknij OK.
Aby wyszukać wiersze z niezgodnymi wartościami, musisz zastosować warunek, którego nie
można zdefiniować za pomocą interfejsu programu. Dlatego zdefiniuj przejściowy warunek,
a następnie zmień go w pasku formuły.
6. W nagłówku kolumny Przychód kliknij ikonę filtru i wybierz polecenia Filtry liczb i Nie
równa się. W oknie Filtrowanie wierszy, które się pojawi, wpisz w polu obok rozwijanej listy
nie równa się liczbę 12345 i kliknij OK. W pasku formuły pojawi się następujący kod:
= Table.SelectRows(#"Rozwinięty element Zhakowane", each [Przychód] <> 12345)
7. Aby znaleźć wiersze, które w kolumnach Przychód i Zhakowane.Przychód zawierają różne
wartości, zmień formułę, tak jak niżej:
= Table.SelectRows(#"Rozwinięty element Zhakowane", each [Przychód] <> [Zhakowane.Przychód])
Powinno pojawić się siedem wierszy z różnymi wartościami w kolumnach Przychód
i Zhakowane.Przychód.
370
4650570396d9eb2765da56c12eb840b5
4
ROZDZIAŁ 14. KOŃCOWY PROJEKT: WSZYSTKO RAZEM
RYSUNEK 14.3. Za pomocą przekształcenia Scal zapytania możesz porównywać dwie tabele i wyszukiwać
różnice w wartościach
371
4650570396d9eb2765da56c12eb840b5
4
POWER QUERY W EXCELU I POWER BI
Podsumowanie
Zakończyłeś swój ostatni projekt i oficjalnie stałeś się profesjonalnym analitykiem danych. Od teraz,
wyposażony w edytor Power Query, będziesz w stanie wywierać istotny wpływ na biznes swój
i Twojej firmy. W tym projekcie wykorzystałeś różne przekształcenia, m.in. łączenie kilku
skoroszytów, agregowanie i dekomponowanie tabel oraz scalanie zapytań.
Zachęcam, abyś tę książkę traktował jak przewodnik. Zachowaj pliki z rozwiązaniami do
ewentualnego wykorzystania w przyszłości, gdy będziesz się mierzył z nowymi zadaniami. Dane,
które będziesz przetwarzał, mogą być zupełnie inne niż użyte w tej książce, ale będziesz mógł
wykorzystywać opisane techniki i dostosowywać je do indywidualnych wymagań.
Poznawanie narzędzia Power Query jest ciągłym procesem. Aby rozwijać swoje umiejętności
przetwarzania danych, warto analizować za pomocą Power Query różne nieuporządkowane zbiory
i wciąż robić coś nowego. Teraz jest dobry moment, abyś wrócił do rozdziału 9., „Wprowadzenie
do języka M”, i sprawdził, jakie elementy języka M i jego składni znasz już lepiej i jak możesz go
wykorzystać do rozszerzenia zapytań, które utworzyłeś za pomocą interfejsu programu.
Na pewno w trakcie pracy z tą książką odkryłeś wiele nowych funkcjonalności narzędzia Power
Query w Excelu i Power BI, poznałeś ich zastosowania i przekonałeś się, że dzięki nim możesz
oszczędzić setki godzin pracy. Teraz jest dobry moment, abyś sprawdził, jak możesz wykorzystać
nabyte umiejętności w takich programach jak Microsoft Analysis Services, Microsoft Flows i Power
Apps, które również zawierają narzędzie Power Query. Twoja podróż dopiero się rozpoczęła.
Wierzę, że będzie Ci się podobać.
372
4650570396d9eb2765da56c12eb840b5
4
4650570396d9eb2765da56c12eb840b5
4