Semantic Link jako pomost między Power BI a Pythonem

Integracja logiki biznesowej z modeli Power BI z elastycznością języka Python w ramach Microsoft Fabric wymagała dotychczas powielania struktur danych. Dzięki wprowadzeniu funkcjonalności Semantic Link, barierę tę wyeliminowano, tworząc bezpośredni pomost między warstwą semantyczną a środowiskiem Data Science.

Rozwiązanie to pozwala na odczyt miar DAX, relacji oraz metadanych bezpośrednio w notebookach. Umożliwia to wykorzystanie zdefiniowanych już reguł biznesowych w procesach czyszczenia danych oraz budowie modeli uczenia maszynowego, co zapewnia spójność wyników i skraca czas implementacji zaawansowanej analityki.

Plan scenariusza biznesowego – Automatyczny audyt spójności danych

    • Cel biznesowy: Zapewnienie pełnej zgodności danych między warstwą analityczną (Lakehouse) a warstwą prezentacyjną (Power BI). Celem jest eliminacja błędów wynikających z tzw. dryfu danych lub błędnej logiki DAX, które obniżają zaufanie do raportów.
    • Efekt: Semantic Link wykorzystano jako most weryfikacyjny. Dzięki niemu możliwe jest jednoczesne pobranie danych bezpośrednio z SQL Endpoint oraz finalnych miar z modelu semantycznego w ramach jednego procesu (Notebook). Pozwala to na automatyczne zestawienie wyników z wynikami raportowymi, aby proaktywnie działać z kontrolą jakości, audytem danych i wiarygodnością danych.

Biblioteka sempy: Dostęp do miar DAX i automatyczne wykrywanie relacji

Biblioteka sempy stanowi techniczny fundament Semantic Link, umożliwiając bezpośrednią interakcję z modelami semantycznymi Power BI z poziomu języka Python. Traktuje ona model nie tylko jako źródło danych, ale jako strukturę posiadającą własną logikę i relacje.[1]

    • Wykonywanie zapytań DAX: Funkcja evaluate_dax() umożliwia bezpośrednie pobieranie wyników miar i kalkulacji zdefiniowanych w modelu Power BI. Pozwala to na reużycie logiki biznesowej w środowisku Python bez konieczności jej powielania.
    • Inwentaryzacja zasobów: Dzięki funkcjom list_datasets() oraz list_tables() możliwe jest pobieranie listy dostępnych modeli semantycznych oraz tabel w ramach obszarów roboczych Microsoft Fabric.
    • Szybki import tabel: Funkcja read_table() pozwala na wczytywanie całych tabel z modelu bezpośrednio do ramki danych, co eliminuje potrzebę pisania zapytań SQL dla standardowych operacji pobierania danych.
    • Integracja z ekosystemem analitycznym: Wyniki operacji są natywnie ładowane do struktur DataFrame (Pandas/Spark). Umożliwia to natychmiastowe wykorzystanie bibliotek takich jak Scikit-learn, Matplotlib czy Seaborn do budowy modeli ML i zaawansowanych wizualizacji.
    • Zarządzanie połączeniami: Moduł stanowi główny interfejs komunikacyjny między notatnikiem a warstwą semantyczną, pozwalając na dynamiczne rozwiązywanie identyfikatorów raportów (np. przez funkcję resolve_dataset_id).
    • Zastosowanie Semantic Link pozwala na zachowanie „pojedynczego źródła prawdy”, ponieważ każda zmiana w logice biznesowej modelu Power BI jest automatycznie uwzględniana w analizach prowadzonych w notebookach.

[1] https://learn.microsoft.com/en-us/fabric/data-science/read-write-power-bi-python

Moduły sempy: Zarządzanie strukturą, jakością i wizualizacja modelu

