為 Power BI 設定 Azure Log Analytics

Power BI 與 Azure Log Analytics 整合,可讓管理員和 Premium 工作區擁有者設定 Log Analytics 與其 Power BI 訂用帳戶的連線。 本文描述 Log Analytics 與 Power BI 之間的整合如何運作,以及如何為您的環境設定該整合。

有兩個元素,讓 Azure Log Analytics 適用於 Power BI:

  • 在 Azure 入口網站中設定您的 Azure 訂用帳戶。
  • 在 Power BI 管理入口網站中為 Power BI 啟用記錄分析。

下列各節會引導您完成執行這兩個動作的步驟。

螢幕擷取畫面顯示在 [設定] 窗格中開啟的 [Azure 連線] 索引標籤。

必要條件

在可以從 Power BI 設定 Log Analytics 整合之前,您必須在 Azure 入口網站中建立 Log Analytics 工作區。 您也必須在 Azure 中授與 Power BI 服務寫入記錄的權限。 確切的需求如下:

  • Azure 訂用帳戶的參與者存取權。
  • 在您將收集 Power BI 記錄資料的 Azure 訂用帳戶中註冊 'microsoft.insights' 資源提供者。
  • 在 Power BI 中設定 Log Analytics 整合的使用者必須具備 Log Analytics 工作區的 Log Analytics 參與者角色。 如果無法提供擁有者角色,請參閱常見問題以取得因應措施。

啟用 'microsoft.insights' 資源提供者

Log Analytics 需要在 Azure 訂用帳戶層級啟用 'microsoft.insights' 資源提供者。 下列步驟會引導您完成此流程。

  1. 登入 Azure 入口網站、選取您想要搭配 Log Analytics 使用的訂用帳戶,其中包含您的 Log Analytics 工作區。 在 [設定] 區段中,選取 [資源提供者],如下圖所示。

    設定功能表選項的螢幕擷取畫面,其中已選取資源提供者。

  2. 在 [資源提供者] 底下搜尋 microsoft.insights。 接著,選取 [註冊]

    主要窗格中資源提供者的螢幕擷取畫面,其中已註冊 Microsoft.insights。

設定權限

  1. 確定設定 Log Analytics 整合的使用者具有 Log Analytics 工作區的 Log Analytics 參與者角色。 當您在 Azure 入口網站中為訂用帳戶選取 [存取控制 (IAM)],然後從面板中的頂端選取項目選取 [角色指派] 時,目前使用者必須看到一個項目:設定 Log Analytics 的使用者具有 Log Analytics 參與者

    [存取控制] 窗格的螢幕擷取畫面,其中已醒目提示角色。

在您完成這些步驟之後,Azure Log Analytics 設定部分就完成了。 下一節說明如何在 Power BI 管理入口網站中繼續並完成設定。

允許從管理入口網站進行工作區層級記錄

Power BI 管理員必須完成下列步驟,才能為 Power BI Premium 工作區啟用 Azure Log Analytics。 此設定可讓 Power BI Premium 工作區管理員在符合了必要條件時,將其工作區記錄傳送至 Azure Log Analytics。

  1. Power BI 管理入口網站中,移至 [租用戶設定] > [稽核與使用方式設定],然後展開 [工作區管理員的 Azure Log Analytics 連線]。 若要允許工作區管理員啟用 Log Analytics,請將滑桿設定為 [已啟用],並在 [套用至] 底下指定所需的安全性群組,如下圖所示。

    管理入口網站中租用戶設定的螢幕擷取畫面。工作區管理員的 Azure Log Analytics 連線已展開並啟用。

