分享方式:


使用服務主體來自動執行 Premium 工作區與語意模型工作

服務主體是在租用戶內建立的 Microsoft Entra ID「應用程式註冊」,其用於執行自動資源與服務等級作業。 服務主體是一種唯一的使用者身分識別,其具有應用程式名稱、應用程式識別碼、租用戶識別碼,以及密碼的「用戶端祕密」或憑證。

Power BI Premium 使用與 Power BI Embedded 相同的服務主體功能。 若要深入了解,請參閱搭配服務主體內嵌 Power BI 內容

在 Power BI Premium 中,您可以將服務主體與 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. 選取套用

工作區存取

為了讓服務主體擁有執行 Premium 工作區與語意模型作業所需的權限,您必須將該服務主體新增為工作區成員或工作區管理員。此處會針對在 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 應用程式連線時,您可以使用 NuGet 中的 AMO 和 ADOMD 用戶端程式庫 15.1.42.26 版 (2020 年 6 月) 和更新版本的可安裝套件來支援連接字串中的服務主體,方法是使用下列語法: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();