Biblioteka sempy dzieli się na kilka kluczowych modułów wspierających pracę z warstwą semantyczną. Poniżej zestawienie głównych obszarów wraz z przykładami zastosowań.

  1. sempy.fabric – Interakcja z Power BI. Moduł ten służy do komunikacji z obszarami roboczymi i modelami.[2]
    • list_datasets() / list_tables(): Pobieranie listy dostępnych zasobów. Zastosowanie: Automatyczna inwentaryzacja modeli w dużych środowiskach Fabric.
    • evaluate_dax(dataset, query): Wykonywanie zapytań DAX bezpośrednio z notebooka. Przykład: Pobranie wyniku miary [Total Sales] z podziałem na regiony do ramki danych Pandas.
    • read_table(dataset, table): Wczytywanie całych tabel z modelu. Zastosowanie: Szybki import danych bez konieczności pisania zapytań SQL.
  1. sempy.relationships – Zarządzanie strukturą. Moduł pozwala na pracę z relacjami zdefiniowanymi w modelu semantycznym.[3]
    • list_relationships(): Wyświetlanie powiązań między tabelami (klucze obce, kardynalność). Zastosowanie: Weryfikacja spójności schematu przed rozpoczęciem analizy.
    • find_relationships(df_list): Automatyczne sugerowanie potencjalnych relacji między wczytanymi ramkami danych. Przykład: Wykrycie brakujących powiązań między nowymi danymi z jeziora (Lakehouse) a istniejącym modelem.
  1. sempy.dependencies – Analiza logiki i jakości. Narzędzia do badania zależności funkcyjnych wewnątrz danych.[4]
    • find_dependencies(df): Wykrywanie zależności typu „jeden do jednego” lub „wiele do jednego” między kolumnami. Przykład: Sprawdzenie, czy każdy ProductID ma przypisaną tylko jedną nazwę ProductName.
    • plot_dependency_violations(df, col1, col2): Wizualizacja rekordów łamiących zasady biznesowe. Zastosowanie: Szybkie namierzenie błędów w danych źródłowych (np. jeden kod pocztowy przypisany do dwóch różnych miast).

[2] https://learn.microsoft.com/en-us/python/api/semantic-link-sempy/sempy.fabric?view=semantic-link-python
[3] https://learn.microsoft.com/en-us/python/api/semantic-link-sempy/sempy.relationships?view=semantic-link-python
[4] https://learn.microsoft.com/en-us/python/api/semantic-link-sempy/sempy.dependencies?view=semantic-link-python

Runtime

Zrozumienie fundamentów technicznych operacji wykonywanych przez Semantic Link jest kluczowe dla poprawnej konfiguracji i optymalizacji procesów analitycznych wewnątrz platformy.

Środowisko uruchomieniowe (Runtime) to dedykowany zestaw zasobów obliczeniowych, na których fizycznie realizowane są instrukcje zawarte w notatniku. W ekosystemie Microsoft Fabric kod Spark oraz funkcje biblioteki sempy są uruchamiane w ramach jednostek mocy obliczeniowej (Capacity) przypisanych do konkretnego obszaru roboczego (Workspace). Oznacza to, że cała egzekucja zapytań i transformacji odbywa się wewnątrz bezpiecznej infrastruktury chmurowej organizacji, co eliminuje konieczność przesyłania danych poza dedykowaną warstwę bezpieczeństwa.[5]

Biblioteka sempy pełni rolę pomostu, który pozwala na interakcję z modelem semantycznym bez konieczności wychodzenia poza runtime notatnika. Wszystkie wywołania, takie jak pobieranie metadanych czy kalkulacji DAX, są procesowane przez silnik Power BI zintegrowany z Fabric, co gwarantuje spójność wyników z raportami końcowymi.

Warto zaznaczyć, że choć funkcja evaluate_dax() standardowo zwraca wyniki w postaci ramki danych Pandas, nie stanowi to ograniczenia dla analityka. Dzięki natywnej integracji z silnikiem Spark, możliwe jest błyskawiczne przekonwertowanie danych na Spark DataFrame (np. przy użyciu spark.createDataFrame(df)), co otwiera drogę do przetwarzania rozproszonego na wielkich zbiorach danych. Po pobraniu wyników do pamięci runtime’u, dane te mogą być również ładowane do innych wydajnych bibliotek, takich jak Polars, dając pełną swobodę w doborze narzędzi w zależności od wymagań dotyczących skali i wydajności projektu.

[5] https://learn.microsoft.com/en-us/fabric/data-engineering/runtime