在 Premium 工作區中設定記錄

  1. Premium 工作區中,工作區管理員可以啟用 Log Analytics。 若要這樣做,請移至 [設定],如下圖所示。

    Premium 工作區中 [設定] 窗格的螢幕擷取畫面。

  2. 在 [設定] 窗格中,選取 [Azure 連線],然後展開 [Log Analytics],如下圖所示。

    螢幕擷取畫面顯示在 [設定] 窗格中開啟的 [Azure 連線] 索引標籤,其中 Log Analytics 已展開。

  3. 選取 Azure 訂用帳戶、資源群組,然後選取上一節中設定的 Log Analytics 工作區。 然後,選擇 [儲存]。 成功完成時,展開的 [租用戶層級 Log Analytics] 區段應該看起來類似下圖。

    螢幕擷取畫面顯示在 [設定] 窗格中開啟的 [Azure 連線] 索引標籤,其中顯示範例資訊。

中斷 Azure Log Analytics 連線

您可以從 Azure Log Analytics 中斷連線,以停止將記錄傳送至 Azure。 若要中斷連線,請在 [Power BI 工作區設定] 中移至 [Log Analytics] 設定。 選取 [從 Azure 中斷連線]。 然後選擇 [儲存] 以中斷連線。

[設定] 窗格上中斷連線警告的螢幕擷取畫面。

注意

中斷 Power BI 工作區與 Azure Log Analytics 的連線時,不會刪除記錄。 您的資料會保留,並遵循您在那裡設定的儲存和保留原則。

使用方式情節

Azure Log Analytics 和 Power BI 有許多方法可協助您的組織解決現實挑戰。 請考慮下列事項:

  • 依容量、工作區、報表或使用者識別高或不尋常的 Analysis Services 引擎活動期間。
  • 分析查詢效能和趨勢,包括外部 DirectQuery 作業。
  • 分析語意模型重新整理持續時間、重疊和處理步驟。
  • 使用 Premium XMLA 端點分析傳送的自訂作業。

在 Power BI 社群中向我們傳送意見反應,以了解您如何使用記錄,以及其如何協助您的組織。

錯誤狀況和解決方式

下表集合了常見錯誤、觸發這些錯誤的事件或設定,以及建議的解決方案。

觸發條件 類型 訊息
您沒有寫入 Log Analytics 工作區的權限 錯誤 - 無法繼續 您需要此 Log Analytics 工作區的寫入權限,才能將其連線至 Power BI。 請連絡貴組織中管理 Azure 訂用帳戶的人員,以修正此問題。
您沒有寫入 Log Analytics 工作區帳戶的權限 錯誤 - 無法繼續 您需要此 Log Analytics 工作區的寫入權限,才能將其連線至 Power BI。
您無權存取任何 Azure 訂用帳戶 錯誤 - 無法繼續 您無權存取任何 Azure 訂用帳戶。 請要求貴組織中管理 Azure 訂用帳戶的人員,為您授與參與者存取權或更高的權限。
您無權存取該訂用帳戶內的任何 Azure Log Analytics 工作區 錯誤 - 無法繼續 您無權存取 Azure Log Analytics 工作區。 請要求貴組織中管理 Azure 訂用帳戶的人員,將您新增為 Log Analytics 擁有者或參與者角色。
嘗試連線時工作區層級 Log Analytics 已停用 資訊 請要求您的租用戶系統管理員,授與工作區系統管理員連線 Log Analytics 工作區的權限。
嘗試中斷連線時工作區層級 Log Analytics 已停用 資訊 您的租用戶系統管理員已撤銷工作區系統管理員連線至其自己 Azure Log Analytics 工作區的權限。 如果中斷連線,您無法連線至另一個工作區。

事件與結構描述

在您啟用 Azure Log Analytics 之後,其會開始記錄下列事件類別。 如需這些事件的詳細資訊,請參閱 Analysis Services 追蹤事件

  • AggregateTableRewriteQuery
  • Command
  • 鎖死
  • DirectQuery
  • 發現卡
  • 錯誤
  • ProgressReport
  • 查詢
  • 工作階段初始化
  • VertiPaqSEQuery
  • 通知

下表描述這些結構描述

