使用 Azure 自動化重新整理

藉由使用 Azure 自動化 和 PowerShell Runbook,您可以在 Azure 分析方格式模型上執行自動化的資料重新整理作業。

本文中的範例會使用 SqlServer PowerShell 模組 。 本文稍後會提供示範重新整理模型的範例 PowerShell Runbook。

驗證

所有呼叫都必須使用有效的 Microsoft Entra ID (OAuth 2) 權杖進行驗證。 本文中的範例會使用服務主體 (SPN) 向 Azure Analysis Services 進行驗證。 若要深入瞭解,請參閱 使用 Azure 入口網站 建立服務主體。

必要條件

重要

下列範例假設 Azure Analysis Services 防火牆已停用。 如果已啟用防火牆,要求啟動器的公用 IP 位址必須包含在防火牆規則中。

  1. 在您的Azure 自動化帳戶中,按一下 [模組 ],然後按一下 [ 流覽資源庫 ]。

  2. 在搜尋列中,搜尋 SqlServer

    Search Modules

  3. 選取 [SqlServer],然後按一下 [ 匯入 ]。

    Import Module

  4. 按一下 [確定]

建立服務主體 (SPN)

若要瞭解如何建立服務主體,請參閱 使用 Azure 入口網站 建立服務主體。

在 Azure Analysis Services 中設定許可權

您建立的服務主體在伺服器上必須具有伺服器管理員許可權。 若要深入瞭解,請參閱 將服務主體新增至伺服器管理員角色

設計 Azure 自動化 Runbook

  1. 在自動化帳戶中,建立 認證資源,以用來安全地儲存服務主體。

    Screenshot that shows the

  2. 輸入認證的詳細資料。 在 [ 使用者名稱] 中,輸入服務主體應用程式識別碼 (appid),然後在 [ 密碼 ] 中輸入服務主體密碼。

    Create credential

  3. 匯入自動化 Runbook。

    Screenshot that shows the

  4. 流覽 Refresh-Model.ps1 檔案、提供 [名稱 ] 和 [描述 ],然後按一下 [ 建立 ]。

    注意

    使用本檔底部範例 PowerShell Runbook 區段的腳本 來建立名為 Refresh-Model.ps1 的檔案,並儲存至本機電腦以匯入 Runbook。

    Import Runbook

  5. 建立 Runbook 之後,它會自動進入編輯模式。 選取發行

    Publish Runbook

    注意

    先前建立的認證資源是由 Runbook 使用 Get-AutomationPSCredential 命令擷取。 此命令接著會傳遞至 Invoke-ProcessASADatabase PowerShell 命令,以對 Azure Analysis Services 執行驗證。

  6. 按一下 [啟動 ] 以測試 Runbook。

    Screenshot that shows the

  7. 填寫 DATABASENAME ANALYSISSERVER REFRESHTYPE 參數,然後按一下 [ 確定 ]。 當 Runbook 手動執行時,不需要 WEBHOOKDATA 參數。

    Start the Runbook

如果 Runbook 執行成功,您會收到如下的輸出:

Successful Run

使用獨立Azure 自動化 Runbook

Runbook 可以設定為依排程觸發 Azure Analysis Services 模型重新整理。

這可以設定如下:

  1. 在自動化 Runbook 中,按一下 [ 排程],然後按一下 [ 新增排程 ]。

    Create schedule

  2. 按一下 [ 排程 > ] [建立新的排程 ],然後填入詳細資料。

    Configure schedule

  3. 按一下 [建立]。

  4. 填入排程的參數。 每次 Runbook 觸發時,都會使用這些參數。 透過排程執行時,WEBHOOKDATA 參數應該保留空白。

    Configure parameters

  5. 按一下 [確定]

使用 Data Factory 取用

若要使用 Azure Data Factory 取用 Runbook,請先 建立 Runbook 的 Webhook Webhook 將提供可透過 Azure Data Factory Web 活動呼叫的 URL。

重要

