04.2023 | Piwik PRO | Microsoft Power BI | API
Microsoft Power BI to obecnie jedno z popularniejszych rozwiązań BI do analizy, wizualizacji i wnioskowania na bazie danych. Od kliku lat już zajmuje pierwsze miejsce w raportach Gartnera, wyprzedzając m.in. Tableau.
Zaletą rozwiązań typu Power BI czy Tableau, jest możliwość połączenia się z różnymi źródłami danych i ujęcia ich w jednym systemie raportowania. Takimi danymi mogą być również dane z systemu typu Web Analytics.
Sprawdźmy zatem, jak wygląda możliwość połączenia danych zbieranych przez Piwik PRO z Microsoft Power BI.
W niniejszym przykładzie korzystamy z wersji bezpłatnej - Piwik PRO Core.
Zakres artykułu:
W ramach dostępnych integracji Piwik PRO nie posiada konektora wbudowanego w Power BI, ale posiada API, które wykorzystamy w niniejszym przykładzie.
Dostępność API daje nam możliwość kilku działań w zakresie integracji, każde z nich ma swoje wady i zalety oraz koszt, związany z developmentem.
Rozwiązania 1 oraz 3 mają zastosowanie głównie w przypadku mniejszych wolumenów czy raportów ad-hoc, gdzie ważna jest analiza np. okresu kampanijnego, czy jakiegoś określonego fragmentu danych.
Sposób 2 jest natomiast przeznaczony do większych wolumenów, gdzie potrzebujemy dokonywać głąbszych analiz, na większej ilości wymiarów i w dłuższych przedziałach czasu.
W naszym przypadku skoncentrujemy się na sposobie pierwszym , gdyż jest on najściślej powiązany z interfejsem Power BI, a jednocześnie jest szybki w realizacji.
Nim przejdziemy do Microsoft Power BI, to jednak wpierw zobaczmy, gdzie można znaleźć dane do API w przypadku usługi Piwik PRO.
Nie będzie to żadnym odkryciem, jeżeli powiem, że standardowo mamy stronę, poświęconą dokumentacji i opisowi możliwości API.
Strona jest tutaj.
Być może jednak, zaskoczeniem będzie fakt, że Piwik PRO powinien dostać jakiegoś małego Oskara , za alternatywny sposób pokazania dokumentacji - otóż, w panelu usługi, przy (większości) raportów znajdziemy zdefiniowane zapytanie do API (api call), o ten pokazany zestaw danych.
Zobaczmy to na przykładzie:
Logujemy się do Piwik PRO i wybieramy przykadowy raport np. Audience Overview.
Na stronie Audience overview, przechodzimy do wykresu Page views, klikamy przy nim ikonkę trzech kropek (...).
Otworzy się menu, w którym wybieramy View API call definition:
Definicja API call pojawia nam się w okienku typu pop-up. Pamiętajmy, że jest to definicja, która dotyczy tylko i wyłącznie danego wykresu, a nie całej strony na której jest kilka zestawów danych.
Przejdźmy teraz do oprogramowania naszego API call , tak aby pobrać dane i zobaczyć jak wyglądają pobrane wyniki.
Przechodzimy do dowolnego edytora programistycznego i definiujemy kolejne fragmenty naszego skryptu.
A. Pobranie niezbędnych bibliotek
Pobieramy m.in. Bibliotekę pandas, numpy oraz requests.
# import bibliotek
import requests
import json
import numpy as np
import pandas as pd
B. Autoryzacja dostępu
W miejsce 'your-client-id ' oraz 'your-client-secret ', wpisujemy odpowiednio nasze wartości dla Client ID oraz Client Secret.
Wartości te są dostępne w panelu Piwik PRO - aby je utworzyć - należy przejść poniższą ścieżkę:
Menu => Profile => API Keys => Create a Key
Pełny kod tej sekcji wygląda następująco:
# header
headers = {
'Content-Type': 'application/json',
}
# payload
json_data = {
'grant_type': 'client_credentials',
'client_id': 'your_client_id',
'client_secret': 'your_client_secret',
}
# zapytanie post
response = requests.post('https://surowiecki.piwik.pro/auth/token', headers=headers, json=json_data)
# odpowiedź
json_string = response.text
json_dict = json.loads(json_string)
array_values = np.array(list(json_dict.values()))
Zdefiniowanie danych, jakie chcemy pobrać i wykonanie API call o te dane:
# header
headers = {
'Authorization': 'Bearer ' + array_values[2],
'Content-Type': 'application/vnd.api+json',
}
Uwaga: w polu website_id podajemy numer ID naszej strony.
Website_ID jest dostępny, w poniższej lokalizacji:
Menu => Administration => [nazwa_twojej_strony] => ID (kopiujemy identyfikator)
# treść zapytania została skopiowana z pokazanego wcześniej raportu
data = '''
{
"date_from": "2023-03-01",
"date_to": "2023-04-26",
"website_id": "website-id",
"offset": 0,
"columns": [
{
"transformation_id": "to_date",
"column_id": "timestamp"
},
{
"column_id": "visitors"
},
{
"column_id": "sessions"
},
{
"column_id": "page_views"
},
{
"column_id": "goal_conversion_rate"
},
{
"column_id": "events_per_session"
},
{
"column_id": "returning_visitors_rate"
},
{
"column_id": "goal_conversions"
}
],
"order_by": [
[
0,
"asc"
]
],
"filters": null,
"metric_filters": null
}
'''
# zapytanie POST i odpowiedź
response = requests.post('https://surowiecki.piwik.pro/api/analytics/v1/query/', headers=headers, data=data)
Przygotowanie wsadu dla Power BI
# konwersja odpowiedzi z API na format JSON
response_data = json.loads(response.text)
# pobranie danych
data_array = response_data['data']
# zdefiniowanie kolumn danych
column_names = ["timestamp__to_date", "visitors", "sessions", "bounce_rate", "goal_conversions", "goal_conversion_rate", "goal_revenue__sum"]
# konwersja do tablicy Pandas
df = pd.DataFrame(data_array, columns=column_names)
Cały kod sprawdzamy - np. df.head() - wynik jego działania powinien być podobny do wyniku jak poniżej:
Uruchamiamy Power BI i wybieramy jako konektor opcję "Python script" , a następnie klikamy przycisk Connect.
Pojawi się okienko, do którego należy przekopiować nasz skrypt.
Po wklejeniu skryptu, klikamy OK i musimy odczekać chwilę. Jako wynik pojawi nam się kolejne okno, w którym zobaczymy wizualizację naszego DataFrame.
Dostępne są standardowe opcje dalszego procedowania z połączeniem do zestawu danych, czyli:
W naszym przypadku klikamy Load:
W kolejnym kroku, zobaczymy już interfejs tworzenia raportów PBI tzn. nasz zestaw danych jest wgrany i dostępny do tworzenia raportów i analiz.
A zatem mamy połączenie z API Piwik PRO i możemy budować pierwsze raporty: