{"id":31859,"date":"2022-12-01T13:48:00","date_gmt":"2022-12-01T12:48:00","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/data-stream-strumienie-danych\/"},"modified":"2024-11-07T14:40:27","modified_gmt":"2024-11-07T13:40:27","slug":"data-stream-strumienie-danych","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/data-stream-strumienie-danych\/","title":{"rendered":"Data Stream \u2013 strumienie danych Power BI"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">Przejd\u017a do:<\/p>\n    <ol>\n                    <li><a href=\"#Co-mo\u017ce-obejmowa\u0107-przesy\u0142anie-strumieniowe\">1.  Co mo\u017ce obejmowa\u0107 przesy\u0142anie strumieniowe<\/a><\/li>\n                    <li><a href=\"#Jak-tworzy\u0107-zbiory-danych-strumieniowych-(dataset)?\">2.  Jak tworzy\u0107 zbiory danych strumieniowych (dataset)?<\/a><\/li>\n                    <li><a href=\"#Dost\u0119pne-sposoby-wizualizacji-danych-strumieniowych\">3.  Dost\u0119pne sposoby wizualizacji danych strumieniowych<\/a><\/li>\n                    <li><a href=\"#PubNub-streaming-dataset\">4.  PubNub streaming dataset<\/a><\/li>\n                    <li><a href=\"#Streaming-dataset\">5.  Streaming dataset<\/a><\/li>\n                    <li><a href=\"#Push-dataset\">6.  Push dataset<\/a><\/li>\n                    <li><a href=\"#Podsumowanie\">7.  Podsumowanie <\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"Co-mo\u017ce-obejmowa\u0107-przesy\u0142anie-strumieniowe\">Co mo\u017ce obejmowa\u0107 przesy\u0142anie strumieniowe<\/h2>\n\n\n\n<p>Przesy\u0142anie strumieniowe to technologia, kt\u00f3ra umo\u017cliwia ci\u0105g\u0142e i niezwykle szybkie przesy\u0142anie danych w czasie rzeczywistym. To rozwi\u0105zanie znajduje zastosowanie nie tylko w popularnej telewizji internetowej, ale r\u00f3wnie\u017c w przemy\u015ble i raportowaniu biznesowym. Je\u017celi konieczna jest wiedza o aktualnych stanach magazynowych, znajomo\u015b\u0107 aktualnych odczyt\u00f3w czujnik\u00f3w z urz\u0105dze\u0144 lub gdy pracujesz z urz\u0105dzeniami IoT, wtedy Data Stream b\u0119dzie pomocnym rozwi\u0105zaniem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Jak-tworzy\u0107-zbiory-danych-strumieniowych-(dataset)?\">Jak tworzy\u0107 zbiory danych strumieniowych (dataset)?<\/h2>\n\n\n\n<p>S\u0105 <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-bi\/connect-data\/service-real-time-streaming\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/learn.microsoft.com\/en-us\/power-bi\/connect-data\/service-real-time-streaming\" rel=\"noreferrer noopener\">trzy sposoby na stworzenie zbior\u00f3w danych<\/a> przesy\u0142aj\u0105cych dane strumieniowe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Poprzez Power BI REST API<\/li>\n\n\n\n<li>Bezpo\u015brednio na Power BI Service (Streaming Dataset UI)<\/li>\n\n\n\n<li>Poprzez Azure Stream Analytics<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Dost\u0119pne-sposoby-wizualizacji-danych-strumieniowych\">Dost\u0119pne sposoby wizualizacji danych strumieniowych<\/h2>\n\n\n\n<p>Poni\u017cszy artyku\u0142 w prostych przyk\u0142adach przedstawi mo\u017cliwo\u015bci prezentacji danych strumieniowych, kt\u00f3re oferuje Microsoft Power BI. <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-bi\/connect-data\/service-real-time-streaming\" data-type=\"URL\" data-id=\"https:\/\/learn.microsoft.com\/en-us\/power-bi\/connect-data\/service-real-time-streaming\" target=\"_blank\" rel=\"noreferrer noopener\">Dokumentacja na stronie Microsoftu<\/a> przedstawia trzy metody, kt\u00f3re mo\u017cna wykorzysta\u0107 do prezentacji tego typu danych. W poni\u017cszym artykule w praktyczny spos\u00f3b przeanalizujemy i por\u00f3wnamy wszystkie te metody. Na pocz\u0105tek warto zapozna\u0107 si\u0119 z tabelk\u0105 (Tab. 1) por\u00f3wnuj\u0105c\u0105 dost\u0119pne sposoby wizualizacji danych strumieniowych. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/jpro_2022.11.30_graphic_1.png\" alt=\"Data Stream\" class=\"wp-image-5452\" title=\"\"><figcaption class=\"wp-element-caption\">Tab. 1. Por\u00f3wnanie dost\u0119pnych typ\u00f3w zbior\u00f3w danych umo\u017cliwiaj\u0105cych przesy\u0142anie danych strumieniowych (https:\/\/learn.microsoft.com\/en-us\/power-bi\/connect-data\/service-real-time-streaming)<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"PubNub-streaming-dataset\">PubNub streaming dataset<\/h3>\n\n\n\n<p>Pierwsz\u0105 metod\u0105 do przesy\u0142ania danych strumieniowych, kt\u00f3rej si\u0119 przyjrzymy, b\u0119dzie wykorzystanie zewn\u0119trznej us\u0142ugi do przesy\u0142ania danych w czasie rzeczywistym \u2013 PubNub. Dla niewielkich aplikacji przesy\u0142aj\u0105cych do 100 milion\u00f3w wiadomo\u015bci miesi\u0119cznie <a href=\"https:\/\/www.holdapp.com\/pl\/blog\/ios-small-talks-pubnub-czyli-sposob-na-komunikacje-w-czasie-rzeczywistym\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/www.holdapp.com\/pl\/blog\/ios-small-talks-pubnub-czyli-sposob-na-komunikacje-w-czasie-rzeczywistym\" rel=\"noreferrer noopener\">korzystanie z PubNub jest darmowe<\/a>.<\/p>\n\n\n\n<p><strong>Us\u0142uga Power BI Service <\/strong>nie przechowuje otrzymanych danych, dlatego sposoby na ich wizualizacj\u0119 s\u0105 bardzo ograniczone. Jak wida\u0107 w tabelce (Tab. 1), liczba przes\u0142anych wiadomo\u015bci oraz ich wielko\u015b\u0107 nie jest w \u017caden spos\u00f3b ograniczona. Rozwi\u0105zanie jest zoptymalizowane pod k\u0105tem jak najszybszego pokazania nap\u0142ywaj\u0105cych danych u\u017cytkownikowi.<\/p>\n\n\n\n<p>Przygotujemy teraz przyk\u0142adowy raport, korzystaj\u0105c ze Streaming Dataset UI. W swojej<a href=\"https:\/\/learn.microsoft.com\/en-us\/power-bi\/connect-data\/service-real-time-streaming\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/learn.microsoft.com\/en-us\/power-bi\/connect-data\/service-real-time-streaming\" rel=\"noreferrer noopener\"> dokumentacji Microsoft <\/a>udost\u0119pnia przyk\u0142adowy streaming danych, na potrzeby tego artyku\u0142u skorzystamy z PubNub. .PubNub na swojej stronie internetowej w zak\u0142adce Demo udost\u0119pnia kilkana\u015bcie przyk\u0142adowych streaming\u00f3w danych, dlatego pos\u0142u\u017cymy si\u0119 alternatywnym \u017ar\u00f3d\u0142em danych.<\/p>\n\n\n\n<p>Pierwszy krok to stworzenie \u017ar\u00f3d\u0142a danych (data source). B\u0119d\u0105c zalogowanym do Power BI Service, na g\u0142\u00f3wnej stronie workspace nale\u017cy wybra\u0107 opcj\u0119 <strong>New -&gt; Streaming dataset -&gt; PubNub.<\/strong><\/p>\n\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Rys-01-PubNub-01.png\" alt=\"Streaming Datasets\" class=\"wp-image-5453\" title=\"\"><figcaption class=\"wp-element-caption\">Rys. 1. Przygotowanie \u017ar\u00f3d\u0142a danych typu PubNub<\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Rys-02-PubNub-02.png\" alt=\"Przygotowanie \u017ar\u00f3d\u0142a danych typu PubNub\" class=\"wp-image-5454\" title=\"\"><figcaption class=\"wp-element-caption\">Rys. 2. Przygotowanie \u017ar\u00f3d\u0142a danych typu PubNub<\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W oknie, kt\u00f3re si\u0119 pojawi\u0142o, nale\u017cy wpisa\u0107 informacje umo\u017cliwiaj\u0105ce po\u0142\u0105czenie si\u0119 ze \u017ar\u00f3d\u0142em danych. W niniejszym przyk\u0142adzie wykorzystano <a href=\"https:\/\/www.pubnub.com\/demos\/real-time-data-streaming\/?show=demo\" data-type=\"URL\" data-id=\"https:\/\/www.pubnub.com\/demos\/real-time-data-streaming\/?show=demo\" target=\"_blank\" rel=\"noreferrer noopener\">\u017ar\u00f3d\u0142o danych ze strony internetowej PubNub<\/a> z podstrony<strong> Demo -&gt; PubNub Real-Time Data Streaming Demo -&gt; Sensor Network (Simulated)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dataset name: PubNub test DS<\/li>\n\n\n\n<li>Sub-key: sub-c-99084bc5-1844-4e1c-82ca-a01b18166ca8<\/li>\n\n\n\n<li>Channel: pubnub-sensor-network<\/li>\n\n\n\n<li>PAM Auth Key: puste<\/li>\n<\/ul>\n\n\n\n<p>Je\u017celi wszystko b\u0119dzie w porz\u0105dku, to w kolejnym oknie powinna pojawi\u0107 si\u0119 automatycznie wype\u0142niona lista dostarczanych przez \u017ar\u00f3d\u0142o danych warto\u015bci wraz z typami danych. Pod list\u0105 znajduje si\u0119 okienko, w kt\u00f3rym<strong> buduje si\u0119 struktura pliku JSON<\/strong> \u2013 b\u0119dzie ona u\u017cywana do przesy\u0142ania danych. To okienko pe\u0142ni funkcj\u0119 informacyjn\u0105, nie b\u0119dzie nam to na tym etapie do niczego potrzebne. Je\u017celi Power BI Service nie b\u0119dzie w stanie po\u0142\u0105czy\u0107 si\u0119 ze \u017ar\u00f3d\u0142em danych, poinformuje nas o tym odpowiedni komunikat.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Rys-03-PubNub-03.png\" alt=\"Przygotowanie \u017ar\u00f3d\u0142a danych typu PubNub\" class=\"wp-image-5455\" title=\"\"><figcaption class=\"wp-element-caption\">Rys. 3. Przygotowanie \u017ar\u00f3d\u0142a danych typu PubNub<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Po klikni\u0119ciu Create na workspace pojawi si\u0119 nowo utworzony dataset. Nie ma mo\u017cliwo\u015bci, aby pod\u0142\u0105czy\u0107 si\u0119 do tego \u017ar\u00f3d\u0142a danych poprzez Power BI Desktop. Jest to zgodne z informacj\u0105 zawart\u0105 w tabeli nr 1, kt\u00f3ra m\u00f3wi, \u017ce to <strong>\u017ar\u00f3d\u0142o danych jest wykorzystywane przy umieszczaniu element\u00f3w wizualizacji bezpo\u015brednio w dashboardzie.<\/strong> W takim razie kolejnym krokiem b\u0119dzie utworzenie nowego dashboardu, po czym po wybraniu opcji Edit i klikni\u0119ciu Add a tile poka\u017ce si\u0119 okienko, w kt\u00f3rym nale\u017cy wybra\u0107 opcj\u0119 Custom Streaming Data.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Rys-04-PubNub-04.png\" alt=\"Przygotowanie element\u00f3w dashboardu\" class=\"wp-image-5456\" title=\"\"><figcaption class=\"wp-element-caption\">Rys. 4. Przygotowanie element\u00f3w dashboardu<\/figcaption><\/figure>\n<\/div>\n\n\n<p>W kolejnym oknie pojawi si\u0119 lista wszystkich dost\u0119pnych dataset\u00f3w przesy\u0142aj\u0105cych dane strumieniowe. Kolejne okna to miejsce, w kt\u00f3rym edytujemy wybrany element wizualizacji. Wyb\u00f3r nie jest zbyt bogaty, ale powinien spe\u0142ni\u0107 wymagania wi\u0119kszo\u015bci standardowych przypadk\u00f3w. Mo\u017cemy wybiera\u0107 spo\u015br\u00f3d:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Card (karty)<\/li>\n\n\n\n<li>Line chart (wykres liniowy)<\/li>\n\n\n\n<li>Clustered bar chart (wykres s\u0142upkowy)<\/li>\n\n\n\n<li>Clustered column chart (wykres kolumnowy)<\/li>\n\n\n\n<li>Gauge (wykres w postaci wska\u017anik\u00f3w)<\/li>\n<\/ul>\n\n\n\n<p>W niniejszym przyk\u0142adzie wybrany zosta\u0142 wykres liniowy. Po wybraniu typu wizualizacji od razu pojawi\u0105 si\u0119 dodatkowe opcje zale\u017cnie od typu wybranej wizualizacji.<strong> W przypadku wykresu liniowego nale\u017cy przypisa\u0107, kt\u00f3re pole z datasetu ma by\u0107 \u017ar\u00f3d\u0142em danych dla osi X, warto\u015bci widocznych na osi Y i legendy. <\/strong>Nast\u0119pnie nale\u017cy wybra\u0107 okno czasowe, kt\u00f3re ma by\u0107 widoczne na wykresie. Minimalna warto\u015b\u0107 to 1 sekunda, a maksymalna to 60 minut. Pozosta\u0142e opcje to tytu\u0142 i podtytu\u0142 wykresu. Jak wida\u0107, opcji do ustawienia jest niewiele. Podobnie sytuacja wygl\u0105da przy pozosta\u0142ych typach wizualizacji. W czasie edycji na bie\u017c\u0105co widoczny jest podgl\u0105d naszych ustawie\u0144. Po dodaniu wizualizacji dost\u0119pna jest opcja edycji, kt\u00f3ra umo\u017cliwia zmian\u0119 wszystkich wcze\u015bniej ustawionych element\u00f3w, \u0142\u0105cznie ze zmian\u0105 typu wizualizacji np. z wykresu linowego na wykres s\u0142upkowy.<\/p>\n\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Rys-05-PubNub-05.gif\" alt=\"Gotowy dashboard z wykresem liniowym\" class=\"wp-image-5457\" title=\"\"><figcaption class=\"wp-element-caption\">Rys. 5. Gotowy dashboard z wykresem liniowym<\/figcaption><\/figure>\n<\/div>\n\n\n<h5 class=\"wp-block-heading\">Ograniczenia<\/h5>\n\n\n\n<p>Jak wida\u0107, stworzenie dashboardu z wykorzystaniem PubNub jest bardzo proste. Niestety ta prostota jest okupiona pewnymi ust\u0119pstwami.<\/p>\n\n\n\n<p>Developer nie ma mo\u017cliwo\u015bci zmiany wygl\u0105du wizualizacji takich jak kr\u00f3j czcionki, kolory, formatowanie warunkowe. Na szcz\u0119\u015bcie domy\u015blne opcje s\u0105 tak dobrane, \u017ce wizualizacja jest czytelna.<\/p>\n\n\n\n<p>Wi\u0119kszym problemem powoduj\u0105cym, \u017ce ten typ streamingu danych ma ograniczone zastosowanie, jest wym\u00f3g wykorzystania dashboardu. Je\u017celi budujemy system raportowy, kt\u00f3ry b\u0119dzie powstawa\u0107 automatycznie, np. poprzez zdefiniowany pipeline, wtedy trafimy na przeszkod\u0119. REST API, kt\u00f3re jest udost\u0119pnione, umo\u017cliwia tworzenie workspace, datasource, <strong>wys\u0142anie pliku PBIX na Power BI Service<\/strong>, a nawet utworzenie pustego dashboardu. Niestety umieszczenie wizualizacji na dashboardzie w odpowiednim miejscu jest elementem, kt\u00f3ry r\u0119cznie musi wykona\u0107 developer.<\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce: <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/big-data-azure\/\" data-type=\"post\" data-id=\"31188\">Analiza Big Data z wykorzystaniem Azure<\/a><\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Streaming-dataset\">Streaming dataset<\/h3>\n\n\n\n<p>W tej metodzie dane s\u0105 przesy\u0142ane do Power BI Service i przechowywane w cache przez godzin\u0119. <strong>PubNub oraz Streaming dataset s\u0105 do siebie bardzo podobne<\/strong> pod wzgl\u0119dem oferowanych funkcjonalno\u015bci. G\u0142\u00f3wna r\u00f3\u017cnica polega na tym, \u017ce nie jeste\u015bmy zmuszeni korzysta\u0107 z us\u0142ug jednego dostawcy danych, kt\u00f3rym poprzednio by\u0142 PubNub. Dla streaming dataset \u017ar\u00f3d\u0142em danych mo\u017ce by\u0107 dowolna aplikacja, wa\u017cne jest jedynie, aby przesy\u0142ane dane mia\u0142y odpowiedni format JSON.<\/p>\n\n\n\n<p>Podobnie jak w PubNub, postawiono na szybko\u015b\u0107 prezentacji danych kosztem funkcjonalno\u015bci. Wizualizacje s\u0105 tworzone r\u00f3wnie\u017c po stronie <strong>Power BI Service<\/strong>, taka sama jest te\u017c liczba dost\u0119pnych typ\u00f3w wizualizacji i s\u0105 one w ten sam spos\u00f3b ograniczone co do mo\u017cliwo\u015bci ich edycji. Dokumentacja zaleca takie przygotowanie danych do prezentacji, aby wystarczy\u0142o je tylko zwizualizowa\u0107, bez dodatkowych kalkulacji. Pojawiaj\u0105 si\u0119 tutaj pewne ograniczenia co do liczby przes\u0142anych danych (Tab. 1). W ci\u0105gu jednej sekundy mo\u017ce zosta\u0107 przes\u0142anych pi\u0119\u0107 <strong>\u017c\u0105da\u0144 typu POST <\/strong>o wielko\u015bci 15 KB ka\u017cde. Po przekroczeniu granicy 15 KB przesy\u0142anie danych przejdzie automatycznie w tryb Push dataset.<\/p>\n\n\n\n<p>Po kr\u00f3tkim wst\u0119pie czas na przygotowanie kolejnego raportu. Pierwszy krok to utworzenie zbioru danych (datasetu) \u2013 w tym celu wykorzystane zostanie Streaming Dataset UI, ale do przesy\u0142ania danych potrzebne ju\u017c b\u0119dzie REST API. Tak jak poprzednio, b\u0119d\u0105c na workspace, nale\u017cy klikn\u0105\u0107 New -&gt; Streaming dataset, jednak tym razem nale\u017cy wybra\u0107 opcj\u0119 API (Rys. 6).<\/p>\n\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Rys-06-Streaming-01.png\" alt=\"Przygotowanie Streaming dataset\" class=\"wp-image-5458\" title=\"\"><figcaption class=\"wp-element-caption\">Rys. 6. Przygotowanie Streaming dataset<\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Rys-07-Streaming-02.png\" alt=\"Przygotowanie Streaming dataset\" class=\"wp-image-5459\" title=\"\"><figcaption class=\"wp-element-caption\">Rys. 7. Przygotowanie Streaming dataset<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Po wybraniu opcji API pojawi si\u0119 okienko tworzenia nowego datasetu. Bardzo podobne okno pojawi\u0142o si\u0119 w metodzie PubNub, tylko w\u00f3wczas lista p\u00f3l i typ\u00f3w danych by\u0142a wype\u0142niona, teraz trzeba list\u0119 wype\u0142ni\u0107 samodzielnie. Na rysunku nr 8 wida\u0107 wst\u0119pnie przygotowany data source. Sk\u0142ada si\u0119 z czterech p\u00f3l:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Percentage \u2013 typu liczbowego,<\/li>\n\n\n\n<li>Color \u2013 typu tekstowego,<\/li>\n\n\n\n<li>ColorNumber \u2013 typu liczbowego<\/li>\n\n\n\n<li>oraz znacznika czasowego.<\/li>\n<\/ul>\n\n\n\n<p>Edytor umo\u017cliwia wybranie tylko trzech typ\u00f3w danych: typ liczbowy, tekstowy i datetime.<\/p>\n\n\n\n<p>W tym miejscu nale\u017cy si\u0119 zatrzyma\u0107, aby opisa\u0107 dwie bardzo istotne rzeczy. Pierwsza to prze\u0142\u0105cznik Historic data analysis. Opcja Off oznacza tworzenie data source typu Streaming. Opcja On oznacza data source typu Push, kt\u00f3ry zostanie om\u00f3wiony w kolejnym rozdziale. Druga wymagaj\u0105ca dodatkowego opisu kwestia to przyk\u0142adowe warto\u015bci wpisane pod list\u0105 p\u00f3l.<\/p>\n\n\n\n<p>W tym momencie pe\u0142ni\u0105 rol\u0119 pogl\u0105dow\u0105, jednak nale\u017cy przyjrze\u0107 si\u0119 formatowi daty. Jest to <strong>format ISO 8601 z literk\u0105 Z oznaczaj\u0105c\u0105 czas po\u0142udnika 0, w wojsku nazywany czasem Zulu, a w cywilu \u2013 UTC. <\/strong>U\u017cycie innego formatu daty nie powoduje b\u0142\u0119du, co daje mylne wra\u017cenie, \u017ce wszystko b\u0119dzie w porz\u0105dku. W raporcie daty z tej kolumny b\u0119d\u0105 wy\u015bwietlane prawid\u0142owo, niestety problemy pojawi\u0105 si\u0119 w kalkulacjach i filtrach. Zwracane warto\u015bci b\u0119d\u0105 b\u0142\u0119dne, a filtry usun\u0105 zbyt du\u017co lub zbyt ma\u0142o danych, dlatego tak istotne jest, aby przesy\u0142ane daty mia\u0142y format ISO 8601.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Rys-08-Streaming-03.png\" alt=\"Przygotowanie Streaming dataset\" class=\"wp-image-5460\" title=\"\"><figcaption class=\"wp-element-caption\">Rys. 8. Przygotowanie Streaming dataset<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Po utworzeniu data source pojawi si\u0119 okno widoczne na rysunku nr 8. Znajduj\u0105 si\u0119 tutaj niezb\u0119dne informacje dla aplikacji, kt\u00f3ra b\u0119dzie generowa\u0107 i wysy\u0142a\u0107 dane do utworzonego w\u0142a\u015bnie dataset. <strong>Push URL to link, na kt\u00f3ry musz\u0105 by\u0107 przesy\u0142ane dane.<\/strong> Klucz zawiera w sobie tokenid s\u0142u\u017c\u0105cy do autentykacji. W okienku poni\u017cej Push URL znajduje si\u0119 struktura polecenia przesy\u0142aj\u0105cego dane w trzech formatach: Raw, cURL i PowerShell.<\/p>\n\n\n\n<p>Kolejny krok to przygotowanie generatora danych. W za\u0142\u0105czniku do tego artyku\u0142u<strong> (Za\u0142\u0105cznik 1)<\/strong> znajduje si\u0119 generator danych napisany w PowerShell, wykorzystany w tym \u0107wiczeniu \u2013 wystarczy wklei\u0107 tam Push URL i uruchomi\u0107. Generator jest bardzo prosty. <\/p>\n\n\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\" data-enlighter-highlight=\" data-enlighter-linenumbers=\" data-enlighter-lineoffset=\" data-enlighter-title=\" data-enlighter-group=\">Function CountForward {\n    Param([int]$startInt,[int]$increment,[int]$endInt)\n \n    Write-Host \"Count forward from:\" $startInt    \n    Write-Host \"Count forward until:\" $endInt\n    Write-Host \"Increment\" $increment\n    $i=1\n    \n    while ($startInt -le $endInt) {\n        \n        $Timestamp = Get-Date (Get-Date).ToUniversalTime() -UFormat '+%Y-%m-%dT%H:%M:%S.000Z'\n        $PercentageRand = Get-Random -Minimum 0 -Maximum 100\n        if ($PercentageRand -le 35) {\n            $PercentageRand = $null\n            $Color = 0\n            $ColorName = \"Gray\"\n        } elseif ($PercentageRand -le 55) {\n            $Color = 1\n            $ColorName = \"Red\"\n        } elseif (($PercentageRand -gt 55) -and ($PercentageRand -le 85)) {\n            $Color = 2\n            $ColorName = \"Amber\"\n        } elseif ($PercentageRand -ge 85) {\n            $Color = 3\n            $ColorName = \"Green\"\n        }\n        \n        $endpoint = \"&lt;Push URL>\"\n            $payload = @{\n            \"Percentage\" = $PercentageRand\n            \"Color\" = $Color\n            \"ColorName\" = $ColorName\n            \"Timestamp\" = $Timestamp\n            }\n            Invoke-RestMethod -Method Post -Uri \"$endpoint\" -Body (ConvertTo-Json @($payload))\n        \n        Write-Host \"i =: \" $i\n        Write-Host \"PercentageRand =: \" $PercentageRand\n        Write-Host \"Color =: \" $Color\n        Write-Host \"ColorName =: \" $ColorName\n        Write-Host \"Timestamp =: \" $Timestamp\n        $i++\n        \n        Start-Sleep -Seconds 1.5              \n    }\n}\n  \n  CountForward -startInt 1 -increment 1 -endInt 1000<\/pre>\n\n\n\n<p><strong>(<i>Za\u0142\u0105cznik 1<\/i>)<\/strong><\/p>\n\n\n\n<p><strong>W p\u0119tli While losowana jest cyfra z zakresu od 0 do 100<\/strong>, kt\u00f3ra b\u0119dzie wysy\u0142ana jako Percentage. Na podstawie wylosowanej warto\u015bci generowany jest numer koloru i jego nazwa. Ponadto przy pomocy polecenia<strong> Get-Date <\/strong>tworzony jest znacznik czasowy przy ka\u017cdym przebiegu p\u0119tli. Tak uzyskane dane s\u0105 wysy\u0142ane do Streaming dataset. Nale\u017cy mie\u0107 na uwadze, \u017ce dataset po stronie Power BI Service rozr\u00f3\u017cnia wielko\u015b\u0107 liter, dlatego nazwy p\u00f3l musz\u0105 by\u0107 identyczne w zmiennej $payload i w definicji dataset.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Maj\u0105c generator danych i dataset, mo\u017cna przyst\u0105pi\u0107 do przygotowania raportu. Podobnie jak w poprzedniej metodzie, Power BI Desktop nie widzi streaming dataset, dlatego przygotowanie raportu odbywa si\u0119 w Power BI Service. Ten proces jest identyczny jak w przypadku tworzenia dashboardu z wykorzystaniem PubNub, dlatego nie b\u0119d\u0119 opisywa\u0142 go szczeg\u00f3\u0142owo.<\/p>\n\n\n\n<p>Efekt prac w postaci widocznego generatora danych oraz zmian warto\u015bci w raporcie mo\u017cna zobaczy\u0107 na rysunku nr 9.<\/p>\n\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Rys-09-Streaming-04B-1.gif\" alt=\" class=\" title=\"\"><figcaption class=\"wp-element-caption\">Rys. 9. Raport z dataset typu streaming oraz dzia\u0142aj\u0105cy generator danych.<\/figcaption><\/figure>\n<\/div>\n\n\n<h5 class=\"wp-block-heading\">Ograniczenia<\/h5>\n\n\n\n<p>Streaming dataset oferuje funkcjonalno\u015bci zbli\u017cone do PubNub. Niestety trzeba powiedzie\u0107 o jeszcze jednym minusie ograniczaj\u0105cym zastosowanie tej metody. Podobnie jak poprzednio Streaming dataset wymaga zastosowania dashboardu, wi\u0119c automatyzacja budowania \u015brodowiska raportowego jest utrudniona. Proces ten dodatkowo komplikuje jeszcze jeden element. <strong>Po wygenerowaniu Streaming dataset otrzymujemy Push URL<\/strong>, kt\u00f3ry jest niezb\u0119dny do przesy\u0142ania danych przez generator pod odpowiedni adres. Niestety w dniu pisania tego artyku\u0142u nie istnia\u0142o polecenie REST API ani inna metoda, kt\u00f3ra pozwoli\u0142aby uzyska\u0107 ten link. Jest to kolejny manualny krok, kt\u00f3ry trzeba wykona\u0107 podczas tworzenia tego typu raport\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Push-dataset\">Push dataset<\/h3>\n\n\n\n<p>Ostatnia mo\u017cliwo\u015b\u0107 zaimplementowania wizualizacji danych strumieniowych to Push dataset. Jest to metoda oferuj\u0105ca najwi\u0119ksze mo\u017cliwo\u015bci, znacznie r\u00f3\u017cni\u0105ca si\u0119 od pozosta\u0142ych. Dane s\u0105 przesy\u0142ane do <strong>Power BI Service,<\/strong> w kt\u00f3rym zak\u0142adana jest pomocnicza baza s\u0142u\u017c\u0105ca do przechowywania otrzymanych danych. Push dataset pozwala na przes\u0142anie jednego polecenia POST na sekund\u0119 o wielko\u015b\u0107 16 MB ka\u017cde. \u0141\u0105cznie w ci\u0105gu godziny do tabeli mo\u017ce trafi\u0107 milion wierszy. Ogranicze\u0144 jest wi\u0119cej, zosta\u0142y one dok\u0142adnie opisane <a href=\"https:\/\/learn.microsoft.com\/en-us\/rest\/api\/power-bi\/\" data-type=\"URL\" data-id=\"https:\/\/learn.microsoft.com\/en-us\/rest\/api\/power-bi\/\" target=\"_blank\" rel=\"noreferrer noopener\">w dokumentacji Power BI<\/a>.<\/p>\n\n\n\n<p>W odr\u00f3\u017cnieniu od poprzednich metod po utworzeniu dataset dalsza praca z raportem jest kontynuowana w Power BI Desktop. Daje to dost\u0119p do wszystkich typ\u00f3w wizualizacji \u0142\u0105cznie z tymi, kt\u00f3re mo\u017cna doda\u0107, wykorzystuj\u0105c opcj\u0119 <strong>\u201eGet more visuals\u201d.<\/strong><\/p>\n\n\n\n<p>Dla odmiany w niniejszym \u0107wiczeniu dataset utworzymy w ca\u0142o\u015bci poprzez REST API. Osoby chc\u0105ce eksperymentowa\u0107 zach\u0119cam do zapoznania si\u0119 z <a href=\"https:\/\/learn.microsoft.com\/en-us\/rest\/api\/power-bi\/\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/learn.microsoft.com\/en-us\/rest\/api\/power-bi\/\" rel=\"noreferrer noopener\">dokumentacj\u0105 REST API<\/a> oraz dokumentacj\u0105 <a href=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/power-bi\/overview?view=powerbi-ps\" data-type=\"URL\" data-id=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/power-bi\/overview?view=powerbi-ps\" target=\"_blank\" rel=\"noreferrer noopener\">polece\u0144 cmdlet<\/a> obs\u0142ugiwanych przez Power BI.<\/p>\n\n\n\n<p>W<strong> Za\u0142\u0105czniku nr 2<\/strong> znajduje si\u0119 przyk\u0142adowy skrypt PowerShell, kt\u00f3ry instaluje niezb\u0119dne modu\u0142y do obs\u0142ugi Power BI, nast\u0119pnie \u0142\u0105czy si\u0119 z Power BI Service, odszukuje workspace o podanej nazwie i tworzy nowy dataset.<\/p>\n\n\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\" data-enlighter-highlight=\" data-enlighter-linenumbers=\" data-enlighter-lineoffset=\" data-enlighter-title=\" data-enlighter-group=\">#Instalacja modu\u0142\u00f3w\nInstall PowerBI module\nInstall-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -Force\n#Po\u0142\u0105czenie do Power BI Service\n$User = \"&lt;nazwa u\u017cytkownika>\"\n$Password = ConvertTo-SecureString -String \"&lt;haslo>\" -AsPlainText -Force\n$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $Password\nConnect-PowerBIServiceAccount -Credential $Credential\n#Test po\u0142\u0105czenia, pobranie pe\u0142nej listy workspace\nGet-PowerBIWorkspace\n#Odszukanie id workspace na kt\u00f3rym b\u0119dzie utworzony dataset\n$SearchName = \"&lt;nazwa workspace>\"\n$Workspace = Get-PowerBIWorkspace -Name $SearchName\n$Workspace.Id\n#Tworzenie dataset\/datasource\n$Url = \"https:\/\/api.powerbi.com\/v1.0\/myorg\/groups\/$($Workspace.Id)\/datasets\"\n$Body =\n '{\n  \"name\": \"Push DS\",\n  \"defaultMode\": \"PushStreaming\",\n  \"tables\": [\n    {\n      \"name\": \"TestStreamTable\",\n      \"columns\": [\n        {\n          \"name\": \"Percentage\",\n          \"dataType\": \"double\"\n        },\n        {\n          \"name\": \"Color\",\n          \"dataType\": \"double\"\n        },\n        {\n          \"name\": \"ColorName\",\n          \"dataType\": \"string\"\n        },\n        {\n          \"name\": \"TimeStamp\",\n          \"dataType\": \"DateTime\"\n        }\n      ]\n    }\n  ]\n}'\nInvoke-PowerBIRestMethod -Url $Url -Body $Body -Method POST<\/pre>\n\n\n\n<p><strong>(Za\u0142\u0105cznik 2)<\/strong><\/p>\n\n\n\n<p>W tre\u015bci polecenia tworz\u0105cego dataset znajduje si\u0119 <strong>flaga defaultMode.<\/strong> Flaga mo\u017ce przyj\u0105\u0107 kilka warto\u015bci, kt\u00f3re s\u0105 dok\u0142adnie opisane w dokumentacji REST API.<\/p>\n\n\n\n<p>Flaga Streaming utworzy data source opisany w poprzednim rozdziale.<\/p>\n\n\n\n<p>Flaga PushStreaming utworzy Push dataset, z kolei flaga Push utworzy klasyczny dataset, dlatego nale\u017cy uwa\u017ca\u0107, aby si\u0119 nie pomyli\u0107. W niniejszym \u0107wiczeniu zosta\u0142a wykorzystana<strong> flaga PushStreaming<\/strong>.<\/p>\n\n\n\n<p>Dzi\u0119ki pracy w Power BI Desktop mo\u017cliwa jest pe\u0142na konfiguracja wszystkich element\u00f3w wygl\u0105du danej wizualizacji. Niestety nie wszystkie opcje ustawie\u0144 ostatecznie s\u0105 obs\u0142ugiwane po wys\u0142aniu raportu na serwer. B\u0119dzie mo\u017cna to zaobserwowa\u0107 na ko\u0144cu poni\u017cszego przyk\u0142adu.<\/p>\n\n\n\n<p><strong>Przygotowanie raportu zaczynamy od pod\u0142\u0105czenia si\u0119 do \u017ar\u00f3d\u0142a danych.<\/strong> Po\u00a0klikni\u0119ciu na\u00a0Get Data -> Power BI\u00a0datasets pojawi si\u0119 okno, w\u00a0kt\u00f3rym\u00a0b\u0119dzie mo\u017cna odszuka\u0107 stworzony w\u00a0poprzednim kroku dataset. Poniewa\u017c kolumny Color i\u00a0Percentage s\u0105\u00a0typu numerycznego, Power BI\u00a0stara si\u0119 je\u00a0agregowa\u0107, co\u00a0jest zachowaniem domy\u015blnym. Zazwyczaj mo\u017cna to\u00a0zmieni\u0107 po\u00a0przej\u015bciu na\u00a0zak\u0142adk\u0119 Model i\u00a0klikaj\u0105c na\u00a0interesuj\u0105c\u0105 kolumn\u0119, niestety przy Push dataset nie\u00a0jest to\u00a0mo\u017cliwe (Rys. 10). <\/p>\n\n\n\n<p>Pozosta\u0142a mo\u017cliwo\u015b\u0107 wy\u0142\u0105czenia agregowania kolumny bezpo\u015brednio na&nbsp;wizualizacji w&nbsp;zak\u0142adce Report.&nbsp;<strong>Testowy raport b\u0119dzie si\u0119 sk\u0142ada\u0107 z&nbsp;trzech wizualizacji:<\/strong>&nbsp;tabeli, pojedynczej karty (Card) oraz&nbsp;dodanej do&nbsp;listy dost\u0119pnych wizualizacji karty Card with States by&nbsp;OKVIZ.<\/p>\n\n\n\n<p>Je\u015bli chodzi o&nbsp;tabel\u0119, ma&nbsp;ona pokazywa\u0107 wszystkie dost\u0119pne kolumny oraz&nbsp;miary, kt\u00f3re zostan\u0105 utworzone w&nbsp;kolejnych krokach. Dodatkowo kolumna Percentage zostanie obj\u0119ta formatowaniem warunkowym. W&nbsp;zale\u017cno\u015bci od&nbsp;warto\u015bci kolumny Color kom\u00f3rka tej&nbsp;kolumny zostanie wype\u0142niona t\u0142em.&nbsp;<strong>Kolumna TimeStamp jest znacznikiem czasowym&nbsp;<\/strong>dodania nowej warto\u015bci i&nbsp;jednocze\u015bnie warto\u015bci\u0105 o&nbsp;najni\u017cszej gradacji, dzi\u0119ki czemu unikniemy agregowania kolumn Percentage i&nbsp;Color. Formatowanie warunkowe kolumny Percentage zosta\u0142o wykonane zgodnie z&nbsp;Rys. nr&nbsp;11.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/wp-content\/uploads\/2023\/04\/Rys-11-Tabela-formatowanie-warunkowe.png.webp\" alt=\"Ustawienie formatowania warunkowego kolumny Percentage.\" class=\"wp-image-5464\" title=\"Data Stream \u2013 strumienie danych Power BI 13\"\/><figcaption class=\"wp-element-caption\">Rys. 11. Ustawienie formatowania warunkowego kolumny Percentage.<\/figcaption><\/figure>\n\n\n\n<p>Wizualizacje typu Card pokazuj\u0105 jedn\u0105 warto\u015b\u0107, dlatego automatycznie dobierana jest agregacja typu SUM. Zmienimy to&nbsp;zachowanie, poniewa\u017c wizualizacje powinny pokaza\u0107&nbsp;<strong>ostatni\u0105 warto\u015b\u0107 kolumny Percentage<\/strong>, kt\u00f3ra&nbsp;znalaz\u0142a si\u0119 w&nbsp;dataset. Ponadto t\u0142o wizualizacji powinno zmieni\u0107 kolor zgodnie z&nbsp;identycznymi regu\u0142ami, jak ma&nbsp;to&nbsp;miejsce w&nbsp;przypadku tabeli. W&nbsp;tym celu najpierw nale\u017cy doda\u0107 dwie miary, pierwsza odnajdzie ostatni\u0105 warto\u015b\u0107 kolumny Color i&nbsp;mo\u017ce ona wygl\u0105da\u0107 tak&nbsp;jak poni\u017cej:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LastColor = LASTNONBLANKVALUE ( TestStreamTable&#091;TimeStamp], SUM ( TestStreamTable&#091;Color] ) )\n\nMiara odnajduj\u0105ca ostatni\u0105 warto\u015b\u0107 Percentage b\u0119dzie bardziej skomplikowana, ze wzgl\u0119du na mo\u017cliwo\u015b\u0107 przyj\u0119cia przez Percentage warto\u015bci NULL.\n\nLastPercentage =\n\nVAR MaxTime = MAXX(ALL(TestStreamTable),&#091;TimeStamp])\n\nVAR LastPercentage = MAXX(\n\n\u202f \u202f FILTER('TestStreamTable', 'TestStreamTable'&#091;TimeStamp] = MaxTime),\n\n\u202f \u202f \u202f \u202f 'TestStreamTable'&#091;Percentage])\n\nRETURN IF(ISBLANK(LastPercentage), \"No value\", LastPercentage)\n<\/code><\/pre>\n\n\n\n<p>Sprawdzenie ISBLANK jest spowodowane ograniczeniami wizualizacji Card by&nbsp;OKVIZ. Ta&nbsp;wizualizacja niestety nic nie&nbsp;pokazuje, gdy&nbsp;trafi do&nbsp;niej warto\u015b\u0107 typu NULL\/Blank.<\/p>\n\n\n\n<p>Miar\u0119 LastPercentage nale\u017cy umie\u015bci\u0107 w&nbsp;polu Fields (Rys. 12), natomiast formatowanie warunkowe nale\u017cy ustawi\u0107 w&nbsp;zak\u0142adce&nbsp;<strong>General -&gt; Effects -&gt; Background -&gt; Color.<\/strong>&nbsp;Warunki formatowania nale\u017cy zdefiniowa\u0107 identycznie jak w&nbsp;przypadku tabeli. Ponadto wizualizacja ma&nbsp;nadany tytu\u0142: Card. Dzi\u0119ki temu b\u0119dzie mo\u017cna j\u0105&nbsp;\u0142atwo odr\u00f3\u017cni\u0107 od&nbsp;kolejnej wizualizacji.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/wp-content\/uploads\/2023\/04\/Rys-12-Formatowanie-Card.png.webp\" alt=\"Formatowanie wizualizacji Card.\" class=\"wp-image-5465\" title=\"Data Stream \u2013 strumienie danych Power BI 14\"\/><figcaption class=\"wp-element-caption\">Rys. 12. Formatowanie wizualizacji Card.<\/figcaption><\/figure>\n\n\n\n<p>Nieco inaczej wygl\u0105da formatowanie wizualizacji Card with States by&nbsp;OKVIZ. Formatowanie nale\u017cy wykona\u0107 zgodnie z&nbsp;Rys. 13 i&nbsp;14. Na&nbsp;zak\u0142adce Add data to&nbsp;your visual w&nbsp;polu Measures nale\u017cy umie\u015bci\u0107 LastPercentage. W&nbsp;polu Measure for comparison nale\u017cy umie\u015bci\u0107 LastColor. Na&nbsp;zak\u0142adce Format your visual -&gt; Visual -&gt; States trzeba wybra\u0107 nast\u0119puj\u0105ce opcje (Rys. 14):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change the color of: Background,<\/li>\n\n\n\n<li>Unmatched state color: kolor szary<\/li>\n\n\n\n<li>Comparison operator: Equal to\u00a0(=)<\/li>\n<\/ul>\n\n\n\n<p>Ustawie\u0144 zak\u0142adek Condition 1, Condition 2, Condition 3 dokonujemy zgodnie z&nbsp;Rys. 14.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/wp-content\/uploads\/2023\/04\/Rys-13-Formatowanie-Card-OKVIZ-cz-1.png\" alt=\"Rys 13 Formatowanie Card OKVIZ cz 1 - Data Stream \u2013 strumienie danych Power BI\" class=\"wp-image-5466\" title=\"Data Stream \u2013 strumienie danych Power BI 15\"\/><figcaption class=\"wp-element-caption\">Rys. 14. Formatowanie wizualizacji Card with States by&nbsp;OKVIZ.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/wp-content\/uploads\/2023\/04\/Rys-14-Formatowanie-Card-OKVIZ-cz-2.png\" alt=\"Rys 14 Formatowanie Card OKVIZ cz 2 - Data Stream \u2013 strumienie danych Power BI\" class=\"wp-image-5467\" title=\"Data Stream \u2013 strumienie danych Power BI 16\"\/><figcaption class=\"wp-element-caption\">Rys. 15. Formatowanie wizualizacji Card with States by&nbsp;OKVIZ.<\/figcaption><\/figure>\n\n\n\n<p>Po&nbsp;przygotowaniu raportu w&nbsp;powy\u017cszy spos\u00f3b mo\u017cna dokona\u0107 pr\u00f3bnego uruchomienia generatora danych i&nbsp;sprawdzi\u0107 zachowanie wizualizacji. Z&nbsp;powodzeniem mo\u017cna skorzysta\u0107 z&nbsp;tego samego generatora, kt\u00f3ry&nbsp;by\u0142 u\u017cyty w&nbsp;rozdziale Streaming dataset, trzeba jedynie podmieni\u0107 push URL, aby generator wysy\u0142a\u0142 dane do&nbsp;odpowiedniego dataset.&nbsp;<strong>W&nbsp;czasie pracy generatora danych wizualizacje w&nbsp;Power BI&nbsp;Desktop nie&nbsp;s\u0105&nbsp;aktualizowane automatycznie.<\/strong>&nbsp;Niezb\u0119dne jest u\u017cycie przycisku Refresh \u2013 umo\u017cliwia to&nbsp;sprawdzenie efektu prac przed&nbsp;wys\u0142aniem raportu na&nbsp;serwer. Uruchomienie raportu na&nbsp;serwerze w&nbsp;czasie, gdy&nbsp;generator danych pracuje, r\u00f3wnie\u017c nie&nbsp;powoduje automatycznego od\u015bwie\u017cenia wizualizacji.&nbsp;<strong>Tak&nbsp;jak w&nbsp;poprzednich metodach konieczne jest utworzenie dashboardu<\/strong>. Efekt prac, czyli dashboard z&nbsp;przypi\u0119tymi trzema wizualizacjami, kt\u00f3re zosta\u0142y utworzone wcze\u015bniej, wida\u0107 na&nbsp;Rys. 16.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/wp-content\/uploads\/2023\/06\/Rys-15-Push-dataset_1.gif\" alt=\"Dashboard z Push Dataset w trakcie podawania nowych danych\" class=\"wp-image-8866\" title=\"Data Stream \u2013 strumienie danych Power BI 17\"\/><figcaption class=\"wp-element-caption\">Rys. 16. Dashboard z&nbsp;Push Dataset w&nbsp;trakcie podawania nowych danych<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Ograniczenia<\/h4>\n\n\n\n<p><\/p>\n\n\n\n<p>W&nbsp;tym miejscu docieramy do&nbsp;problemu, kt\u00f3ry&nbsp;pojawi\u0142 si\u0119 w&nbsp;poprzednich typach dataset\u00f3w, czyli konieczno\u015bci utworzenia dashboardu oraz&nbsp;r\u0119cznego przeniesienia push URL. Niestety w&nbsp;tym przypadku r\u00f3wnie\u017c niezb\u0119dna b\u0119dzie praca developera podczas publikacji raportu na&nbsp;Power BI&nbsp;Service.<\/p>\n\n\n\n<p>Op\u00f3\u017anienie w&nbsp;od\u015bwie\u017ceniu wizualizacji jest rzeczywi\u015bcie nieznacznie wi\u0119ksze ni\u017c w&nbsp;przypadku pozosta\u0142ych typ\u00f3w dataset\u00f3w. Wida\u0107 nawet, \u017ce&nbsp;wizualizacja typu Card w&nbsp;pewnym momencie pokazuje zaskakuj\u0105cy b\u0142\u0105d NaN, zwi\u0105zany z&nbsp;dzieleniem przez&nbsp;0. Na&nbsp;pocieszenie pozostaje fakt, \u017ce&nbsp;w&nbsp;zamian&nbsp;<strong>otrzymujemy niemal pe\u0142en dost\u0119p do&nbsp;wszystkich element\u00f3w formatowania wizualizacji<\/strong>. S\u0105&nbsp;pewne ograniczenia widoczne chocia\u017cby pomi\u0119dzy wizualizacj\u0105 Card i&nbsp;Card by&nbsp;OKVIZ. W&nbsp;obu zosta\u0142o ustawione formatowanie t\u0142a, jednak \u2013 jak wida\u0107 ostatecznie w&nbsp;przypadku wizualizacji Card \u2013 nie&nbsp;dzia\u0142a ono poprawnie. Niestety ka\u017cdorazowo trzeba sprawdzi\u0107 na&nbsp;dashboardzie, czy&nbsp;wszystkie zaimplementowane funkcjonalno\u015bci dzia\u0142aj\u0105 zgodnie z&nbsp;oczekiwaniami.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Podsumowanie\"><\/h2>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jednym z wiod\u0105cych trend\u00f3w cyfrowej transformacji jest analiza danych w czasie rzeczywistym, a platforma Power BI to jedno z najch\u0119tniej wykorzystywanych, najpot\u0119\u017cniejszych dost\u0119pnych na rynku rozwi\u0105za\u0144 Business Intelligence. Narz\u0119dzie Power BI umo\u017cliwia prezentacj\u0119 danych strumieniowych i cho\u0107 przygotowanie raportu przedstawiaj\u0105cego takie dane pocz\u0105tkowo mo\u017ce wyda\u0107 si\u0119 nieco skomplikowane ze wzgl\u0119du na mnogo\u015b\u0107 opcji, warto si\u0119 zaznajomi\u0107 z tym zagadnieniem. Raporty, w kt\u00f3rych na bie\u017c\u0105co pojawiaj\u0105 si\u0119 najnowsze dane, wnosz\u0105 powiew nowoczesno\u015bci oraz przykuwaj\u0105 uwag\u0119 u\u017cytkownika. Z tego artyku\u0142u dowiesz si\u0119, jakie s\u0105 mo\u017cliwo\u015bci w zakresie prezentacji danych strumieniowych.<\/p>\n","protected":false},"author":178,"featured_media":31891,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":36,"footnotes":""},"categories":[1,582],"tags":[51,599],"offering":[521],"class_list":["post-31859","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-business-intelligence","tag-power-bi","offering-modern-data-solutions"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31859","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/178"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=31859"}],"version-history":[{"count":6,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31859\/revisions"}],"predecessor-version":[{"id":33902,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31859\/revisions\/33902"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/31891"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=31859"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=31859"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=31859"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=31859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}