(此文章同時發表在本人微信公眾號“dotNET開發經驗談”,歡迎右邊二維碼來關注。)
題記:這篇其實不是一個操作向導了,主要對Power BI的嵌入特性進行探討。
Power BI是微軟的創新性(或者稱之為敏捷型)BI產品,從發布之初就備受關注,因為它是一個只能以純SaaS模式提供服務端的BI產品。目前Power BI其實是以兩種方式提供服務端:
- Power BI Service。只能通過Office 365來購買訂閱,一般作為一個獨立的BI應用供企業內部使用。
- Power BI Embedded。只能通過Azure來購買,按使用量付費,主要滿足ISV(獨立軟件供應商)在自身Web應用中集成BI功能提供給最終用戶的需求。
所以要把Power BI嵌入到Web應用程序中,針對不同的提供方式,也有不同的嵌入方式。
通過Power BI Service嵌入
Power BI Service一般通過Azure Active Directory進行驗證后(即你的Web應用必須使用AAD做驗證),使用iframe把報表嵌入到應用頁面中。比如MS Teams就使用這種方式集成了Power BI。同時還可以利用Power BI REST API來實時更新數據。下圖展示了進行集成的整體流程:
微軟已經很貼心的給出了一個示例和文檔來指導大家進行Power BI Service的集成(都不需要我來寫了):https://powerbi.microsoft.com/zh-cn/documentation/powerbi-developer-integrate-report/。大致步驟如下:
- 通過Office 365訂閱Power BI服務(有免費可選),有了Office 365,自然就有AAD租戶。當然也可以反過來,使用已有的AAD租戶(必須是企業組織)來注冊免費的Power BI服務。
- 注冊你的Web應用,可以直接在Azure Portal中注冊(建議使用這種方式),或者使用Power BI應用注冊工具注冊。以Power BI應用注冊工具為例:App Type選擇服務端應用,Redirect URL輸入類似http://localhost:13526/這樣的地址
- 把得到的Client ID和Client Secret填寫到配置文件中,示例代碼是項目的Settings.settings
- 運行Web應用,使用Office365帳號登錄,獲取報表的嵌入Url,就可以進行報表的嵌入瀏覽了
通過Power BI Embedded嵌入
考慮到Power BI Service主要用於企業內部,並且沒有單獨的服務器可供安裝,為了解決ISV集成BI報表到自己產品的需求,微軟特意在Azure中提供了Azure Power BI Embedded雲服務。可以把Azure Power BI Embedded看作是Qlik Sense的OEM模式,只是它是在線的OEM服務。它的優點是:“通過使用Power BI Embedded服務,ISV就無需為了開發與維護可視化功能和BI控件而自行投入研發力量。這些可視化功能可以支持他們使用的全部設備,而ISV也能夠充分地利用Power BI服務上不斷出現的各種創新功能以及他們的全部價值”。老實說我也基於Qlik Sense構思了類似Power BI Embedded的東西,要解決的就是這樣的問題,看來這個Idea還是有市場的。
Power BI Embedded嵌入方式比Power BI Service的簡單些,最主要是通過AccessKey代替AAD驗證,頁面嵌入也是通過iframe來實現。當然訪問后台的API是另外一套,名字叫Azure Power BI Embedded REST API,不過有.NET和JS的SDK可供下載。下圖給出了一個嵌入步驟的概念模型:
簡單說來就是:
- 一個開發者首先需要申請Azure訂閱(可以多個)
- 在Azure中創建一個或多個Power BI工作區集合,獲得名稱和AccessKey
- 通過API來創建一個或多個Power BI工作區(工作區包含了報表、數據集等),獲得工作區ID
- 通過API獲取工作區內的報表等信息,並通過AccessKey來獲得EmbedToken
- 利用iframe(實際微軟提供了MVC的一些HtmlHelper和js供大家使用)來顯示嵌入的報表
- 最終用戶訪問你的Web應用從而瀏覽報表
具體的步驟可以看官方的文檔,已經寫的足夠好和詳細了:https://docs.microsoft.com/zh-cn/azure/power-bi-embedded/power-bi-embedded-get-started
Power BI vs Qlik Sense
下面我們來對Power BI和Qlik Sense在嵌入Web應用這個方面進行一個簡單比較:
比較點 | Power BI | Qlik Sense |
iframe方式嵌入 | 支持 | 支持 |
div方式嵌入 | 不支持 | 支持 |
儀表盤嵌入 | 支持 | 支持 |
報表/工作表嵌入 | 支持 | 支持 |
磁貼/可視化對象嵌入 | 支持 | 支持 |
嵌入后客戶端操作 | 支持 | 支持 |
開發工具支持 | 弱 | 強 |
本地AD/Windows驗證 | Embedded支持 | 支持 |
Azure AD驗證 | Service支持 | 支持(需在QMC中配置) |
自定義驗證 | Embedded支持 | 支持 |
總體而言,Qlik Sense的嵌入靈活度和便捷性更高。但是Power BI這種租用服務的方式也有優勢。