power playground parametros microsoft example filter parameter-passing powerbi powerbi-embedded

filter - playground - power bi embedded example



Pasar parámetros al filtro Power BI mediante programación (2)

Microsoft creó un powerbi-client con el que puede hacer mucho más que solo aplicar un filtro. Puede aplicar tantos filtros como desee y también puede elegir la página predeterminada, los filtros predeterminados, ocultar el panel de filtros, ocultar las páginas de navegación, etc.

Puede encontrar el cliente aquí: https://microsoft.github.io/PowerBI-JavaScript/

Aquí hay una aplicación de demostración: https://microsoft.github.io/PowerBI-JavaScript/demo/index.html

Aquí está la documentación: https://github.com/Microsoft/PowerBI-JavaScript/wiki

En mi aplicación, estoy mostrando un informe de Power BI. Ya funciona, por lo que no hay problemas para mostrar cualquier informe por su ID (guid).

Pero hay algunos informes que deben ser parametrizados, por ejemplo, con el año actual o la persona que visualiza el informe. Esa es mi pregunta: ¿cómo hacerlo?

Para ser más específico, estoy incrustando el informe dentro del elemento HTML <iframe> . Establecí la URL iframe a una URL recibida de embedUrl de definición de embedUrl (recibida de la API REST). Lo estoy controlando mediante código JavaScript que llama a postMessage() .

Definición del informe:

{ "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" }

Código JavaScript para cargar el informe:

function onFrameLoaded() { var m = { action: "loadReport", reportId: reportId, accessToken: accessToken }; iframe.contentWindow.postMessage(JSON.stringify(m), "*"); }

Ahora alimentar para filtrar el informe por un parámetro de mi aplicación personalizada. ¿Hay alguna manera de enviar o pasar un valor para filtrar el conjunto de datos en el informe?


En primer lugar, el filtro debe definirse en el informe para que el usuario pueda configurarlo manualmente.

Hay dos formas posibles de pasar parámetros (por lo tanto, establecer filtro) al informe de Power BI desde una fuente externa.

a) En la aplicación Power BI

Puede especificar el filtro configurando el parámetro de filter en la URL del informe (en la barra de direcciones del navegador). El parámetro toma una consulta de filtro personalizada:

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

donde "12345678-6418-4b47-ac7c-f8ac7791a0a7" es una ID de informe, y "Tienda" es un conjunto de datos, y PostalCode es un parámetro que debe filtrarse. "eq" es un operador de igualdad.

La URL debe estar codificada, por lo que la URL final se ve así:

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

b) JavaScript sendMessage parámetro oDataFilter

JavaScript (lado del cliente del navegador) controla el informe de BI cargado mediante postMessage() de postMessage() con parámetros (al igual que en la pregunta anterior). Hay una opción adicional oDataFilter que se puede configurar para filtrar el informe.

oDataFilter: "Store/PostalCode eq ''15012''" : oDataFilter: "Store/PostalCode eq ''15012''"

El código completo se vería así:

function onFrameLoaded() { var m = { action: "loadReport", reportId: reportId, accessToken: accessToken, oDataFilter: "Store/PostalCode eq ''15012''" }; iframe.contentWindow.postMessage(JSON.stringify(m), "*"); }

Observaciones

  • No debe haber ningún punto en los parámetros de filtro (origen de datos o nombre de parámetro) ya que el código de Power BI lo rechaza silenciosamente como nombres no válidos;