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 kokonaisuudessan:

server = ‘localhost:49216’

database = ‘bbe37dfc-b70c-4ec9-8075-9e7a6471c389’

import requests

ssas_api_url = r’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’)

Kirjoittajasta

Antti Mäenpää on data-analytiikkaan erikoistunut konsultti.

Power BI asiantuntijamme Antti Mäenpää

Lähteet:

David Eldersveld https://dataveld.com/

Josh Dimarsky https://github.com/yehoshuadimarsky/python-ssas

Microsoft