共用方式為


為 Power BI 設定 Azure Log Analytics

Power BI 與 Azure Log Analytics 整合,可讓系統管理員和 進階版 工作區擁有者設定其 Power BI 訂用帳戶的 Log Analytics 連線。 本文說明 Log Analytics 與 Power BI 之間的整合如何運作,以及如何為您的環境進行設定。

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

  • 在 Azure 入口網站 中設定您的 Azure 訂用帳戶。
  • 在 Power BI 管理員 入口網站中啟用 Power BI 的 Log Analytics。

下列各節會引導您完成兩者的步驟。

在 [設定] 窗格中開啟 [Azure 連線] 索引卷標的螢幕快照。

必要條件

您必須先在 Azure 入口網站 中建立Log Analytics工作區才能從Power BI 設定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 的 Azure Log Analytics 進階版 工作區。 此設定可讓 Power BI 進階版 工作區系統管理員在符合必要條件時,將其工作區記錄傳送至 Azure Log Analytics。

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

    管理員 入口網站中租用戶設定的螢幕快照。工作區系統管理員的 Azure 記錄分析連線已展開並啟用。

在 進階版 工作區中設定記錄

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

    進階版 工作區中 [設定] 窗格的螢幕快照。

  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 作業。
  • 分析語意模型重新整理持續時間、重疊和處理步驟。
  • 使用 進階版 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 與記錄錄製相關聯的作業。
CorrelationId 相互關聯事件的識別碼。 可用來識別多個資料表之間的相互關聯事件。
PowerBIWorkspaceId 包含所操作成品之工作區的唯一標識碼。
進階版 CapacityId 裝載所操作成品之 進階版 容量的唯一標識符。
ApplicationContext ApplicationContext_s 提供執行要求之應用程式詳細數據的唯一標識碼屬性包。 例如,報表標識碼。
ApplicationName ApplicationName_s 包含建立與伺服器連接之用戶端應用程式的名稱。 此資料行會填入應用程式所傳遞的值,而不是程序顯示的名稱。
ArtifactId 記錄數據之資源的唯一標識碼。
ArtifactKind 記錄作業的成品類型,例如語意模型。
CpuTimeMs CPUTime_s 事件所使用的 CPU 時間量(以毫秒為單位)。
ArtifactName DatabaseName_s 記錄這項作業的Power BI成品名稱。
LogAnalyticsCategory 唯一 事件的類別,例如 Audit/Security/Request。
DatasetMode 語意模型的模式。 Import、DirectQuery 或 Composite。
DurationMs Duration_s 作業所花費的時間量(以毫秒為單位)。
使用者 User_s 與執行中作業相關聯的使用者。 在伺服器上必須模擬使用者身分識別時使用。
執行使用者 EffectiveUsername_s 執行作業的使用者。
OperationDetailName EventSubclass_s 作業的詳細數據。
XmlaObjectPath ObjectPath_s 對象路徑。 以逗號分隔的父代清單,從物件的父系開始。
PowerBIWorkspaceName 包含成品的Power BI工作區名稱。
StatusCode Error_s 作業的狀態代碼。 它涵蓋成功和失敗。
ProgressCounter ProgressTotal_s 進度計數器。
XmlaProperties RequestProperties_s XMLA 要求的屬性。
XmlaSessionId SPID_s Analysis Services 會話標識符。
等級 Severity_s 包含所記錄作業的嚴重性層級。 成功、資訊、警告或錯誤。
身分識別 使用者和宣告的相關信息。
狀態 作業的狀態。
EventText TextData_s 包含與作業相關聯的詳細資訊資訊,例如DAX查詢。
CustomerTenantId 客戶的Power BI租用戶標識碼。
XmlaRequestId RootActivityId_g 要求的唯一標識碼。
ReplicaId 複本識別碼,可讓您在啟用查詢相應放大 (QSO)識別複本。 讀寫複本一律具有 ReplicaId='AAA',而只讀複本的 ReplicaId 會從 'AAB' 開始。 對於啟用非 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 執行的總持續時間。
datasource 連線 ionThrottleTimeMs 達到數據源連線限制之後的總節流時間。 在這裡深入瞭解並行連線上限。
directQuery 連線 ionTimeMs 在要求期間建立新 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 與外部數據源查詢相關聯的逾時。
表格式 連線 ionTimeoutMs 與外部表格式數據源連線相關聯的逾時(e.g. SQL)。
refreshParallelism 要求中使用的有效 MaxParallelism。
vertipaqTotalRows 重新整理作業期間 Vertipaq 引擎所處理的數據列總數。
queryResultRows DAX 查詢結果傳回的數據列總數。
directQueryTotalRows 從各種 DirectQuery 查詢讀取的數據列總數。
directQueryRequestCount DAX 引擎所執行的 DirectQuery 儲存引擎查詢總數。
errorCount 目前要求的錯誤總數。
qsoReplicaVersion 啟用 QSO 的語意模型複本版本,以 FILETIME 格式表示。
intendedUsage 預定使用方式:預設值 (0):已排程或 API 重新整理 (1):隨選重新整理 (2):儀錶板磚/查詢快取重新整理 (3)
discoverType 用戶端所要求的探索類型。 如需探索類型清單,請參閱 EventSubclass
queryDialect 方言客戶端的類型已用來查詢伺服器:未知(-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 的整合。