You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绕过PIM实现Power Query访问Log Analytics的持久化数据刷新

解决Power BI报表依赖PIM身份访问Log Analytics API的刷新问题

我有一个连接Azure Log Analytics的Power BI报表,当我的PIM(特权身份管理)身份处于激活状态时,报表数据刷新正常;但PIM权限失效后,数据刷新立即停止。当前通过Web API配置数据连接,使用组织账号登录,仅在PIM激活时能正常工作。相关Power Query代码如下:

let
strRangeStart = DateTime.ToText(RangeStart,[Format="yyyy-MM-dd'T'HH:mm:ss'Z'", Culture="en-US"]),
strRangeEnd = DateTime.ToText(RangeEnd,[Format="yyyy-MM-dd'T'HH:mm:ss'Z'", Culture="en-US"]),
 Source = Json.Document(Web.Contents("https://api.loganalytics.io/v1/workspaces/xxxxxx-1554-499b-a4ca-dcde7f3a4a90/query", 
[Query=[#"query"="
SynapseIntegrationPipelineRuns 
| where Level == '''Error'''

| where TimeGenerated >= datetime(" & strRangeStart &") 
| where TimeGenerated < datetime("& strRangeEnd &") 
| project PipelineName, RunId, Start, End, OperationName, Status

",#"x-ms-app"="OmsAnalyticsPBI",#"prefer"="ai.response-thinning=true"],Timeout=#duration(0,0,4,0)])),
TypeMap = #table(
{ "AnalyticsTypes", "Type" }, 
{ 
{ "string",   Text.Type },
{ "int",      Int32.Type },
{ "long",     Int64.Type },
{ "real",     Double.Type },
{ "timespan", Duration.Type },
{ "datetime", DateTimeZone.Type },
{ "bool",     Logical.Type },
{ "guid",     Text.Type },
{ "dynamic",  Text.Type }
}),
DataTable = Source[tables]{0},
Columns = Table.FromRecords(DataTable[columns]),
ColumnsWithType = Table.Join(Columns, {"type"}, TypeMap , {"AnalyticsTypes"}),
Rows = Table.FromRows(DataTable[rows], Columns[name]), 
Table = Table.TransformColumnTypes(Rows, Table.ToList(ColumnsWithType, (c) => { c{0}, c{3}})),
    #"Changed Type" = Table.TransformColumnTypes(Table,{{"End", type datetime}, {"Start", type datetime}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each [End] >= RangeStart and [End] < RangeEnd)
in
    #"Filtered Rows"

可行解决方案

1. 使用服务主体(Service Principal)替代用户身份认证

  • 在Azure AD中创建服务主体,为其分配Log Analytics工作区的**读取者(Reader)**角色(遵循最小权限原则,仅分配必要权限),无需依赖PIM临时激活。
  • 修改Power Query代码,改用服务主体的客户端ID、客户端密钥和租户ID获取OAuth令牌,调用API时携带令牌:
    // 获取服务主体访问令牌
    tokenResponse = Json.Document(Web.Contents("https://login.microsoftonline.com/你的租户ID/oauth2/token", 
        [
            Content=Text.ToBinary("grant_type=client_credentials&client_id=你的客户端ID&client_secret=你的客户端密钥&resource=https://api.loganalytics.io"),
            Headers=[#"Content-Type"="application/x-www-form-urlencoded"]
        ])),
    accessToken = tokenResponse[access_token],
    // 调用Log Analytics API
    Source = Json.Document(Web.Contents("https://api.loganalytics.io/v1/workspaces/xxxxxx-1554-499b-a4ca-dcde7f3a4a90/query", 
        [
            Query=[#"query"="SynapseIntegrationPipelineRuns 
    

| where Level == '''Error'''
| where TimeGenerated >= datetime(" & strRangeStart &")
| where TimeGenerated < datetime("& strRangeEnd &")
| project PipelineName, RunId, Start, End, OperationName, Status",
#"x-ms-app"="OmsAnalyticsPBI", #"prefer"="ai.response-thinning=true"],
Headers=[#"Authorization"="Bearer " & accessToken],
Timeout=#duration(0,0,4,0)
]))

- 注意:将客户端密钥存储到Power BI的数据源凭据中,避免硬编码在代码里。

### 2. 分配永久Log Analytics权限给用户账号
- 若必须使用个人用户身份,可向Azure AD管理员申请为你的账号分配Log Analytics工作区的永久读取权限,无需通过PIM激活。需确保权限符合最小权限原则。

### 3. 配置PIM自动激活或延长激活时长
- 在Azure AD PIM中设置该身份的**自动激活规则**,比如在报表刷新的固定时段自动激活权限,确保刷新时权限有效。
- 或者调整PIM激活时长,设置更长的有效期,减少手动激活的频率。

### 4. 通过Power BI网关进行认证
- 配置本地数据网关或云网关,在网关中存储服务主体或永久权限用户的凭据,报表通过网关执行数据刷新,脱离当前用户的PIM状态限制。

内容的提问来源于stack exchange,提问作者user5767413
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:32:37