Nie tak dawno pisałem o Streamingu danych do Power BI z poziomu skryptu Powershell. Oczywiście to nie jest jedyna słuszna droga postępowania, możemy wykorzystać nie tylko kod napisany w takim albo innym języku ale również gotowe komponenty takie jak Microsoft Flow oraz Power Apps. Tak więc zapraszam was do lektury artykułu w którym opiszę jak połączyć te trzy narzędzia w system przesyłający dane w czasie rzeczywistym jednocześnie je wizualizując.
Czyniąc długą historię krótką będziemy streamować dane za pomocą Microsoft Flow, interfejsem do wprowadzania danych będzie dla nas Power Apps, a wizualizacje oprzemy oczywiście o Power BI. Pierwszym krokiem w naszym przykładzie jest stworzenie datasetu, do którego będziemy wrzucać dane. Możemy to zrobić za pomocą Powershell lub odpowiednio wygenerować go za pomocą interfejsu graficznego na portalu. Na potrzeby niniejszego artykułu wykorzystamy to drugie podejście czyli po zalogowaniu na portal w wybranym przez nas obszarze roboczym (workspace) klikamy w prawym górnym rogu portalu wybierając Create -> Streaming dataset:
Pierwszą rzeczą jaką musimy wybrać jest sposób przesyłu danych gdzie my wykorzystamy standardowo API, całość potwierdzamy oczywiście przyciskiem Next:
Definicja naszego testowego zestawu danych jest bardzo prosta i składa się tylko z czterech kolumn tak jak zostało to przedstawione na poniższym zrzucie ekranowym. Pamiętajmy aby zaznaczona była opcja Historic data analysis, która umożliwia zapis danych w zestawie wpadających jako stream, a nie tylko ich bieżącą wizualizację:
Po kliknięciu Create nas zestaw jest gotowy do użycia. Przechodzimy dalej, a mianowicie do Power Apps gdzie stworzymy aplikację zapisującą atrybuty do kolekcji, a następnie przekazującą je dalej do wysyłki do Power BI. Aplikacja również nie jest wybitnie złożona i składa się z czterech etykiet (wstawionych ze wstążki poprzez wybranie opcji Insert -> Label) oraz czterech obiektów typu Input Box (Insert -> Text -> Input Box). Każdą etykietę nazwałem tak aby odpowiadała atrybutowi do którego będzie się odnosić, Input Boxy natomiast nie mają żadnej wartości domyślnej (oczywiście nic nie stoi na przeszkodzie aby takową wartość dodać jednak na ten moment sobie ją podarujemy):
W dalszej kolejności dodałem dwa przyciski, a mianowicie Save oraz Clear:
Przycisk Save ma za zadanie zapis wartości z Input Boxów do kolekcji (zapisanego zbioru wartości). Clear natomiast ma za zadanie wspomnianą kolekcję czyścić, tak na wszelki wypadek gdybyśmy omyłkowo wprowadzili złe dane. Same przyciski oczywiście zostały oprogramowane automatycznie i musimy wskazać co ma się stać w momencie ich kliknięcia. Dlatego też dla przycisku Save wydarzenie On Select wywołuje następujący kod:
Collect(Collection_ToSend,{Year:TextInput_Year.Text, Month: TextInput_Month.Text,Category: TextInput_Category.Text, Value: Value(TextInput_Value.Text)})
Funkcja Collect dodaje do kolekcji o nazwie Collection_ToSend atrybuty wskazane jako rekord w kolejnym parametrze. Warto zauważyć, że samej kolekcji nie musieliśmy nigdzie definiować bo to właśnie w momencie użycia funkcji Collect została ona niejako zainicjowana.
Przycisk Clear wywołuje funkcję o tej samej nazwie, która usuwa wszystkie rekordy z kolekcji:
Clear(Collection_ToSend)
W kolejnym kroku wyświetlimy elementy dodane przez nas w kolekcji. Zrobimy to dodając obiekt typu Gallery (Insert -> Gallery -> Blank Vertical):
W pierwszym wierszu tejże galerii wstawiamy cztery etykiety oraz przycisk z napisem “Send To PBI”:
Jako wartość domyślną (Default) etykiet wstawiamy wartość każdego z naszych atrybutów czyli kolejno:
ThisItem.Year ThisItem.Month ThisItem.Category ThisItem.Value
Ciekawsze rzeczy będą się działy po kliknięciu przycisku Send To PBI ponieważ chcemy aby dane z zapisane w danym wierszu kolekcji były wysłane do Power BI. Dokonamy tego podpinając odpowiedni przepływ Microsoft Flow.
Tak więc mając zaznaczony przycisk wybieramy ze wstążki Action->Flows , następnie Create A new Flow.
Zostaniemy przeniesieni do nowej zakładki z Microsoft Flow gdzie mamy wybrać Create -> Instant Flow:
Instant Flow jest to przepływ, który inicjowany jest manualnie czyli np. poprzez przyciśnięcie odpowiedniego przycisku w Power Apps. W kolejnym oknie konfiguracyjnym wybieramy nazwę dla naszego przepływu oraz to w jaki sposób będzie on inicjowany – całość potwierdzamy poprzez kliknięcie przycisku Create:
Naszym oczom powinien ukazać się pusty przepływ z tylko jednym krokiem jakim jest Power Apps:
Po kliknięciu + New step mamy możliwość zdefiniowania kolejnego kroku. W tym przypadku musimy wyszukać Power BI i wybrać opcję Add rows to a dataset:
Konfiguracja tego zadania również nie powinna nikomu sprawić problemu. Sprowadza się ona do wybrania odpowiedniego:
- Workspace
- Dataset
- Table
W momencie gdy przypieliśmy odpowiedni zestaw danych w Power BI to Microsoft Flow wyświetlił jakie kolumny powinniśmy przekazać. Dodanie parametrów wygląda tak, że po wybraniu określonego parametru np. Year pojawi się dodatkowe okno gdzie możemy pobrać parametry, jeśli ich nie widzimy warto kliknąć See more. JEśli zaszła by taka potrzeba moglibyśmy napisać odpowiednie wyrażenie w języku wyrażeń Flow, jednakże w naszym przypadku przekażemy po prostu dane wstawione do formularza Power Apps. Finalny efekt powinien wyglądać następująco:
Na ten moment to wszystko klikamy zatem Save.
Wracamy do Power Apps i tam klikając przycisk Send To PBI wybieramy raz jeszcze Action -> Flow i z listy wybieramy stworzony przed chwilą przepływ:
Wywołana dla nas zostanie funkcja PowerApps.Run, (Power Apps to nazwa naszego flow także w tym miejscu zawsze powinniśmy zobaczyć wywołaną metodę Run dla obiektu będącego nazwą naszego przepływu np. MojFlow.Run). Jako parametry musimy podać odpowiednie wartości, których flow oczekuje i tutaj warto zwrócić uwagę na podpowiadanie kodu aby wiedzieć w jakiej kolejności je podać.
Ostatnim elementem naszego testu jest stworzenie kafelka (Tile). W Power BI w stworzonym przez nas Workspace tworzymy nowy kokpit (Dashboard):
Po wejściu na ten kokpit musimy dodać wspomniany kafelek:
Kafelek musi być podpięty pod stworzony przez nas wcześniej zestaw danych czyli wybieramy opcję Custom Streaming Data:
Po kliknięciu Next wybieramy nasz zestaw i po raz kolejny klikamy Next:
W tym miejscu nie pozostaje nam nic innego jak wybrać typ wizualizacji, który nas interesuje i potwierdzenie przyciskami kolejno Next i Apply:
Teraz nie pozostaje nic innego jak przetestowanie naszego systemy. Poniżej możecie zobaczyć animację tego co się dzieje na dashboardzie Power BI przy jednoczesnym wpisywaniu danych w Power Apps( dane widoczne na ekranie początkowym są danymi z cache pochodzącymi z moich testów):
Mimo, że go nie widać to należy pamiętać, że w całej komunikacji pośredniczy Microsoft Flow i każde kliknięcie przycisku Send To PBI wywołuje właśnie tą usługę. Doskonale to historia wykonania, która jest dostępna na portalu flow jako Run history:
Na poniższym zrzucie ekranowym możecie znaleźć potwierdzenie moich słów:
Ten prosty przykład dobrze obrazuje jak niewielkim nakładem pracy możemy osiągnąć naprawdę ciekawe rezultaty. Oczywiście nic nie stoi na przeszkodzie aby aplikacja Power Apps była bardziej zaawansowana podobnie jak wizualizacje w Power BI. Mam nadzieję, że wybrany przeze mnie przykład przypadł Wam do gustu szczególnie, że możliwości jest zdecydowanie więcej i z całą pewnością pojawi się jeszcze niejeden przykład pokazujący siłę “Power platformy”:) Pozdrawiam serdecznie.
- Avoiding Issues: Monitoring Query Pushdowns in Databricks Federated Queries - October 27, 2024
- Microsoft Fabric: Using Workspace Identity for Authentication - September 25, 2024
- Executing SQL queries from Azure DevOps using Service Connection credentials - August 28, 2024
That is pretty cool. Thanks for sharing.