PowerBI 是一個功能強大且高度視覺化的報表工具,除了畫面的美觀與互動性。消費者可以還會關心它對資料的整合性,例如多資料源、巨量資料、社群資料…等。其中有些人也會在意,它是否能介接 Streaming串流型的資料?來實現更即時的監控報表呈現。本篇將以Azure blob storage為資料源,示範如何使用Tile元件來達到這個需求。
由於之前已經介紹過 PowerBI streaming的原理,所以本篇就從它到底能支援哪些即時資料集,包含了之前介紹過的PubNub 串流資料集、推送資料集、串流資料集(細節可以參考官網的說明)。
- PubNub streaming dataset 請參考之前的這一篇。
- Push dataset 指的就是由資料源不斷地將更新資料送給PowerBI來呈現,它的限制最少,但是成本會比較高。你可能會問我說Professional版本不是Saas服務,10元美金/月(吃到飽),哪來的比較高的成本?我這邊指的是資料來源的成本,不是PowerBI這邊的成本。(但是當你使用磚時,資料並不會自動被更新,而是被動地等到資料源將資料送過來。若你是使用Q&A功能,它是會主動去向資料源要資料的)
- Streaming dataset 就是應用 PowerBI service中的 Cache來顯示資料,例如以折線圖、卡片…等元件,以少量多餐的方式Ingest資料,細節可以參考這一篇。然而由於先天上的限制,它只接受你使用Tile磚的方式並選擇自訂資料集來使用它,不支援 Q&A。它每秒可以處理5個Request,每次可以處理 15KB的資料量,所以上限是75KB per second。
**另外這類型的串流資料處理,先天上就應該是以很單純的資料格式送過來,不要去做任何彙總運算(Sum小計、Avage平均),否則它的延遲就會很嚴重,即使是較少量的 Streaming dataset 做了彙總後也是會卡鈍的…
首先你要準備一個 Dataset 資料集(JSON格式),接著再登入 PowerBI Web 進行以下操作:
在My workspace中右上角的 + 新增一個 Streaming dataset
最近 Web side有一些改版,layout 可能會從中間偏左來進入 Create功能
然後選擇三大分類中的 API
為 dataset 取一個名稱,然後指定欄位名稱與資料型態。然後下面有一個示意方框,來協助你選對適合的資料型態
當你按下 Create 系統會產生一網址給你,你需要把畫面中的 URL 貼到你的程式碼中
如果太快按 Done,還是可以在 MyWorkspace中找到
接下來可以參考以下的程式碼,把資料庫Table中的資料,透過REST API 以每5秒鐘發送一次,就能呈現出 realtime的 streaming 效果。系統會利用professional 帳戶中10GB的容量,幫你的資料把存在 Aure blob storage
import urllib, time, pyodbc
import pandas.io.sql as psql
import urllib.request
from datatime import datatime
REST_API_URL = "<Insert your push URL>"
cnincome = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SEVER=MyMachine\SQLSERVERINS:DATABASE=TestDB:Trusted_Connnection=yes')
cursor = cnincome.cursor()
sqlIncome="select * from tblIncome with(nolock)"
flag=1
while(flag):
dfIncome = psql.read_sql(sqlIncome, cnincome, index_col-'EffortID')
dfIncomesummary = dfIncome.groupby(['name']).agg({'Effort':['sum']}).rest_index()
dfIncomesummary.columns = ['DomainName','Effort']
dfTotalIncome = dfIncomesummary.agg({'Effort':['sum']})
dfTotalIncome.columns = ['TotalEffort']
data=bytes(dfTotalIncome.to_json(orient='records'),'utf-8')
req=urllib.request.Request(REST_API_URL, data)
response = urllib.request.urlopen(req)
time.sleep(5)
再回到 PowerBI Web 選擇 Create dashboard/ tile 磚以及 Custom streaming data
然後開始設計你所需要的 Report or Dashboard
李秉錡 Christian Lee
Once worked at Microsoft Taiwan