為 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 入口網站 中建立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' 資源提供者。 下列步驟會引導您完成此程式。
登入 Azure 入口網站,選取您想要與Log Analytics搭配使用的訂用帳戶,其中包含Log Analytics工作區。 在 [設定] 區段中,選取 [資源提供者],如下圖所示。
在 [資源提供者] 底下搜尋 microsoft.insights。 接著,選取 [註冊]。
設定權限
請確定設定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。
在 Power BI 管理員 入口網站中,移至租使用者 設定 > 稽核和使用方式設定,然後展開工作區系統管理員的 Azure Log Analytics 連線。 若要允許工作區管理員啟用Log Analytics,請將滑桿設定為 [已啟用],並在 [套用至] 下指定所需的安全組,如下圖所示。
在 進階版 工作區中設定記錄
在 進階版 工作區中,工作區管理員可以啟用Log Analytics。 若要這樣做,請移至 設定,如下圖所示。
在 [設定] 窗格中,選取 [Azure 連線],然後展開 [Log Analytics],如下圖所示。
選取 Azure 訂用帳戶[資源群組],然後選取上一節中設定的 Log Analytics 工作區。 然後,選擇 [儲存]。 成功完成時,展開 的租用戶層級Log Analytics 區段看起來應該類似下圖。
中斷 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 事件
針對每個 Discover、 Command 和 Query 要求,會在要求結尾產生名為 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 的整合。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應