屬性 現有的 Azure Analysis Services 屬性 描述
TimeGenerated 產生記錄時的時間戳記 (UTC)。
OperationName EventClass_s 與記錄相關聯的 Analysis Services 追蹤事件。 如需每個類別可能事件的詳細資料,請參閱追蹤事件文件頁面。
CorrelationId 相互關聯事件的識別碼。 可用來識別多個資料表之間的相互關聯事件。
PowerBIWorkspaceId 包含操作所在成品的工作區唯一識別碼。
PremiumCapacityId 裝載操作所在成品的 Premium 容量唯一識別碼。
ApplicationContext ApplicationContext_s 唯一識別碼的屬性包,其中提供執行要求的應用程式詳細資料。 例如,報表識別碼。
ApplicationName ApplicationName_s 包含已建立伺服器連線的用戶端應用程式名稱。 此資料行會填入應用程式所傳遞的值,而不是顯示的程式名稱。
ArtifactId 記錄資料的資源唯一識別碼。
ArtifactKind 記錄作業的成品類型,例如語意模型。
CpuTimeMs CPUTime_s 事件所使用的 CPU 時間量 (以毫秒為單位)。
ArtifactName DatabaseName_s 記錄這項作業的 Power BI 成品名稱。
LogAnalyticsCategory 唯一 與記錄相關聯的 Analysis Services 追蹤事件類別目錄。 如需可能事件類別目錄的詳細資料,請參閱追蹤事件文件頁面。
DatasetMode 語意模型的模式。 Import、DirectQuery 或 Composite。
DurationMs Duration_s 作業所需的時間量 (以毫秒為單位)。
使用者 User_s 與執行中作業相關聯的使用者。 必須在伺服器上模擬終端使用者身分識別時使用。
ExecutingUser EffectiveUsername_s 執行作業的使用者。
OperationDetailName EventSubclass_s 與記錄相關聯的 Analysis Services 追蹤事件的詳細資訊。 如需可能值的詳細資訊,請參閱追蹤事件文件頁面的 [子類別] 屬性,例如命令開始
XmlaObjectPath ObjectPath_s 物件路徑。 以逗號分隔的父系清單,開頭為物件的父系。
PowerBIWorkspaceName 包含成品的 Power BI 工作區名稱。
StatusCode Error_s 作業的狀態碼。 其涵蓋成功和失敗。
ProgressCounter ProgressTotal_s 進度計數器。
XmlaProperties RequestProperties_s XMLA 要求的屬性。
XmlaSessionId SPID_s Analysis Services 工作階段識別項。
等級 Severity_s 包含所記錄作業的嚴重性層級。 Success、Informational、Warning 或 Error。
身分識別 使用者和宣告的相關資訊。
狀態 作業的狀態。
EventText TextData_s 包含與作業相關聯的詳細資訊,例如 DAX 查詢。
CustomerTenantId 客戶的 Power BI 租用戶識別碼。
XmlaRequestId RootActivityId_g 要求的唯一識別碼。
ReplicaId 啟用查詢擴增 (QSO) 時將讓您識別複本的複本識別碼。 讀寫複本一律具有 ReplicaId='AAA',而唯讀複本具有從 'AAB' 開始的 ReplicaId。 對於啟用非 QSO 的語意模型,ReplicaId 一律為 'AAA'

ExecutionMetrics 事件

對於每個 DiscoverCommandQuery 要求,都會在要求結束時產生名為 ExecutionMetrics 的事件。 此事件包含要求的執行計量,其可協助您更有效地診斷和疑難排解。 ExecutionMetrics 追蹤與最接近的 [Discover|Command|Query]End 事件相互關聯。

下列 KQL 查詢會針對語意模型最後一天的所有重新整理作業擷取 ExecutionMetrics 事件:

let commands = PowerBIDatasetsWorkspace
    | where TimeGenerated > ago(1d)
    | where ArtifactId =~ "[Semantic Model Id]"
    | where OperationName in ("CommandEnd")
    | where EventText contains "<Refresh"
    | project TimeGenerated, ArtifactId, CommandOperationName = OperationName, XmlaRequestId, CorrelationId, CommandText = EventText;
