web-dev-qa-db-fra.com

Passer des paramètres au filtre Power BI par programmation

Dans mon application, j'affiche un rapport Power BI. Il fonctionne déjà, il n'y a donc aucun problème à afficher un rapport par son ID (guid).

Mais certains rapports doivent être paramétrés, par exemple, avec l'année en cours ou la personne qui consulte le rapport. C'est ma question: comment faire?

Pour être plus précis, j'incorpore le rapport à l'intérieur de l'élément HTML <iframe>. J'ai défini l'URL iframe sur une URL reçue de la définition de rapport embedUrl (reçue de REST). Je la contrôle par du code JavaScript qui appelle postMessage() .

Définition du rapport:

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

Code JavaScript pour charger le rapport:

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

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

Maintenant, je nourris pour filtrer le rapport par un paramètre de mon application personnalisée. Existe-t-il un moyen d'envoyer ou de transmettre une valeur pour filtrer l'ensemble de données dans le rapport?

25
andrew.fox

Tout d'abord, le filtre doit être défini dans le rapport, afin que l'utilisateur puisse le définir manuellement.

Il existe deux façons possibles de transmettre des paramètres (donc de définir un filtre) au rapport Power BI à partir d'une source externe.

a) Dans l'application Power BI

Vous pouvez spécifier le filtre en définissant le paramètre filter dans l'URL du rapport (dans la barre d'adresse du navigateur). Le paramètre prend une requête de filtre personnalisé:

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

où "12345678-6418-4b47-ac7c-f8ac7791a0a7" est un identifiant de rapport et "Store" est un ensemble de données et PostalCode est un paramètre à filtrer. "eq" est un opérateur d'égalité.

L'URL doit être codée, donc l'URL finale ressemble à ceci:

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

b) paramètre sendMessage oDataFilter JavaScript

JavaScript (côté client du navigateur) contrôle le rapport BI chargé par des appels à postMessage() avec des paramètres (comme dans la question ci-dessus). Il existe une option supplémentaire oDataFilter qui peut être définie pour filtrer le rapport.

Réglez-le comme ceci: oDataFilter: "Store/PostalCode eq '15012'"

Le code complet ressemblerait à ceci:

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

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

Remarques

  • Il ne doit pas y avoir de points dans les paramètres de filtre (source de données ou nom de paramètre) car le code Power BI le rejette silencieusement comme noms non valides;
31
andrew.fox

Microsoft a créé un client powerbi avec lequel vous pouvez faire bien plus que simplement appliquer un filtre. Vous pouvez appliquer autant de filtres que vous le souhaitez et vous pouvez également choisir la page par défaut, les filtres par défaut, masquer le volet de filtre, masquer la navigation des pages, etc.

Vous pouvez trouver le client ici: https://Microsoft.github.io/PowerBI-JavaScript/

Voici une application de démonstration: https://Microsoft.github.io/PowerBI-JavaScript/demo/index.html

Voici la documentation: https://github.com/Microsoft/PowerBI-JavaScript/wiki

7
Silko