I. Wprowadzenie
Grafiki SVG w Power BI zapewniają poziom precyzji i możliwości narracyjnych, których nie są w stanie zapewnić standardowe wykresy. Ponieważ SVG jest tylko znacznikiem, każdy piksel – pozycje, kształty, etykiety i interakcje – może być sterowany przez miary i dynamiczne reguły biznesowe. W rezultacie otrzymujemy kompaktowe, spójne wizualizacje (niestandardowe wskaźniki, wykresy punktowe, wykresy kaskadowe, osie czasu, karty wyników, schematy), które pozostają responsywne w stosunku do fragmentatorów, drążenia danych i kontekstu na poziomie wiersza bez zewnętrznych dodatków.
W tym artykule omówimy krok po kroku proces tworzenia wizualizacji SVG od podstaw: wybór układu współrzędnych, powiązanie miar z geometrią, formatowanie tekstu w celu zapewnienia czytelności, nakładanie warstw adnotacji i łączenie interaktywności. Po drodze omówimy najlepsze praktyki (skale, wypełnienie, wyrównanie, dostępność, tokeny kolorów, higiena wydajności) i zwrócimy uwagę na typowe pułapki (nadmierne rysowanie, kolizje etykiet, nadmierne obciążenie DAX i kompromisy związane z konserwacją). Na koniec otrzymasz wzór wielokrotnego użytku, który można dostosować do dowolnego wskaźnika KPI lub układu.
Rozważymy również zalety i wady. Plusy: precyzyjna kontrola pikseli, niewielkie rozmiary, możliwość ponownego wykorzystania modelu semantycznego i płynne dostosowywanie motywów. Minusy: krzywa uczenia się, konieczność dyscypliny w nazewnictwie i testowaniu oraz potencjalne problemy z wydajnością, jeśli znaczniki lub DAX nie są zoptymalizowane. Zrozumienie obu stron pomoże Ci zdecydować, kiedy SVG jest odpowiednim narzędziem, a kiedy natywna grafika jest „wystarczająco dobra”.
Nasz zespół specjalizuje się właśnie w tym: przekształcaniu ulubionych wykresów i wskaźników KPI w w pełni zautomatyzowane, gotowe do produkcji raporty Power BI oparte na niestandardowym SVG. Od systemów odkrywania i projektowania po inżynierię DAX i zarządzanie, wspieramy klientów na każdym etapie, aby ich raporty były nie tylko piękne, ale także łatwe w utrzymaniu, szybkie i godne zaufania.
II. Czym jest SVG
Wizualizacje SVG w Power BI to wizualizacje, które renderują grafikę przy użyciu Scalable Vector Graphics (SVG) – formatu opartego na XML, który pozostaje ostry w każdym rozmiarze. W Power BI zazwyczaj generuje się ciągi SVG w DAX lub Power Query i wyświetla je za pomocą wizualizacji obsługującej HTML/SVG (np. HTML Content, Deneb lub niestandardowe wizualizacje). Pozwala to rysować w pełni niestandardowe kształty (ikony, paski, punktory, paski Gantta, flagi, wykresy sparkline) z dynamicznymi kolorami, rozmiarami i etykietami opartymi na danych.
Dlaczego warto używać SVG w Power BI?
-
- Grafika o idealnej rozdzielczości, niezależna od rozdzielczości.
- Wysoka dynamika: każdy atrybut (kolor, położenie, krycie, tekst) może reagować na miary.
- Umożliwia tworzenie wykresów niedostępnych w standardowej wersji (wykresy punktowe, mostki kaskadowe, niestandardowe kafelki KPI).
Kompromisy:
-
-
Większy nakład pracy przy projektowaniu i utrzymaniu (tworzysz znaczniki SVG).
-
Może działać wolniej, jeśli generujesz bardzo duże pliki SVG w każdym wierszu.
-
Dostępność i podpowiedzi wymagają starannego podejścia.
-
III. Zalety i wady korzystania z SVG
Zalety:
-
-
Precyzyjna kontrola pikseli
Dokładne pozycjonowanie, rozmiar i styl każdego elementu (etykiety, znaczniki, kształty) wykraczające poza możliwości natywnych elementów wizualnych.
-
W pełni oparty na danych
Geometria i tekst mogą reagować na filtry/segmentatory za pośrednictwem DAX, umożliwiając tworzenie wskaźników KPI uwzględniających segmentatory, dynamiczne progi i adnotacje warunkowe.
-
Nieograniczone typy wizualizacji
Tworzenie niestandardowych wykresów (np. wskaźniki punktowe, niestandardowe wykresy kaskadowe, osie czasu, schematy), które nie są dostępne w standardzie.
-
Spójność marki
Scentralizuj kolory, typografię i odstępy za pomocą tokenów opartych na miarach, aby zapewnić spójną tematykę w raportach.
-
Lekkie i przenośne
Brak zewnętrznego niestandardowego kodu wizualnego; SVG to tylko tekst, łatwy do szablonowania, ponownego wykorzystania i wersjonowania w kontroli źródła.
-
Wady:
-
-
Stroma krzywa uczenia się
Wymaga biegłości zarówno w DAX, jak i SVG; debugowanie długich ciągów znaków może być żmudne.
-
Ryzyko związane z utrzymaniem
Bez ścisłego nazewnictwa i modularyzacji SVG/DAX szybko staje się trudny do odczytania, testowania i rozszerzania.
-
Ograniczona natywna interaktywność
Podświetlanie krzyżowe, wbudowane podpowiedzi i funkcje ułatwień dostępu są słabsze w porównaniu ze standardowymi elementami wizualnymi.
-
Niuanse związane z eksportowaniem i układem
Subskrypcje e-mailowe, eksport do formatu PDF i widok mobilny mogą być renderowane w różny sposób; konieczne jest dokładne testowanie.
-
Pułapki związane z wydajnością
Nadmierne znaczniki, wiele elementów lub intensywne łączenie ciągów znaków (szczególnie w DirectQuery) mogą spowalniać działanie elementów wizualnych.
-
IV. Najlepsze praktyki dotyczące korzystania z SVG
Istnieje pięć najlepszych praktyk dotyczących używania SVG w raporcie:
- Najpierw zaprojektuj tokeny (kolory, rozmiary, odstępy)
- Scentralizuj styl jako miary (np.
__Color_Primary,__Font_S,__Pad_M), aby motywy zmieniały się w jednym miejscu. - Przykład:
VAR cMain = [__Color_Primary] VAR f12 = [__Font_S]
- Scentralizuj styl jako miary (np.
- Zmodularyzuj SVG (składaj z fragmentów)
- Stwórz małe miary dla elementów podstawowych (oś, słupki, etykiety) i połącz je.
- Przykładowy wzorzec:
__svg_axis(), __svg_bars(), __svg_labels() → CONCATENATEX({[__axis],[__bars],[__labels]},[Value],"")
- Użyj stabilnego układu współrzędnych
- Ustaw
viewBox="0 0 W H"i wyprowadź wszystkie pozycje z marginesów oraz szerokości/wysokości wykresu. - Przykład:
VAR W = 280 VAR mL = 12 VAR plotW = W - (mL + [mR]) positions = mL + scaleX(Value)
- Ustaw
- Bądź bezwzględny w kwestii liczby elementów
- Ogranicz kształty; w miarę możliwości agreguj; unikaj ciężkich dekoracji poszczególnych punktów.
- Zmniejsz powtarzające się atrybuty za pomocą grup
<g>i wspólnych ciągów klas/stylów.
- Higiena wydajności w DAX
- Buforuj za pomocą
VARi ponownie wykorzystuj; unikaj powtarzaniaCALCULATEdla tych samych wyników cząstkowych. - Twórz znaczniki za pomocą
CONCATENATEXw małej tabeliVARzamiast wielu konkatenacji. - Ograniczenia: ograniczaj liczbę wierszy (
TOPN), unikaj skomplikowanej logiki dla każdego wiersza wDirectQuery.
- Buforuj za pomocą
V. SVG jako przyszłość zaawansowanych raportów Power BI – prawdziwy przykład
Powyższy obrazek przedstawia wykres tornado pokazujący procentowy rozkład wskaźnika rotacji pracowników według działu i płci.
Jak utworzyć miarę, aby to pokazać? Kod Dax ma ponad 150 wierszy, więc omówię to krok po kroku
Każda wizualizacja SVG wymaga ustawienia kluczowych parametrów wysokości i szerokości wybranego elementu wizualnego.
Kluczowe ustawienia:
Wbase = 280→ podstawowa szerokość obszaru roboczego (px/jednostki użytkownika) dla całego SVG.mL, mR, mT, mB = 12→ marginesy lewy/prawy/górny/dolny (wypełnienie) wokół obszaru rysowania.rowH = 34→ wysokość jednego wiersza/pasma kategorii.barH = ROUND(rowH*0.65,0)→ grubość słupka ustawiona na ~65% wysokości wiersza (tak, aby pozostało trochę pionowego wypełnienia).
Typowe zastosowanie:
Inner plot width = Wbase - mL - mRRow y-position = mT + rowIndex * rowHBar y = rowY + (rowH - barH)/2(wyśrodkowuje pasek w rzędzie)
Krótki opis używanych zmiennych:
Tokeny kolorów(colF,colM,colDeptTxt) definiują kolory szesnastkowe wielokrotnego użytku dla serii kobiet/mężczyzn i etykiet działów – łatwe tworzenie motywów i spójność.DeptListtworzy odrębną listę działów w bieżącym kontekście filtrowania (z uwzględnieniem fragmentatorów/RLS).ByDeptdodaje dwa wskaźniki dla każdego działu: wskaźniki rotacji kobiet (Fv) i mężczyzn (Mv), używając funkcjiCALCULATEzKEEPFILTERS, dzięki czemu płeć jest stosowana bez usuwania innych filtrów.MaxVwyszukuje najwyższy wskaźnik rotacji wśród obu płci i wszystkich działów – służy do spójnego skalowania długości pasków w SVG.MaxVnzjest bezpiecznym dzielnikiem (powraca do1, jeśli wszystko jest ≤0), aby uniknąć dzielenia przez zero w obliczeniach szerokości/pozycji.
Poniżej znajduje się krótki opis użytych zmiennych:
W/plotW/gap: całkowita szerokość SVG, szerokość rysowalna po marginesach bocznych (mL,mR) oraz odstępy między kolumną etykiet a słupkami.MaxDeptLen: najdłuższa długość nazwy działu (znaki) zDeptList.labelW_auto: automatyczna szerokość kolumny etykiety, przybliżona na podstawie długości tekstu (~8 px na znak + 28 px wypełnienia).labelW: ostateczna szerokość kolumny etykiety – ograniczona do 48%Wi co najmniej 110 px, ale nie mniejsza niż szerokość automatyczna.halfW: szerokość przypisana do każdego z dwóch obszarów wartości (np. kobiety vs mężczyźni) = (plotW − labelW − gap) / 2, z bezpiecznym zabezpieczeniemDIVIDE(..., 0).leftX: początek x pierwszego obszaru wartości =mL + labelW + gap.midX: początek x drugiego obszaru wartości =leftX + halfW(punkt środkowy między dwoma obszarami słupków).
Poniżej znajduje się krótki opis użytych zmiennych:
Ranked: rozszerzaByDepto:Szczyt– wyższa wartość obrotu kobiet (Fv) w porównaniu z mężczyznami (Mv) dla każdego działu (PUSTY→ 0).Ord– gęsty ranking tego szczytu w poszczególnych działach (najwyższa wartość = pozycja 1), używany do kontrolowania kolejności wierszy w SVG.N: liczba działów (wierszy) po uszeregowaniu → określa liczbę wyświetlanych słupków/etykiet.H: całkowita wysokość SVG = górny margines + dolny margines +N × rowH→ zapewnia, że obszar roboczy mieści wszystkie rzędy w rankingu.
- Pętla i kolejność:
CONCATENATEX(Ranked, … , "", [Ord], ASC)iteruje działy w kolejności rankingowej i łączy SVG każdego wiersza. - Geometria wiersza:
yTop,yBar,cyustawiają górę wiersza, pozycję słupka (y) i pionowe wyśrodkowanie tekstu.halfW/midXpojawiły się wcześniej – podział środkowy dla pasków lewego (F) i prawego (M).
- Wartości i szerokości:
fv,mv= wskaźniki kobiet/mężczyzn (PUSTY→ 0).wf,wm= szerokości pasków skalowane przezMaxVnzw każdej połowie.
- Pozycje X:
- Pasek kobiecy rozciąga się w lewo od środka:
fx = midX - wf; etykieta wfcx = midX - wf/2. - Pasek męski rozciąga się w prawo od środka: początek
mx = midX; etykieta wmcx = midX + wm/2.
- Pasek kobiecy rozciąga się w lewo od środka:
- Rysowanie:
- Jeśli szerokość > 0, narysuj zaokrąglony
<rect>z wypełnieniemcolF/colMi wyśrodkowanym<text>pokazującymFORMAT(...,"0.0%").MAX(w,1)wymusza minimalną szerokość 1 piksela, dzięki czemu małe wartości pozostają widoczne. - Tekst wyrównany za pomocą
dominant-baseline='middle',text-anchor='middle', zdyFixifsValdla pionowej regulacji i rozmiaru czcionki.
- Jeśli szerokość > 0, narysuj zaokrąglony
Poniżej znajduje się krótki opis użytych zmiennych:
- Iteracja i kolejność:
CONCATENATEX(Ranked, …, "", [Ord], ASC)tworzy pętlę działów w kolejności rankingowej i łączy etykiety SVG. - Pozycja pionowa:
cywyśrodkowuje każdą etykietę w swoim wierszu:mT + (ord−1)*rowH + rowH/2. - Szerokość skracania:
maxCharsszacuje, ile znaków zmieści się w lewej kolumnie etykiety na podstawielabelW(≈7 px/znak, minus wypełnienie). - Logika wielokropka:
deptShortskraca długie nazwy i dodaje…, aby tekst nie wykraczał poza kolumnę etykiety. - Rysowanie tekstu: wyświetla
<text>w punkciex=mL,y=cy, wyrównane do lewej strony (text-anchor='start'), wyśrodkowane pionowo (dominant-baseline='middle'), z niewielką pionową poprawkądyFix, rozmiaremfsDepti koloremcolDeptTxt.
Poniżej znajduje się krótki opis użytych zmiennych:
legendH/HFinal/lY: rezerwuje miejsce na legendę (legendH=26), ustawia ostateczną wysokość SVGHFinal = H + legendHi umieszcza legendę pionowo w punkcielY = H + legendH/2.lBoxW/lBoxH/lGapItem/cx: rozmiar pola legendy (18×12), odstępy między elementami legendy (70) i poziome wyśrodkowanie obszaru roboczego (cx = W/2).- LegendSVG:
- Owijaj elementy w grupie
<g>. - Próbka żeńska: zaokrąglony element
<rect>wypełniony koloremcolF, umieszczony po lewej stronie środka w punkciecx - lGapItem, z etykietą umieszczoną bezpośrednio po prawej stronie (+lBoxW + 6), wyśrodkowany pionowo nalY. - Próbka męska: ten sam wzór po prawej stronie środka (przesunięcie
cx + 20), wypełniony koloremcolM, z etykietą obok. - Tekst wykorzystuje
dominant-baseline='middle'+dyFixdo precyzyjnego dostosowania wyrównania w pionie orazfsDept/colDeptTxtdo dostosowania rozmiaru/koloru.
- Owijaj elementy w grupie
Ostateczny render zwraca plik SVG używany w treści HTML (Lite). Przedstawia on wykres tornado.
VI Podsumowanie
SVG w Power BI zapewnia precyzję, możliwość opowiadania historii i prawdziwie niestandardowe wizualizacje, ale wiąże się to z większą krzywą uczenia się i dyscypliną inżynieryjną, aby zapewnić szybkość i łatwość utrzymania. Jeśli chcesz czerpać korzyści bez złożoności, możemy zaprojektować, zbudować i wspierać Twoje wizualizacje SVG od początku do końca w ramach w pełni zautomatyzowanych raportów. Wolisz pozostać w firmie? Oferujemy również specjalistyczne szkolenia, dzięki którym Twój zespół będzie mógł z pewnością tworzyć i utrzymywać wskaźniki KPI oraz wykresy oparte na SVG. Niezależnie od tego, którą opcję wybierzesz, zyskasz kontrolę nad SVG oraz niezawodność, której oczekują Twoi interesariusze.
