Передача параметров в 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