Power BI:n ulkoiset työkalut – Jupyter Notebook & Python
Power BI ja ulkoiset työvälineet
Power BI:n käyttäjiä hemmoteltiin heinäkuussa 2020, kun Power BI Desktoppiin lisättiin tuki ulkoisille työkaluille (”External tools”)
Lyhyessä ajassa työkalut kuten Tabular Editor, DAX-Studio sekä ALM Toolkit ovat saavuttaneet suosiota ja tuoneet Power BI-kehittäjän työkalupakkiin uusia mahdollisuuksia. Kukin näistä työkaluista palvelee käyttäjää hieman eri näkökulmasta. Avaan näiden työkalujen toimintaa kuitenkin toisessa blogikirjoituksessa.
Ulkoisten työkalujen tuki mahdollistaa myös omien apusovellusten luomisen ja käytön ja keskitynkin tässä blogisarjassa siihen, miten Jupyter Notebookia voidaan Pythonin kanssa hyödyntää Power BI Desktopin ohjaamiseen. Periaatteessa Tabular Editor ja DAX-Studio tarjoavat jo valmiita ratkaisuja Power BI Desktopin taustalla pyörivän Analysis Servicesin tabular -palvelimen, intanssien sekä tietokantojen hallintaan sekä DAX-kyselyjen syöttöön. Tarve voi kuitenkin olla vielä räätälöidymmille ratkaisuille. Haluaisitko käyttää Power BI:tä tietolähteenä vai haluaisitko luoda oman logiikan mittareiden lisäämiseen? Voihan myös olla, että Tabular Editorin C#:n perustuva Advanced Scripting on poissa laskuista. Onko meillä vaihtoehtoja? Ohjeita eri ohjelmointikielille on vielä hyvin rajallisesti ja tällä hetkellä näyttäisi siltä, että C#:lla ja Pythonilla on mahdollista päästä kaikista pisimmälle.
Yhteys Analysis Services - palveluun
Käsittelen tässä Blogisarjassa Pythonin käyttöä ulkoisena työkaluna Jupyter Notebookin kautta, yhdistämistä lokaaliin Analysis Servicesin tabular-palvelimeen sekä pyrin antamaan käytännöllisiä ratkaisuja, jotka olen kokenut toimiviksi. Kannustan myös kehittelemään omia ideoita ja jakamaan kokemuksia kommenteissa. Innoittajana ja lähteenä tälle blogikirjoitukselle toimii David Eldersveldin hieno Power BI -blogi https://dataveld.com/.
Aloitamme tässä osassa ottamalla yhteyttä tabular -palvelimeen ja kyselemällä DAX-kyselyitä tietokannasta ssas_apin läpi.
Aloitetaan! Power BI Desktopin datamallit istuvat taustalla pyörivän siis Analysis Servicesin päällä. Voimmekin ottaa lokaaliin Analysis Servicesin tabular-palvelimeen yhteyden ohjelmallisesti.
Tarvitsemme Analysis Servicesin tabular -palvelimen käsittelyyn seuraavat .Net -kirjastot.
- Microsoft.AnalysisServices.Tabular.dll
- Microsoft.AnalysisServices.AdomdClient.dll
Kirjastot ovat oletusarvoisesti asentuneet Power BI Desktop-, Excel-, SSMS- sekä Analysis Servicesin projektilaajennusasennusten mukana. Mikäli näitä client-kirjastoja, ei syystä tai toisesta kuitenkaan löydy asennettuna saat ne haettua täältä: https://docs.microsoft.com/en-us/analysis-services/client-libraries?view=asallproducts-allversions.
Löydät portin, jossa paikallinen palvelin pyörii helpoiten joko Tabular Editorista tai DAX Studiosta. Tabular Editorista se löytyy täältä:
Tarvitset myös tiedon tietokannasta, jossa raporttisi sijaitsee paikallisesti. Löydät sen valitsemalla Tabular Editorissa vasemmalta ”Model” ja ensimmäisenä ”ominaisuutena” listalta löytyy tieto tietokannoista. Tarvitset vain viimeiset merkit lopusta pisteen jälkeen.
Nämä voidaan Jupyter Notebookissa tallentaa muuttujiin.
Yhteydet Pythonilla
Emme saa tabular-palvelimeen suoraan yhteyttä Pythonilla vaan meidän pitää asentaa Pythonnet-kirjasto sekä Josh Dimarskyn luoma ssas_api. Pythonnetin avulla pystymme integroitumaan .NET-ympäristöön ja käyttämään ym. Kirjastoja suoraan Pythonilla. ssas_apilla voidaan käyttää kätevästi joitain Power BI:n käytön kannalta hyödyllisiä client-kirjastojen ominaisuuksia, kuten tallentamaan DAX-kyselyiden tuloksia Pandasin Dataframeihin.
Asennetaan Pythonnet joko Condan komennolla conda install -c pythonnet pythonnet tai käyttäen pip:iä pip install pythonnet. Voimme ladata ssas_apin ja tallentaa sen työkansioon seuraavasti.
Tuodaan tarvittavat kirjastot Notebookiin
Tarvitaan vielä connection string
Jo nyt voimme tehdä ssas_apin kautta kyselyitä tabular-tietokantaan ja tallentaa niitä Pandasin Dataframeiksi esim. seuraavasti:
Tabular-palvelimelle yhdistäminen on periaatteessa verrattain yksinkertaista, kun oikeat rakennuspalikat löytyvät. Blogisarjan seuraavassa osassa käyn läpi sitä, kuinka käyttäjä voi luoda itselleen Jupyter Notebookista ulkoisen työkalun ja millainen valmiiksi alustettu notebook voisi parhaiten palvella käyttäjää. Se mitä notebookiin valmiiksi laitetaan, on tietysti makuasia ja riippuu paljon työskentelytavoista.
Tässä vielä Notebookin koodi kokonaisuudessaan:
server = 'localhost:49216'
database = 'bbe37dfc-b70c-4ec9-8075-9e7a6471c389'
import requests
ssas_api_url = 'https://raw.githubusercontent.com/yehoshuadimarsky/python-ssas/3b0afc6f6b3a534a6c2a767b67ddadefd8f7bae1/ssas_api.py'
ssas_api_file = requests.get(ssas_api_url)
print(ssas_api_file)
open('ssas_api.py', 'wb').write(ssas_api_file.content)
import sys
import ssas_api as pbi
import pandas as pd
conn = f'Provider=MSOLAP;Data Source={server};Initial Catalog='';'
df = pbi.get_DAX(conn, 'EVALUATE titanic')
Lähteet:
David Eldersveld https://dataveld.com/
Josh Dimarsky https://github.com/yehoshuadimarsky/python-ssas
Microsoft