若要建立 Webhook,Runbook 的狀態必須是 已發佈

  1. 在您的自動化 Runbook 中,按一下 [Webhook] ,然後按一下 [ 新增 Webhook ]。

    Add Webhook

  2. 為 Webhook 提供名稱和到期日。 名稱只會識別自動化 Runbook 內的 Webhook,它不會構成 URL 的一部分。

    警告

    在關閉精靈之前,請確定您先複製 URL,因為一旦關閉,就無法返回該 URL。

    Configure Webhook

    Webhook 的參數可以保持空白。 設定 Azure Data Factory Web 活動時,參數可以傳遞至 Web 呼叫的主體。

  3. 在 Data Factory 中,設定 Web 活動

範例

Example Web Activity

URL 是從 Webhook 建立的 URL。

本文 是 JSON 檔,應該包含下列屬性:

屬性
AnalysisServicesDatabase Azure Analysis Services 資料庫的名稱
範例:AdventureWorksDB
AnalysisServicesServer Azure Analysis Services 伺服器名稱。
範例: https://westus.asazure.windows.net/servers/myserver/models/AdventureWorks/
DatabaseRefreshType 要執行的重新整理類型。
範例:完整

範例 JSON 主體:

{
    "AnalysisServicesDatabaseName": "AdventureWorksDB",
    "AnalysisServicesServer": "asazure://westeurope.asazure.windows.net/MyAnalysisServer",
    "DatabaseRefreshType": "Full"
}

這些參數定義于 Runbook PowerShell 腳本中。 執行 Web 活動時,傳遞的 JSON 承載為 WEBHOOKDATA。

這會還原序列化並儲存為 PowerShell 參數,然後由 Invoke-ProcessASDatabase PowerShell 命令使用。

Deserialized Webhook

搭配 Azure Analysis Services 使用混合式背景工作角色

具有靜態公用 IP 位址的 Azure 虛擬機器可用來作為混合式背景工作角色Azure 自動化。 然後,此公用 IP 位址可以新增至 Azure Analysis Services 防火牆。

重要

確定虛擬機器公用 IP 位址已設定為靜態。

若要深入瞭解如何設定Azure 自動化混合式背景工作角色,請參閱 混合式 Runbook 背景工作角色安裝

設定混合式背景工作角色之後,請建立 Webhook,如使用 Data Factory 取用一節 中所述。 這裡唯一的差異在於設定 Webhook 時,選取 [在混合式背景工作 角色上 > 執行] 選項。

使用混合式背景工作角色的範例 Webhook:

Example Hybrid Worker Webhook

範例 PowerShell Runbook

下列程式碼片段是如何使用 PowerShell Runbook 執行 Azure Analysis Services 模型重新整理的範例。

param
(
    [Parameter (Mandatory = $false)]
    [object] $WebhookData,

    [Parameter (Mandatory = $false)]
    [String] $DatabaseName,
    [Parameter (Mandatory = $false)]
    [String] $AnalysisServer,
    [Parameter (Mandatory = $false)]
    [String] $RefreshType
)

$_Credential = Get-AutomationPSCredential -Name "ServicePrincipal"

# If runbook was called from Webhook, WebhookData will not be null.
if ($WebhookData)
{ 
    # Retrieve AAS details from Webhook request body
    $atmParameters = (ConvertFrom-Json -InputObject $WebhookData.RequestBody)
    Write-Output "CredentialName: $($atmParameters.CredentialName)"
    Write-Output "AnalysisServicesDatabaseName: $($atmParameters.AnalysisServicesDatabaseName)"
    Write-Output "AnalysisServicesServer: $($atmParameters.AnalysisServicesServer)"
    Write-Output "DatabaseRefreshType: $($atmParameters.DatabaseRefreshType)"
    
    $_databaseName = $atmParameters.AnalysisServicesDatabaseName
    $_analysisServer = $atmParameters.AnalysisServicesServer
    $_refreshType = $atmParameters.DatabaseRefreshType
 
    Invoke-ProcessASDatabase -DatabaseName $_databaseName -RefreshType $_refreshType -Server $_analysisServer -ServicePrincipal -Credential $_credential
}
else 
{
    Invoke-ProcessASDatabase -DatabaseName $DatabaseName -RefreshType $RefreshType -Server $AnalysisServer -ServicePrincipal -Credential $_Credential
}

下一步

範例
REST API