Debugowanie semantic link (sempy)

  1. Błąd: AttributeError (Niewłaściwa nazwa funkcji)
    • Objaw: Komunikat „module 'sempy.fabric’ has no attribute '…'”.
    • Przyczyna: Wystąpienie literówki w nazwie wywoływanej funkcji lub próba użycia metody z nieodpowiedniego modułu (np. szukanie list_datasets w sempy.viz).
    • Rozwiązanie: Wymagana jest weryfikacja pisowni (np. zamiana 'eval_dax’ na poprawną formę 'evaluate_dax’) oraz sprawdzenie poprawności zaimportowanego modułu. [6]
  1. Błąd: FabricHTTPError (Brak dostępu do zasobu)
    • Objaw: Komunikat „PowerBI_Notebook_DatasetNotFound”.
    • Przyczyna: Niepowodzenie funkcji resolve_dataset_id() w odnalezieniu modelu o wskazanej nazwie w bieżącym obszarze roboczym lub brak odpowiednich uprawnień użytkownika.
    • Rozwiązanie: Należy upewnić się, że nazwa zestawu danych jest identyczna z widoczną w Microsoft Fabric oraz zweryfikować dostęp do danego Workspace. [7]
  1. Błąd: TypeError (Niewłaściwe parametry wejściowe)
    • Objaw: Komunikat „evaluate_dax() missing 1 required positional argument: 'query'”.
    • Przyczyna: Przekazanie do funkcji niewłaściwej liczby argumentów lub danych o nieprawidłowym typie.
    • Rozwiązanie: Konieczne jest sprawdzenie sygnatury funkcji; w przypadku evaluate_dax wymagane jest podanie zarówno identyfikatora modelu, jak i treści zapytania DAX jako ciągu znaków (string). [8]
  1. Błąd: RuntimeError / MdxScript Error (Błąd składni DAX)
    • Objaw: Komunikat „Calculation error in measure…”. [
    • Przyczyna: Przesłanie zapytania DAX, które jest niepoprawne logicznie dla silnika Power BI (np. odwołanie do nieistniejącej miary lub tabeli).
    • Rozwiązanie: Zaleca się uprzednie przetestowanie i walidację zapytań DAX w narzędziu DAX Studio przed ich implementacją w notatniku Python.
  1. Błąd: Niezgodność typów danych (Data Type Mismatch)
    • Objaw: Pojawienie się wartości 'null’ lub błędnych wyników w ramce danych Spark po konwersji.
    • Przyczyna: Brak automatycznego mapowania typów zwracanych przez DAX na oczekiwane struktury w środowisku Spark.
    • Rozwiązanie: Stosuje się jawne rzutowanie typów przy użyciu funkcji .cast() (np. na „double” lub „date”) bezpośrednio po utworzeniu DataFrame z wyniku operacji sempy.

[6] https://docs.python.org/3/library/exceptions.html
[7] https://learn.microsoft.com/en-us/fabric/data-science/semantic-link-power-bi?tabs=sql
[8] https://docs.python.org/3/tutorial/errors.html

Przykład użycia Semantic Link w Ms Fabric:

Automatyczne wykrywanie niezgodności między modelem semantycznym, a raportem

Czy zdarzyło Ci się kiedyś, że development raportu się zakończył, wszystkie testy przeszły pozytywnie, a dopiero po dłuższym czasie klient dowiaduje się o rozbieżnościach między hurtownią danych, a raportem Power BI?

Semantic Link jest właśnie po to.

Aby umożliwić porównanie różnic między hurtownią danych, a raportem Power BI należy pobrać z modelu semantycznego sprzedaż po miesiącach. W operatorze „dax_query” można przekazać niemal dowolny kod DAX, jednakże na potrzeby przykładu pobierana jest sprzedaż po miesiącach.

Następnie odbywa się połączenie z SQL Endpoint po stronie Lakehouse. Pobierane są dane z widoku sprzedaży dziennej, agregowane do miesięcy i porównywane ze sprzedażą z modelu semantycznego. Porównywane są dwa zestawy danych z dodatkowym zastrzeżeniem dotyczącym wartości null. Szukana jest zarówno sprzedaż występująca w modelu, a nie występują w widoku po stronie Lakehouse, jak i w drugą stronę. Puste wartości są zastępowane 0, aby porównanie danych nie zwróciło pustej wartości.

Efekt jest wyświetlany poniżej:

Tabela następnie powinna być umieszczana w body maila. Jednakże w przypadku dużych tabel takie podejście nie jest poprawne. Stąd też jest wybierane top 10 różnic, przekształcane na tabelę HTML oraz następnie budowany jest dynamiczny json. Json zostanie wykorzystany podczas potoku danych, aby dynamicznie przekazać w body maila efekt tabeli.

Wybór potoku (Pipeline) do obsługi powiadomień pozwala na oddzielenie logiki przetwarzania danych od warstwy komunikacji. Wykorzystanie natywnych konektorów platformy zapewnia wyższy poziom bezpieczeństwa oraz ułatwia centralne zarządzanie autoryzacją i monitorowanie statusu operacji. Takie podejście jest zgodne z zasadą rozdzielenia odpowiedzialności, gdzie notatnik odpowiada za obliczenia, a potok za orkiestrację i alertowanie.

Ustawianie pipeline, jeżeli notatnik wyświetli błąd, to spróbuje się on wykonać jeszcze dwa razy:

Przypinany jest następnie notebook:

Następnie dodaje się nową akcję „Office 365 Email” i wybiera jej wykonanie po poprawnym zakończeniu notatnika. Do konfiguracji używa się skrzynki mailowej oraz wprowadza dynamiczne wyrażenia pobierane z notatnika.

Temat maila wymaga pobrania do z notatnika, stąd też łączy się słowa „Znaleziono błąd w raporcie” z nazwą raportu.

Następnie z body maila jest przekształcana tabela.

Całość po wykonaniu wygląda następująco:

Podsumowanie i wnioski

Zaprezentowane podejście do automatyzacji testów danych obrazuje rzeczywistą wartość, jaką Semantic Link wnosi do ekosystemu Microsoft Fabric. Dzięki bezpośredniemu porównaniu stanu modelu semantycznego z danymi w SQL Endpoint, możliwe staje się błyskawiczne wykrywanie niespójności, które mogłyby wpłynąć na kluczowe decyzje biznesowe.

Wdrożenie biblioteki sempy w procesach CI/CD oraz monitoringu jakości danych pozwala na:

    • Zapewnienie spójności: Wyeliminowanie ryzyka rozbieżności między warstwą transformacji danych (Warehouse) a warstwą prezentacji (Power BI).
    • Centralizację logiki biznesowej: Definicje kluczowych wskaźników efektywności (KPI) oraz ich logika pozostają w jednym miejscu. Dzięki Semantic Link są one w pełni reużywalne w środowisku notebooków, co wyklucza potrzebę powielania definicji biznesowych w różnych narzędziach.
    • Oszczędność czasu: Automatyzacja powtarzalnych testów porównawczych, które dotychczas wymagały manualnej weryfikacji lub tworzenia złożonych, odseparowanych skryptów.
    • Proaktywne zarządzanie błędami: Integracja wyników testów z potokami (pipelines) i systemami powiadomień umożliwia reakcję na incydenty, zanim zostaną one dostrzeżone przez użytkowników końcowych.

Semantic Link skutecznie zaciera granicę między rolami Data Engineer i Power BI Developer. Sprawia, że model semantyczny przestaje być zamkniętą „czarną skrzynką”, a staje się pełnoprawnym, programowalnym komponentem nowoczesnej platformy danych. W dobie rosnącej złożoności systemów analitycznych ujednolicenie narzędzi oraz zachowanie „pojedynczego źródła prawdy”) jest niezbędne dla budowy pełnego zaufania do generowanych raportów i analiz narzędzi jest niezbędne dla zachowania pełnego zaufania do generowanych raportów i analiz.

W Datariselab mierzymy się z takimi wyzwaniami na co dzień. Jeśli Twoja firma stawia pierwsze kroki w Microsoft Fabric lub posiada już gotowe rozwiązania, ale chce wdrożyć bardziej zaawansowane mechanizmy kontroli jakości, nasi certyfikowani specjaliści pomogą Ci przejść przez ten proces. Pomożemy wdrożyć automatyczne testowanie, zaawansowaną analizę spójności danych w ramach środowiska Microsoft Fabric oraz monitoring w Twojej organizacji, abyś mógł w pełni polegać na dostarczanych wynikach.

 

Skontaktuj się z nami i sprawdź, jak możemy usprawnić Twój ekosystem analityczny!

Umów spotkanie: