Power BI – OneDrive refresh czyli sposób na odświeżanie i synchronizację raportów

PowerBI_OneDriveRefresh_000

Dane w Power BI mogą być odświeżone na kilka sposobów. Najpopularniejszym z nich jest bez wątpienia odświeżenie na podstawie harmonogramu (lub na żądanie) danych zaimportowanych do pliku Power BI opublikowanego w serwisie powerbi.com. W przypadku gdy łączymy się bezpośrednio do modelu Analysis Services (Live Connnection) lub do bazy danych (Direct Query) odświeżanie jako takie nie jest istotne (pomijając oczywiście odświeżenie cache i tym podobne). Kwestie samej bramy również są znane i wiadomo powszechnie, że aby odświeżyć dane ze źródła nie znajdującego się w chmurze musimy mieć stworzony bezpieczny tunel między rzeczoną chmurą, a naszym środowiskiem lokalnym i czymś takim jest właśnie wspomniany gateway. Ale czy to jedyne możliwości jakie mamy do dyspozycji? Oczywiście, że nie! Istnieje jeszcze kilka dodatkowych możliwości, a jedną z nich jest tzw. OneDrive refresh o którym chciałbym napisać parę słów w niniejszym artykule – zapraszam!

Na wstępie powiedzmy sobie kilka słów objaśniających jak to wszystko działa. Wyobraźmy sobie sytuację, że stworzyliśmy sobie raport w Power BI Desktop, w którym zaimportowaliśmy dane z naszych lokalnych zasobów takich jak np. baza danych czy zestaw plików płaskich. W następnej kolejności plik raportu umieściliśmy na OneDrive (bezpośrednio lub w określonej lokalizacji Sharepoint Online). Z poziomu powerbi.com pobraliśmy plik ze wspomnianej lokalizacji OneDrive. Co tak naprawdę nam ten scenariusz daje i jakie są plusy tego podejścia? Wiąże się to z dosyć ciekawym zachowaniem znanym w Power BI właśnie jako OneDrive refresh. Polega on mniej więcej na tym, że usługa Power BI cyklicznie synchronizuje pliki znajdujące się w serwisie z plikami źródłowymi znajdującymi się na OneDrive! Synchronizacja ta jak już wspomniałem odbywa się albo automatycznie (zgodnie z tym co mówi dokumentacja domyślnie proces ten odbywa się co około godzinę) lub na żądanie.

W uproszczeniu architektura tego rozwiązania wygląda następująco:

Mamy zatem plik pbix który znajduje się na OneDrive oraz obiekty takie jak raporty oraz datasety stworzone na jego podstawie znajdujące się na serwisie powerbi. OneDrive refresh polega na zsynchronizowaniu zarówno datasetów jak i samych raportów z plikiem pbix na OneDrive. Podczas procesu odświeżania danych sprawdzany jest plik OneDrive po to aby wiedzieć czy się on w jakiś sposób zmienił czy też nie, jeśli tak następuje synchronizacja, a następnie odświeżenie danych poprzez połączenie ze źródłem. Jeśli natomiast plik się nie zmienił to następuje samo połączenie do źródła w celu pobrania najnowszych danych.

Aby lepiej zrozumieć i przetestować wspomniany mechanizm zobaczmy jego działanie w praktyce. W tym celu stworzyłem na bazie WideWorldImportersDW prosty raport wyglądający następująco:

Następnie wrzuciłem powstały plik pbix o nazwie OneDriveSync do odpowiedniego folderu Sharepoint Online:

Mając plik w odpowiedniej lokalizacji przeszedłem na stronę główną wybranego workspace. W tym miejscu nie pozostaje nic innego jak wybrać opcję Create new content -> Files -> Get:

W otwartym oknie wybrałem SharePoint – Team Sites:

Konfiguracja sprowadza się do wprowadzenia adresu URL naszej strony sharepoint zgodnie z przykładem https://organizacja.sharepoint.com/teams/nazwaTeamu lub https://organizacja.sharepoint.com/sites/nazwaTeamu. Całość potwierdzamy klikając w Connect:

 

Jak możecie się domyślać w dalszej części wskazujemy interesujący nas plik i ponownie klikamy Connect:

Po zaimportowaniu w naszym workspace powinien pojawić się pusty dashboard, raport oraz dataset. Gdy wejdziemy w ustawienia Schedule refresh datasetu naszym oczom ukaże się opcja związana z opisywanym mechanizmemchodzi mianowicie o opcję OneDrive – refresh:

