Отчет PowerBi-Javascript, встраивающий сведения о кластере, ошибка 403

Я пытаюсь отобразить отчет power bi в приложении для машинописного текста.

Я успешно получил токен доступа от AAD и могу использовать его через power bi rest api. Я хотел бы иметь возможность использовать PowerBi-Javascript для чистоты и возможности применять фильтры. Но я получаю ошибку 403 каждый раз при вызове https://api.powerbi.com/powerbi/globalservice/v201606/clusterdetails с надписью «TokenExpired» - даже если токен только что сгенерирован и должен быть действителен не менее часа.

Код для встраивания отчета выглядит так:

private embedReport(accessToken: string): powerBiClient.Embed {
  const element = this.getDisplayElement();
  const reportId = this.getReportId();
  const config = {
    type: 'report',
    id: reportId,
    tokenType: powerBiClient.models.TokenType.Aad,
    accessToken: accessToken
  };
  return this.powerBiService.embed(element, config);

getDisplayElement возвращает соответствующий HTMLElement, getReportId идентификатор отчета для отображения, powerBiClient - это импорт powerbi-javascript, а powerBiService - экземпляр powerBiClient.service.Service.

Я попытался сделать это с отчетами, которые у меня есть, и с отчетами в группе (добавив groupId в конфигурацию).

Как исправить эту ошибку?


person meta    schedule 20.12.2018    source источник
comment
Если вы пытаетесь сделать больше, чем просто встроить отчет, это не ясно из вопроса. Что это за API-интерфейс clusterdetails? Раньше я этого не видел, но без проблем могу встраивать отчеты и отдельные визуализации.   -  person mft25    schedule 23.12.2018


Ответы (2)


Похоже, вам не хватает параметра embedUrl в конфигурации (см. этот пример из документации). Это возвращается из REST API Power BI, например, в получать отчеты API.

person mft25    schedule 23.12.2018

Я сделал это с помощью Angular 7 следующим образом.

Компонент:

showReport() {
 let accessToken = 'your access token’;
   // Embed URL
   let embedUrl = 'your embed URL';
   // Report ID
   let embedReportId = 'your embed report ID';
   let config = {
     type: 'report',
     pageName: 'aaa',
     name: 'Chamila',
     accessToken: accessToken,
     embedUrl: embedUrl,
     id: embedReportId,
     permissions: pbi.models.Permissions.All,
     viewMode: pbi.models.ViewMode.Edit,
     settings: {
       localeSettings: {
         language: "en",
         formatLocale: "es"
       },
     }
   };
   // Grab the reference to the div HTML element that will host the report.
   let reportContainer = <HTMLElement>document.getElementById('reportContainer');
   // Embed the report and display it within the div container.
   let powerbi = new pbi.service.Service(pbi.factories.hpmFactory, pbi.factories.wpmpFactory, pbi.factories.routerFactory);
   let report = powerbi.embed(reportContainer, config);
 }

HTML:

<div id="reportContainer"></div>

Замените соответствующий токен доступа, добавьте URL-адрес и идентификатор отчета. У меня он отлично работает.

person Chamila Maddumage    schedule 18.03.2019