使用服務主體自動化 進階版 工作區和語意模型工作

服務主體是您在租使用者內建立的 Microsoft Entra ID 應用程式註冊 ,以執行自動資源和服務等級作業。 它們是具有應用程式名稱、應用程式識別碼、租使用者標識碼,以及 密碼客戶端密碼 或憑證的唯一使用者身分識別類型。

Power BI 進階版 使用與 Power BI Embedded 相同的服務主體功能。 若要深入瞭解,請參閱 使用服務主體內嵌 Power BI 內容。

在 Power BI 進階版 中,您可以使用服務主體搭配 XMLA (XML Analysis) 端點來自動化語意模型管理工作,例如布建工作區、部署模型,以及使用下列方式重新整理語意模型:

  • PowerShell。
  • Azure 自動化。
  • Azure Logic Apps。
  • 自訂客戶端應用程式。

只有 新的工作區 使用服務主體支援 XMLA 端點連線。 不支持傳統工作區。 服務主體只有指派工作區上執行工作所需的許可權。 許可權是透過工作區存取指派,這與一般 UPN (用戶主體名稱) 帳戶類似。

若要執行寫入作業,容量的語意模型工作負載必須 啟用 XMLA 端點以進行讀寫作業。 從 Power BI Desktop 發佈的語意模型應該已啟用增強的 元數據格式 功能。

建立服務主體

服務主體會在 Azure 入口網站 或使用PowerShell建立為應用程式註冊。 建立服務主體時,請務必分別複製並儲存應用程式名稱、應用程式(用戶端)標識碼、目錄(租使用者)標識碼和客戶端密碼。 如需如何建立服務主體的步驟,請參閱:

建立 Microsoft Entra 安全性群組

根據預設,服務主體可以存取其啟用的任何租用戶設定。 根據您的系統管理員設定,存取權可以包含特定安全組或整個組織。

若要限制服務主體存取特定租用戶設定,您可以允許存取特定安全組。 或者,您可以建立服務主體的專用安全組,並將它從所需的租用戶設定中排除。 若要建立安全組並新增服務主體,請參閱 使用 Microsoft Entra ID 建立基本群組和新增成員。

啟用服務主體

您必須先在Power BI 管理員入口網站中啟用服務主體存取,才能開始在Power BI 中使用服務主體。

  1. 移至 Power BI 管理員 入口網站,然後選取 [租用戶設定]。
  2. 捲動至 [ 開發人員設定 ],然後展開 [允許服務主體使用 Power BI API]。
  3. 選取 [啟用] 。
  4. 若要將許可權套用至安全組,請選取 [特定安全組][建議]。
  5. 輸入組名。
  6. 選取套用

顯示已選取租用戶設定 管理員 入口網站的螢幕快照。允許服務主體使用Power BI API已展開,並醒目提示已啟用。

工作區存取

為了讓服務主體具有執行 進階版 工作區和語意模型作業的必要許可權,您必須將服務主體新增為工作區成員或 管理員。這裡將說明在 Power BI 服務 中使用工作區存取,但您也可以使用新增群組使用者 REST API

  1. 在工作區 Power BI 服務 中,選取 [更多>工作區存取]。

    顯示工作區清單的螢幕快照。醒目提示更多圖示和工作區存取權。

  2. 依應用程式名稱搜尋,然後將服務主體新增為 管理員成員至工作區。

    顯示存取對話框的螢幕快照,其中顯示服務主體名稱。已選取 管理員。

XMLA 端點的 連線 字串

建立服務主體之後,請為租用戶啟用服務主體,並將服務主體新增至工作區存取權,以作為 XMLA 端點 連接字串 中的使用者身分識別。 差異在於,您不需要 user idpassword 參數,而是指定應用程式識別碼、租使用者標識碼和應用程式秘密。

Data Source=powerbi://api.powerbi.com/v1.0/myorg/<workspace name>; Initial Catalog=<dataset name>;User ID=app:<appId>@<tenantId>;Password=<app_secret>;

PowerShell

開啟 PowerShell 工作階段以執行下列範例程式代碼。

使用 SQLServer 模組

在下列範例中, AppIdTenantIdAppSecret 是用來驗證語意模型重新整理作業:

Param (
        [Parameter(Mandatory=$true)] [String] $AppId,
        [Parameter(Mandatory=$true)] [String] $TenantId,
        [Parameter(Mandatory=$true)] [String] $AppSecret
       )
$PWord = ConvertTo-SecureString -String $AppSecret -AsPlainText -Force

$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $AppId, $PWord

Invoke-ProcessTable -Server "powerbi://api.powerbi.com/v1.0/myorg/myworkspace" -TableName "mytable" -DatabaseName "mydataset" -RefreshType "Full" -ServicePrincipal -ApplicationId $AppId -TenantId $TenantId -Credential $Credential

分析管理物件 (AMO) 和 ADOMD.NET

當您與用戶端應用程式和 Web 應用程式連線時,可以使用 AMO 和 ADOMD 用戶端連結庫 15.1.42.26 版(2020 年 6 月)和更新版本的可從 NuGet 安裝套件,以支援 連接字串 中的服務主體,方法是使用下列語法:app:AppID和密碼或 cert:thumbprint

在下列範例中, appIDpassword 值可用來執行模型資料庫重新整理作業:

string appId = "xxx";
string authKey = "yyy";
string connString = $"Provider=MSOLAP;Data source=powerbi://api.powerbi.com/v1.0/<tenant>/<workspacename>;Initial catalog=<datasetname>;User ID=app:{appId};Password={authKey};";
Server server = new Server();
server.Connect(connString);
Database db = server.Databases.FindByName("adventureworks");
Table tbl = db.Model.Tables.Find("DimDate");
tbl.RequestRefresh(RefreshType.Full);
db.Model.SaveChanges();