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

Angular集成Power BI自定义错误处理无法获取error.level解决方法

Power BI 嵌入错误事件无法获取level属性解决方案

问题复现

参考微软官方Power BI嵌入自定义错误处理相关文档,在Angular应用的Power BI组件中实现错误监听逻辑,原有设计为通过错误level字段判断是否为致命错误,非致命错误走自动重试逻辑,重试超限后展示错误提示。核心实现代码如下:

this.report.on('error', (event: any) => {
  const error = event.detail;
  console.log("event",event)
  // 非致命错误时记录日志并执行后续处理
  if (error.level !== pbi.models.TraceType.Fatal) {
    console.error(error);

    if (this.retryCount < this.maxRetryCount) {
      this.retryCount++;
      this.isReady = false;
      setTimeout(() => {
        this.loadReport(ReportDashboardConfig);
      }, this.retryCount * 500);
    } else {
      this.isError = true;
    }
  }
})

实际触发错误时,event.detail中不存在level属性,实际返回结构如下:

{
  "message": "QueryUserError",
  "detailedMessage": "Can't display the visual.. Could not render a report visual titled: undefined",
  "technicalDetails": {
    "requestId": "Some value here"
  }
}

原因说明

  • 核心问题是混淆了Power BI嵌入客户端的两类错误事件:
    • error事件:上报报表渲染、查询、可视化加载这类非框架级别的普通错误,这类错误本身就不属于致命错误,事件detail不会返回level字段,返回结构就是你实际拿到的格式,包含错误标识、详细提示、请求ID三个核心部分。
    • fatal事件:上报嵌入框架初始化失败、连接断开、鉴权失效这类会导致整个报表完全无法加载的致命错误,只有这类事件的detail会携带level字段,对应pbi.models.TraceType的枚举值。
  • 原有逻辑把所有错误都放在error事件回调里判断level,自然拿不到对应字段。

修正方案

拆分两类事件的监听逻辑,不要在普通error事件中判断level:

  • 单独监听fatal事件处理致命错误,这类错误出现后一般无法通过重载报表恢复,直接展示错误提示即可
  • 普通error事件捕获的都是非致命错误,直接根据业务需求判断是否走重试逻辑即可,不需要校验level字段

修正后的参考代码:

// 处理致命错误
this.report.on('fatal', (event: any) => {
  const fatalError = event.detail;
  console.error('Power BI嵌入致命错误:', fatalError);
  this.isError = true;
  this.isReady = false;
  // 可根据fatalError.level做细分处理
})

// 处理普通非致命错误
this.report.on('error', (event: any) => {
  const commonError = event.detail;
  console.error('Power BI报表普通错误:', commonError);
  
  // 可根据commonError.message过滤不需要重试的错误类型,比如配置类错误重试也无法解决
  if (this.retryCount < this.maxRetryCount) {
    this.retryCount++;
    this.isReady = false;
    setTimeout(() => {
      this.loadReport(ReportDashboardConfig);
    }, this.retryCount * 500);
  } else {
    this.isError = true;
  }
})

补充说明:你遇到的QueryUserError属于查询类错误,常见原因包括数据集权限不足、查询超时、可视化组件配置错误,如果多次重试仍然报错,优先排查报表本身的配置和权限,不要盲目增加重试次数。

内容的提问来源于stack exchange,提问作者schwifty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:39:18