let executionMetrics = PowerBIDatasetsWorkspace        
    | where OperationName == "ExecutionMetrics"
    | project TimeGenerated, XmlaRequestId, CorrelationId, EventText;
commands
| join kind=leftouter executionMetrics on XmlaRequestId

下列 KQL 查詢會依工作區、項目和使用者擷取最後一天節流的事件:

let executionMetrics = PowerBIDatasetsWorkspace
    | where TimeGenerated > ago(1d)    
    | where OperationName == "ExecutionMetrics"    
    | extend eventTextJson = parse_json(EventText)      
    | extend capacityThrottlingMs=toint(eventTextJson.capacityThrottlingMs)
    | where capacityThrottlingMs > 0;
let commands = PowerBIDatasetsWorkspace    
    | where OperationName in ("CommandEnd", "QueryEnd", "DiscoverEnd")    
    | project
        TimeGenerated,
        ExecutingUser,
        ArtifactId,
        PowerBIWorkspaceId,
        CommandOperationName = OperationName,
        XmlaRequestId,
        CorrelationId,
        CommandText = EventText;
commands
| join kind=inner executionMetrics on XmlaRequestId
| project
    TimeGenerated,
    ArtifactId,
    PowerBIWorkspaceId,
    ExecutingUser,
    CommandOperationName,
    XmlaRequestId,
    EventText,
    CommandText,
    capacityThrottlingMs
| summarize countThrottling = count(), avgThrottlingDuration = avg(capacityThrottlingMs) by PowerBIWorkspaceId, ArtifactId, ExecutingUser, CommandOperationName

統計資料會在 EventText 屬性中以 JSON 文字表示。請參閱下列範例。

{
    "timeStart": "2024-03-20T12:39:59.681Z",
    "timeEnd": "2024-03-20T13:01:14.241Z",
    "durationMs": 1274559,    
    "vertipaqJobCpuTimeMs": 156,
    "mEngineCpuTimeMs": 9617484,
    "totalCpuTimeMs": 9618469,
    "executionDelayMs": 10,
    "approximatePeakMemConsumptionKB": 1683409,
    "mEnginePeakMemoryKB": 1676816,
    "tabularConnectionTimeoutMs": 18000000,    
    "refreshParallelism": 16,
    "vertipaqTotalRows": 114,
    "intendedUsage": 2
}

下表描述所有可能的屬性。 並非每個屬性都會在每個事件中發出,因為內容將取決於要求和語意模型。

