Передача параметров в Power BI программно

В моем приложении я показываю отчет Power BI. Это уже работает, поэтому нет проблем с отображением любого отчета по его идентификатору (guid).

Но есть некоторые отчеты, которые необходимо параметризовать, например, с текущим годом или человеком, который просматривает отчет. Это мой вопрос: как это сделать?

Чтобы быть более конкретным, я встраиваю отчет в HTML <iframe> элемент. Я установил в iframe URL-адрес, полученный из определений отчетов. embedUrl (получено от REST API). Я контролирую это с помощью кода JavaScript, который вызывает postMessage(),

Определение отчета:

{
  "id":"12345678-6418-4b47-ac7c-f8ac7791a0aa",
  "name":"Retail Analysis Sample",
  "webUrl":"https://app.powerbi.com/reports/12345678-6418-4b47-ac7c-f8ac7791a0aa",
  "embedUrl":"https://app.powerbi.com/reportEmbed?reportId=12345678-6418-4b47-ac7c-f8ac7791a0aa"
}

Код JavaScript для загрузки отчета:

function onFrameLoaded() {
    var m = {
        action: "loadReport",
        reportId: reportId,
        accessToken: accessToken
    };

    iframe.contentWindow.postMessage(JSON.stringify(m), "*");
}

Теперь я кормлю, чтобы отфильтровать отчет по параметру из моего пользовательского приложения. Есть ли способ отправить или передать значение для фильтрации набора данных в отчете?

2 ответа

Решение

Прежде всего, фильтр должен быть определен в отчете, чтобы пользователь мог установить его вручную.

Существует два возможных способа передачи параметров (таким образом, установить фильтр) в отчет Power BI из внешнего источника.

а) В приложении Power BI

Вы можете указать фильтр, установив filter параметр в URL отчета (в адресной строке браузера). Параметр принимает пользовательский фильтр запроса:

https://app.powerbi.com/groups/me/reports/12345678-6418-4b47-ac7c-f8ac7791a0a7?filter=Store/PostalCode eq '15012'

где "12345678-6418-4b47-ac7c-f8ac7791a0a7" - это идентификатор отчета, а "Store" - это набор данных, а PostalCode - это параметр для фильтрации. "eq" является оператором равенства.

URL должен быть закодирован, поэтому окончательный URL выглядит так:

https://app.powerbi.com/groups/me/reports/12345678-6418-4b47-ac7c-f8ac7791a0a7?filter=Store/PostalCode%20eq%20%2715012%27

б) JavaScript sendMessage параметр oDataFilter

JavaScript (на стороне клиента браузера) управляет загруженным отчетом BI postMessage() вызовы с параметрами (как в вопросе выше). Есть дополнительная опция oDataFilter это может быть установлено для фильтрации отчета.

Установите это так: oDataFilter: "Store/PostalCode eq '15012'"

Полный код будет выглядеть так:

function onFrameLoaded() {
    var m = {
        action: "loadReport",
        reportId: reportId,
        accessToken: accessToken,
        oDataFilter: "Store/PostalCode eq '15012'"
    };

    iframe.contentWindow.postMessage(JSON.stringify(m), "*");
}

замечания

  • В параметрах фильтра (источнике данных или имени параметра) не должно быть точек, поскольку код Power BI автоматически отклоняет его как недопустимые имена;

Microsoft создала powerbi-клиент, с помощью которого вы можете сделать гораздо больше, чем просто применить один фильтр. Вы можете применить столько фильтров, сколько хотите, а также выбрать страницу по умолчанию, фильтры по умолчанию, скрыть панель фильтра, скрыть навигацию по страницам и т. Д.

Вы можете найти клиента здесь: https://microsoft.github.io/PowerBI-JavaScript/

Вот демонстрационное приложение: https://microsoft.github.io/PowerBI-JavaScript/demo/index.html

Вот документация: https://github.com/Microsoft/PowerBI-JavaScript/wiki

Другие вопросы по тегам