Oczywiście należy pamiętać, że nie będzie ona widoczna w przypadku gdy nasz plik pbix nie pochodzi z OneDrive. Gdy opcja OneDrive refresh pozostanie włączona to tak jak już wspomniałem raz na około godzinę raport zostanie zsynchronizowany z plikiem znajdującym się na onedrive. Co w tym przypadku oznacza synchronizacja? Czy dotyczy wizualizacji i modelu czy również danych znajdujących się w pliku? Na te pytanie postaram się już za chwilkę odpowiedzieć. Na ten moment zmieńmy nieco nasz raport, a raczej jego kolorystykę:

Następnie plik ten zapisałem i zaktualizowałem na sharepoint. Następnie wszedłem na portal powerbi i kliknąłem Refresh na datasecie. W historii odświeżeń zobaczyłem następujące wpisy:

W sekcji Scheduled dostałem błąd ponieważ nie mam skonfigurowanego gatewaya do mojej lokalnej bazy danych. W sekcji OneDrive z kolei wszystko się powiodło i teraz w workspace widoczny jest mój najnowszy raport z nową kolorystyką. Jak już wspomniałem we wstępie synchronizacja z OneDrive obejmuje również dane co możemy zobaczyć porównując oba poniższe zrzuty ekranowe gdzie wyraźnie widać nowe punkty na mapie czy też zmienione wartości niektórych miar (po prawej nowa wersja raportu):

Tutaj może pojawić się pytanie czy OneDrive refresh łączy się w jakiś sposób do źródła i pobiera najnowsze dane, odpowiedź powinna być oczywista i brzmi “nie”. Proces ten po prostu synchronizuje dane pomiędzy plikiem w serwisie, a plikiem na OneDrive.

Mamy jeszcze dwa scenariusze do sprawdzenia:

  1. Co się stanie gdy dane w źródle się zmienią, a plik na OneDrive nie.
  2. Co się stanie gdy dane w źródle się zmienią oraz plik w OneDrive również.

Aby przetestować pierwszy scenariusz uruchomiłem gateway i zmieniłem nieco dane w źródle. Po odświeżeniu na żądanie raport zmienił się w następujący sposób:

w logu zauważymy natomiast, że standardowy refresh się powiódł, a OneDrive refresh w ogóle nie odpalił:

Dlaczego tak się stało? Ponieważ plik na OneDrive w ogóle się nie zmienił. Aby mieć całościowy obraz przejdźmy do ostatniego testu i zmieńmy zarówno plik (kolejny zestaw kolorów) jak i dane w systemie źródłowym. Z punktu widzenia odświeżania możemy podejrzeć następujące informacje:

Obie synchronizacje się powiodły, a patrząc na raport widzimy następujący rezultat:

Dane zostały zatem odświeżone na podstawie źródła ale widzimy również, że layout raportu został zaktualizowany na podstawie pliku OneDrive co jest zgodne z architekturą przedstawioną na wstępie.

Musiałem również zaspokoić moją ciekawość co się stanie gdy odświeżenie danych poprzez gateway się nie powiedzie, a plik na OneDrive został zmieniony.
Spójrzmy na logi:

Skoro połączenie do źródła się nie udało, a połączenie do OneDrive przebiegło pomyślnie to rezultat może być tylko jeden, a mianowicie zarówno raport jak i dataset został odświeżony na podstawie pliku z OneDrive:

Moim zdaniem znajomość tego całego procesu jest niezmiernie istotna bo w niektórych przypadkach może to prowadzić do dosyć dużego zamieszania i konsternacji. Funkcjonalność synchronizacji danych z OneDrive jest bardzo pomocna w przypadku gdy chcemy w jakiś zorganizowany sposób przerzucać raporty pomiędzy środowiskami ale również w innym przypadkach. Wyobraźmy sobie sytuację gdzie nie mamy gatewaya a chcemy jakoś automatycznie odświeżać raporty w trybie Import – nic nie stoi na przeszkodzie aby np. przy użyciu powershell wrzucać pliki pbix na OneDrive i podpiąć je do serwisu tak jak to zostało przedstawione w artykule. Innym zastosowaniem jest np. sytuacja gdy użytkownik publikuje raport na sharepoint i my z naszej strony automatycznie je synchronizujemy z serwisem. Może się zdarzyć również tak, że wersjonowanie plików po stronie Sharepointa/OneDrive jest naszą kontrolą wersji. Scenariuszy użycia jest naprawdę dużo a wiadomo, że im więcej wiemy tym większe możliwości się przed nami otwierają. Pozdrawiam serdecznie.

Follow me

Adrian Chodkowski

SQL geek, Data enthusiast, Consultant & Developer
Adrian Chodkowski
Follow me

Leave a Comment

Your email address will not be published. Required fields are marked *