Подтвердить что ты не робот

Передача параметров в фильтр Power BI программно

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

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

Чтобы быть более конкретным, я встраиваю отчет в элемент HTML <iframe>. Я установил URL-адрес 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), "*");
}

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

4b9b3361

Ответ 1

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

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

a) В приложении 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" является идентификатором отчета, а "Хранить" - это набор данных, а PostalCode - это параметр, подлежащий фильтрации. "eq" - оператор равенства.

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

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

b) Параметр 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 отклоняет его молча как недопустимые имена;

Ответ 2

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

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

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

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