屬性 說明
timeStart 要求啟動時的時間戳記 (UTC)。
timeEnd 要求結束時的時間戳記 (UTC)。
durationMs 執行的總持續時間。
datasourceConnectionThrottleTimeMs 達到資料來源連線限制之後的總節流時間。 在這裡深入了解並行連線數上限。
externalQueryExecutionTimeMs 在要求期間執行所有外部資料源查詢所花費的總時間。
directQueryConnectionTimeMs 在要求期間建立新 DirectQuery 連線所花費的總時間
directQueryIterationTimeMs 逐一查看 DirectQuery 查詢所傳回結果所花費的總時間。
directQueryTotalTimeMs 在要求期間執行和讀取所有 DirectQuery 查詢所花費的總時間。
executionDelayMs 等候 Analysis Services 引擎執行緒集區執行緒可用性所花費的總時間。
totalCpuTimeMs 要求的總 CPU 時間。
vertipaqJobCpuTimeMs Vertipaq 引擎所花費的總 CPU 時間。
mEngineCpuTimeMs PowerQuery 引擎所花費的總 CPU 時間。
queryProcessingCpuTimeMs Analysis Services 查詢執行緒集區執行緒上工作所花費的總 CPU 時間。
approximatePeakMemoryConsumptionKB 要求期間的大約尖峰總記憶體使用量。
mEnginePeakMemoryKB 所有 PowerQuery 引擎混搭容器的大約尖峰記憶體認可大小 (以 KB 為單位)。
directQueryTimeoutMs 與 DirectQuery 查詢相關聯的逾時。
externalQueryTimeoutMs 與外部資料來源查詢相關聯的逾時。
tabularConnectionTimeoutMs 與外部表格式資料來源連線 (例如 SQL) 相關聯的逾時。
refreshParallelism 要求中使用的有效 MaxParallelism。
vertipaqTotalRows 重新整理作業期間 Vertipaq 引擎所處理的資料列總數。
queryResultRows 由於 DAX 查詢而傳回的資料列總數。
directQueryTotalRows 從各種 DirectQuery 查詢讀取的資料列總數。
directQueryRequestCount DAX 引擎所執行的 DirectQuery 儲存體引擎查詢總數。
errorCount 目前要求的錯誤總數。
qsoReplicaVersion 啟用 QSO 的語意模型複本版本,以 FILETIME 格式表示。
intendedUsage 預定的使用方式:預設值 (0);已排程或 API 重新整理 (1);隨選重新整理 (2);儀表板磚/查詢快取重新整理 (3)
commandType 用戶端要求的 Analysis Services 命令類型 (例如,批次、陳述式、備份...)
discoverType 用戶端所要求的探索類型。 如需探索類型的清單,請參閱 EventSubclass
queryDialect 用戶端已用來查詢伺服器的方言類型:Unknown (-1);MDX (0);DMX (1);SQL (2);DAX (3);JSON (4)
capacityThrottlingMs 要求由於容量節流而延遲的總時間。 在這裡深入了解節流。
  • 所有持續時間和 CPU 時間都是以毫秒為單位表示。
  • 可能遇到上表所述以外的其他屬性,這些屬性應被視為未記錄且可能會變更。

範例 Log Analytics KQL 查詢

當您搭配 Power BI 使用 Azure Log Analytics 時,下列範例查詢集合可能很有幫助。 其可以直接在 Azure 入口網站中或透過 API 執行,以查詢最新的資料,通常指大約 5-10 分鐘內的資料。

// log count per day for last 30d
PowerBIDatasetsWorkspace
| where TimeGenerated > ago(30d)
| summarize count() by format_datetime(TimeGenerated, 'yyyy-MM-dd')


// average query duration by day for last 30d
PowerBIDatasetsWorkspace
| where TimeGenerated > ago(30d)
| where OperationName == 'QueryEnd'
| summarize avg(DurationMs) by format_datetime(TimeGenerated, 'yyyy-MM-dd')


//query duration percentiles for a single day in 1 hour bins
PowerBIDatasetsWorkspace
| where TimeGenerated >= todatetime('2021-04-28') and TimeGenerated <= todatetime('2021-04-29')
| where OperationName == 'QueryEnd'
| summarize percentiles(DurationMs, 0.5, 0.9) by bin(TimeGenerated, 1h)


// refresh durations by workspace and semantic model for last 30d
PowerBIDatasetsWorkspace
| where TimeGenerated > ago(30d)
| where OperationName == 'CommandEnd'
| where ExecutingUser contains 'Power BI Service'
| where EventText contains 'refresh'
| project PowerBIWorkspaceName, DatasetName = ArtifactName, DurationMs

// query count, distinctUsers, avgCPU, avgDuration by workspace for last 30d
PowerBIDatasetsWorkspace  
| where TimeGenerated > ago(30d)
| where OperationName == "QueryEnd" 
| summarize QueryCount=count()
    , Users = dcount(ExecutingUser)
    , AvgCPU = avg(CpuTimeMs)
    , AvgDuration = avg(DurationMs)
by PowerBIWorkspaceId

範例 Power BI 報表範本

使用 GitHub 上的開放原始碼 Power BI 報表範本,探索並取得 Azure Log Analytics Power BI 資料的見解。

下列文章可協助您深入了解 Power BI,以及其與 Azure Log Analytics 的整合。