2016-02-22 13 views
17

W mojej aplikacji wyświetlam raport Power BI. Działa już, więc nie ma problemów z wyświetlaniem raportu za pomocą jego identyfikatora (guid).Programowalne przekazywanie parametrów do filtra Power BI

Ale istnieje kilka raportów, które wymagają sparametryzowania, na przykład z bieżącym rokiem lub osobą, która przegląda raport. Oto moje pytanie: jak to zrobić?

Osobiście umieszczam raport wewnątrz elementu HTML . Ustawiłem adres URL ifr do adresu URL otrzymanego z definicji raportu embedUrl (otrzymanej z REST API). Kontroluję go za pomocą kodu JavaScript, który wywołuje postMessage().

Zgłoś definicja:

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

kod JavaScript do ładunku raport:

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

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

Teraz karmię filtrować raport parametr z mojej aplikacji niestandardowej. Czy istnieje sposób wysyłania lub przekazywania wartości do filtrowania zbioru danych w raporcie?

+0

Możliwy duplikat [Power BI Wstaw URL wielu filtrów] (http://stackoverflow.com/questions/37943885/power-bi-embed- url-multipipl e-filtry) –

+2

Jak może być duplikatem pytania zadawanego PÓŹNIEJ i z inną troską? –

Odpowiedz

23

Przede wszystkim w raporcie należy zdefiniować filtr, aby użytkownik mógł ustawić go ręcznie.

Istnieją dwa możliwe sposoby przekazywania parametrów (w ten sposób ustawiając filtr) do raportu Power BI z zewnętrznego źródła.

a) w sile aplikacji BI

Można określić filtr ustawiając filter parametr w adresie URL raportu (w pasku adresu przeglądarki). Parametr bierze niestandardowego zapytania Filtr:

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

gdzie "12345678-6418-4b47-ac7c-f8ac7791a0a7" to id raport, a "Szopa" to zbiór danych i PostalCode jest parametrem należy odfiltrować. "eq" jest operatorem równości.

URL powinny być kodowane, więc końcowy URL wygląda następująco:

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

b) parametr JavaScript sendMessage oDataFilter

JavaScript (po stronie klienta przeglądarka) steruje załadowany raport BI przez postMessage() połączenia z parametrami (tak jak w powyższym pytaniu). Istnieje dodatkowa opcja oDataFilter, którą można ustawić w celu filtrowania raportu.

Set to tak: oDataFilter: "Store/PostalCode eq '15012'"

Pełny kod będzie wyglądać następująco:

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

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

Uwagi

  • Nie może być żadnych kropek w parametrach filtra (źródło danych lub nazwa parametru), ponieważ kod Power BI odrzuca go w postaci po cichu jako nieprawidłowe nazwy;
+0

dobry przykład i wyjaśnienie, dziękuję andrew. – Mostafa

+0

Można zastosować to podejście do filtrowania danych na podstawie identyfikatora użytkownika? Na przykład powiedzmy, że mam 50 użytkowników z różnymi uprawnieniami do danych, które widzą. Jeśli korzystam na przykład z DirectConnect na serwerze SQL, czy mogę użyć podejścia parametrycznego tylko do danych rozwijanych/pokazywanych przez użytkownika? – Markive

+2

@Markive - nie w bezpieczny sposób; można po prostu przekazać UserId jako filtr, ale użytkownik może to wyczyścić. Z tym wymaganiem możliwe jest, że Power BI nie jest dla ciebie najlepszym rozwiązaniem. W Power BI musisz publikować różne raporty dla każdego konta użytkownika (które używa różnych zapytań). –

4

Microsoft stworzył klienta powerbi, dzięki któremu można zrobić o wiele więcej, niż tylko zastosować jeden filtr. Można zastosować dowolną liczbę filtrów, jak chcesz i można również wybrać domyślną stronę, filtry domyślne, ukryć okienko filtra, ukryć strony nawigacyjne itp

można znaleźć tutaj: klient https://microsoft.github.io/PowerBI-JavaScript/

Oto aplikacja demo: https://microsoft.github.io/PowerBI-JavaScript/demo/index.html

Oto dokumentacja: https://github.com/Microsoft/PowerBI-JavaScript/wiki

Powiązane problemy