Občas pri príprave dát v Power Query v Power BI potrebujete použiť regulárne výrazy, ľudovo regexy. Problém však je, že Power Query ich zatiaľ nepodporuje. Preto sa pozrieme, ako to obísť pomocou transformácií v Pythone, ktorý ich už dávno má.
V tomto návode si ukážeme, ako ho v Power Query viete použiť na extrakciu e-mailových adries z textu. Tento návod bude fungovať zatiaľ iba v Power BI Desktope, a možno v najnovšom Exceli 2019 a Office 365. Power Query v ostatných Exceloch to zatiaľ nepodporuje.
Python je skriptovací jazyk, ktorý sa používa na vytváranie webových aplikácií, či spracovanie dát. Je jedným z najpopulárnejších skriptovacích jazykov na svete. Power BI Desktop v rámci augustovej aktualizácie 2018 pridal podporu pre skripty Pythonu. Vďaka tomu môžete využiť obrovské množstvo kódu, ktorý už existuje dlhé roky v rôznych repozitároch a knižniciach.
Najprv je potrebné nastaviť Power BI Desktop. V prvom kroku je potrebné povoliť skriptovanie v Pythone, kvôli tomu že je to ešte len experimentálna funkcia. Spravíte to tak, že pôjdete cez menu Súbor => Možnosti a nastavenia => Možnosti, a tam v ľavom menu kliknete na Funkcie verzie Preview, a tam zakliknete políčko vedľa položky Podpora jazyka Python:
Následne je potrebné reštartovať Power BI Desktop. Nereštartujte ho, iba ho vypnite. Zapneme ho neskôr.
Potom je potrebné nainštalovať Python. Najprv je potrebné si stiahnuť inštalátor z oficiálnych webstránok:
https://www.python.org/downloads/windows/
V tomto prípade používam 64-bitový Power BI Desktop, a teda stiahnem si aj 64-bitový Python – ten čo je označený „Windows x86-64 executable installer„:
Keď si stiahnete inštalátor, tak ho spustite. Na úvodnej stránke NEZABUDNITE zakliknúť nastavenie „Add Python 3.7 to PATH„, aby ste to potom nemuseli robiť ručne:
Potom spustite inštaláciu, a počkajte, kým sa dokončí.
Potom je ešte potrebné doinštalovať knižnice pandas a matplotlib, pretože tie využíva Power BI Desktop, a nie sú pribalené ani tam, ani v Pythone. Otvorte si teda príkazový riadok, ideálne ako správca, a zadajte tam postupne tieto príkazy:
python -m pip install –upgrade pip
py -m pip install pandas
py -m pip install matplotlib
Prvý príkaz aktualizuje pip, ktorý sa používa na inštaláciu knižníc. Druhý a tretí príkaz nainštalujú knižnice pandas a matplotlib. Výstup na obrazovke bude vyzerať nejak takto:
Následne naštartujte Power BI Desktop.
Potom je potrebné nastaviť, alebo aspoň skontrolovať nastavenia integrácie s Pythonom v Power BI Desktope. V ňom to spravíte cez menu Súbor => Možnosti a nastavenia => Možnosti, a tam v ľavom menu kliknete na Skriptovanie v jazyku Python. Malo by to byť nastavené približne takto:
V tomto okne dajte OK, a všetko by malo byť nastavené.
Potom si dáme vytvoriť alebo naimportovať takúto tabuľku (vy si dajte naimportovať tú svoju):
Zo stĺpca TextNaHladanie tejto tabuľky potrebujeme extrahovať e-mailové adresy do nového stĺpca, ak tam nejaké sú. Pre zjednodušenie budeme extrahovať iba prvú adresu, ak ich je tam viac.
Dáme teda upraviť tento dotaz v Power Query. Tam kliknite na záložku Transformovať, a potom na tlačítko Spustiť skript jazyka Python:
Malo by sa zobraziť takéto okno:
Ak sa v ňom zobrazuje hlásenie o tom, že Python nie je nainštalovaný, tak si vyhľadajte na webe, ako to vyriešiť. Prípadne iba reštartovať Power BI Desktop.
Do tohto okna teraz prilepte nasledujúci skript, a stlačte OK:
# Údaje vstupu pre tento skript sú uložené v množine údajov ‚dataset‘
# použijeme knižnicu na prácu s regexami
import re
# vytvoríme funkciu na extrakciu e-mailu zo zadaného reťazca
def extractEmail(inputString):
match = re.search(r'[\w\.-]+@[\w\.-]+‘, inputString);
if match is not None:
return match.group(0);
else:
return „“;
# do tabuľky dáme pridať nový stĺpec s názvom EmailNajdeny, do ktorého dáme uložiť
# výsledok funkcie extractEmail s hodnotou zo stĺpca TextNaHladanie
dataset[„EmailNajdeny“] = dataset[„TextNaHladanie“].apply(extractEmail)
Riadky začínajúce mriežkou sú komentáre, kde máte vysvetlenie k jednotlivým krokom.
Niekedy je potrebné ešte stlačiť tlačidlo Obnoviť ukážku v hlavnom menu, aby sa obnovila tá správna konštelácia hviezd.
Keď vám hore uvedený skript zbehne, tak výsledok by mal vyzerať takto:
V tomto výsledku kliknite na ten žltý odkaz Table:
…čím sa rozbalí výsledok z Pythonu do tabuľky v Power Query:
V novom stĺpci EmailNajdeny budú nájdené e-mailové adresy. Alebo čokoľvek iné, čo len viete zadať cez regulárne výrazy
Takže takto jednoducho idú používať regulárne výrazy na transformáciu údajov v Power Query. Pomocou nich viete potom veľmi jednoducho extrahovať údaje aj z veľmi zle štruktúrovaných dát. Len je potrebné vedieť regulárne výrazy. Ale to je už iná téma
Prípadne, ak by vám to nestačilo, tak si prečítajte článok o tom, ako to isté spraviť v jazyku R skript 🙂
Autor, tréner a expert na Power BI, PowerPivot a jazyk DAX. Založil som tento web, aby som pomohol dostať Power BI do širšieho povedomia, a aby som ľuďom ukázal, že moderný a komplexný reporting ide vyriešiť rýchlo a jednoducho. Po nociach vzývam Majstra Yodu a tajne plánujem ovládnutie vesmíru.