Wykres Gantta w Power BI można zbudować bez instalowania jakichkolwiek zewnętrznych dodatków, korzystając wyłącznie z wbudowanego wykresu słupkowego skumulowanego. Kluczem jest odpowiednie przygotowanie danych oraz prosta miara DAX, która ukrywa lewą część słupka, tworząc złudzenie harmonogramu. Poniżej znajdziesz kompletną instrukcję, od struktury tabeli po ostateczne formatowanie, które możesz wdrożyć w ciągu jednej godziny.
Dlaczego warto budować wykres Gantta w Power BI bez zewnętrznych wizualizacji
Marketplace Power BI AppSource oferuje kilka gotowych wizualizacji Gantta, jak Gantt by MAQ Software czy Gantt Chart by xViz. Mają swoje zalety, ale niosą też konkretne ryzyka:
- Wiele organizacji blokuje instalację niezweryfikowanych wizualizacji ze względów bezpieczeństwa (polityka IT).
- Certyfikat Microsoftu nie gwarantuje braku problemów z odświeżaniem raportu w Power BI Service.
- Wizualizacje innych producentów bywają porzucane, co skutkuje błędami po aktualizacji Power BI Desktop.
- Licencja komercyjna niektórych dodatków wiąże się z osobnym kosztem.
Rozwiązanie natywne jest w pełni kontrolowane przez Twój zespół, działa stabilnie w Power BI Service i nie wymaga zgody działu IT.
Jak przygotować dane pod harmonogram Power BI
Zanim otworzysz Power BI, potrzebujesz tabeli z co najmniej czterema kolumnami:
| Kolumna | Typ danych | Opis |
|---|---|---|
| Zadanie | Tekst | Nazwa zadania lub etapu projektu |
| Data_Start | Data | Pierwszy dzień realizacji zadania |
| Data_Koniec | Data | Ostatni dzień realizacji zadania |
| Kategoria | Tekst | Opcjonalnie: dział, priorytet, sprint |
Ważne: Power BI obsługuje daty w formacie
RRRR-MM-DD. Jeżeli importujesz dane z Excela lub CSV, upewnij się, że kolumny dat są rozpoznane jako typ Data, a nie Tekst.
Obliczenie czasu trwania zadania
W Power Query lub jako kolumna obliczana w modelu danych dodaj kolumnę Czas_Trwania:
Czas_Trwania = DATEDIFF('Zadania'[Data_Start], 'Zadania'[Data_Koniec], DAY) + 1
Dodanie +1 sprawia, że zadanie trwające jeden dzień ma wartość 1, a nie 0.
Obliczenie przesunięcia (offset) od daty bazowej
To serce całego rozwiązania. Musisz obliczyć, o ile dni od najwcześniejszej daty w projekcie zaczyna się każde zadanie. Ta wartość będzie reprezentować niewidoczną część słupka, czyli "puste miejsce" po lewej stronie.
Utwórz miarę DAX:
Data_Bazowa = MIN('Zadania'[Data_Start])
Offset_Dni =
DATEDIFF(
[Data_Bazowa],
MAX('Zadania'[Data_Start]),
DAY
)
Alternatywnie możesz ustawić datę bazową na sztywno, np. jako pierwszy dzień kwartału, co ułatwia porównywanie wielu projektów na jednym dashboardzie.
Budowanie wykresu Gantta krok po kroku w Power BI Desktop
Krok 1: Dodaj wizualizację Stacked Bar Chart
W panelu Visualizations wybierz Stacked bar chart (wykres słupkowy skumulowany poziomy). To podstawa całej konstrukcji.
Przypisz pola:
- Y axis: kolumna
Zadanie - X axis / Values: najpierw miara
Offset_Dni, potem kolumnaCzas_Trwania - Legend: opcjonalnie
Kategoria, jeśli chcesz kolorować etapy
Krok 2: Ukryj offset, czyli lewy słupek
Kliknij lewą serię danych (Offset_Dni) i w panelu Format ustaw:
- Color: biały lub dokładnie taki sam kolor jak tło wykresu (np.
#FFFFFF) - Data labels: wyłączone
Dzięki temu lewa część słupka staje się niewidoczna, a prawa część wizualnie "zaczyna się" w odpowiednim miejscu na osi czasu.
Krok 3: Sformatuj oś X jako oś czasu
Domyślnie oś X wyświetla liczby (dni). Możesz zostawić taki format lub przekształcić go na daty z czytelną etykietą. Najprostszy sposób to dodanie osobnej tabeli kalendarza i użycie slicer'a daty zamiast etykiet na osi.
Jeżeli chcesz zachować daty bezpośrednio na osi, utwórz miarę formatującą etykiety:
Etykieta_Daty =
FORMAT(
[Data_Bazowa] + MAX('Zadania'[Data_Start]) - [Data_Bazowa],
"DD MMM"
)
Wskazówka: W praktyce większość analityków stosuje slider daty (slicer) powyżej wykresu, który dynamicznie zawęża widoczny zakres harmonogramu. To rozwiązanie jest bardziej elastyczne niż statyczne etykiety osi.
Krok 4: Sortowanie zadań
Power BI domyślnie sortuje kategorie alfabetycznie. W harmonogramie projektu naturalne jest sortowanie według daty startu. Utwórz kolumnę pomocniczą:
Nr_Sortowania = RANKX(ALL('Zadania'), 'Zadania'[Data_Start], , ASC, DENSE)
Następnie w widoku Data zaznacz kolumnę Zadanie i w zakładce Column tools ustaw Sort by column: Nr_Sortowania.
Krok 5: Dodaj etykiety i tooltips
Dla czytelności kliknij w słupek Czas_Trwania i włącz Data labels, które wyświetlą liczbę dni lub nazwę zadania. W sekcji Tooltips możesz dodać:
- Data_Start sformatowana jako
DD.MM.RRRR - Data_Koniec
- Osoba odpowiedzialna (jeśli masz taką kolumnę)
Tooltipy sprawiają, że harmonogram Power BI przestaje być statycznym obrazkiem, a staje się interaktywnym narzędziem raportowania.
Jak zbudować tabelę kalendarza wspierającą timeline Power BI
Jeżeli chcesz filtrować harmonogram po tygodniach, miesiącach lub kwartałach, potrzebujesz powiązanej tabeli kalendarza. W DAX generujesz ją jedną formułą:
Kalendarz =
CALENDAR(
MIN('Zadania'[Data_Start]),
MAX('Zadania'[Data_Koniec])
)
Następnie dodaj kolumny:
Rok = YEAR([Date])
Miesiac_Nr = MONTH([Date])
Miesiac_Nazwa = FORMAT([Date], "MMMM")
Tydzien = WEEKNUM([Date], 2)
Kwartal = "Q" & QUARTER([Date])
Powiąż tabelę Kalendarz z tabelą Zadania relacją wiele-do-jednego przez kolumnę daty. Teraz możesz dodać slicer na Kwartal lub Miesiac_Nazwa i dynamicznie zawężać widok timeline'u w Power BI do wybranego okresu.
Zaawansowane techniki: kolory, progi i milestone'y
Kolorowanie według statusu zadania
Jeśli masz kolumnę Status (np. "W toku", "Zakończone", "Opóźnione"), możesz kolorować słupki dynamicznie za pomocą miary:
Kolor_Statusu =
SWITCH(
MAX('Zadania'[Status]),
"Zakończone", "#27AE60",
"W toku", "#2980B9",
"Opóźnione", "#E74C3C",
"#95A5A6"
)
W opcjach formatowania serii wybierz Conditional formatting i wskaż tę miarę jako źródło koloru. Efekt jest identyczny jak w profesjonalnych narzędziach do zarządzania projektami.
Dodawanie linii "Dziś" (Today marker)
Jeden z najczęstszych wymogów w harmonogramach to pionowa linia oznaczająca bieżący dzień. W natywnym wykresie słupkowym nie dodasz linii bezpośrednio, ale możesz:
- Stworzyć miarę
Dni_Do_Dzis = DATEDIFF([Data_Bazowa], TODAY(), DAY). - Dodać ją jako trzecią serię w wykresie skumulowanym z kolorem czerwonym lub pomarańczowym.
- Ustawić szerokość serii na 1 piksel poprzez zastosowanie stałej wartości 1 jako danych.
Alternatywą jest nakładkowy wykres liniowy (line chart) z osią pomocniczą, który można zsynchronizować z głównym wykresem słupkowym przez zakładkę lub kanwę raportu.
Milestone'y jako osobna warstwa
Kamienie milowe (milestone'y) mają zerowy czas trwania. Aby je uwzględnić:
- Dodaj kolumnę
Czy_Milestonez wartościąTRUE/FALSE. - Przefiltruj je do osobnej tabeli lub użyj miary CALCULATE z filtrem.
- Wyświetl je jako scatter chart nałożony na główny wykres Gantta.
W Power BI możesz nakładać wizualizacje na siebie na kanwie raportu, wyrównując osie za pomocą wspólnych filtrów z tabeli kalendarza.
Optymalizacja wydajności harmonogramu w Power BI Service
Przy dużych projektach (powyżej 500 zadań) wykres może ładować się wolniej. Trzy praktyczne optymalizacje:
- Agregacja danych: Zamiast ładować każde zadanie osobno, grupuj dane na poziomie tygodnia lub sprintu w Power Query przed załadowaniem do modelu.
- Import vs DirectQuery: Dla harmonogramów projektowych tryb Import jest zdecydowanie szybszy. DirectQuery ma sens tylko przy danych aktualizowanych co kilka minut.
- Redukcja liczby miar: Każda miara DAX obliczana w czasie rzeczywistym spowalnia rendering. Tam gdzie możesz, używaj kolumn obliczanych zamiast miar.
Według benchmarków opublikowanych przez zespół Power BI (Microsoft Fabric Blog) raporty z modelem w trybie Import są średnio 3 do 5 razy szybsze w odświeżaniu wizualizacji niż te w trybie DirectQuery przy zbliżonej wielkości danych.
Pułapki, których warto unikać przy budowaniu gantt chart w Power BI
Zły typ danych daty: Jeśli Power BI traktuje daty jako tekst, oś X wyświetla ciągi znaków zamiast liczb, a offset nie działa. Zawsze sprawdzaj typ w widoku Power Query.
Brak relacji z tabelą kalendarza: Bez tej relacji filtry daty nie propagują się poprawnie do tabeli zadań. Efekt to brak reakcji wykresu na slicer daty.
Sortowanie kolumny tekstowej: Próba sortowania zadań po nazwie zamiast po dacie startu to jeden z najczęstszych błędów. Pamiętaj o kolumnie pomocniczej Nr_Sortowania.
Zbyt wiele etykiet na osi X: Przy projekcie obejmującym kilka miesięcy oś X z etykietami dziennymi staje się nieczytelna. Ogranicz etykiety do tygodni lub miesięcy, korzystając z opcji Axis display units.
Kopiowanie wizualizacji między raportami bez sprawdzenia relacji: Wykres Gantta skonfigurowany w jednym raporcie może przestać działać po skopiowaniu do innego, jeśli nazwy tabel lub kolumn są inne.
Jeśli chcesz opanować Power BI od podstaw wizualizacji aż po zaawansowane dashboardy i raporty projektowe, zajrzyj do kursu Power BI: Wizualizacja i Dashboardy dostępnego na platformie VITA. Kurs prowadzi Cię przez budowanie profesjonalnych raportów, model danych, DAX i publikowanie w Power BI Service, konkretnie i bez zbędnego teoryzowania.
Możesz przetestować ten kurs (i wszystkie inne kursy VITA) w ramach 3 dni pełnego dostępu całkowicie za darmo. Żadnych kodów, żadnych zobowiązań, anulujesz kiedy chcesz. Zacznij darmowy trial tutaj: vita.edu.pl/abonament i wróć do raportu z Gantt chart gotowym do prezentacji.
Podsumowanie: co daje Ci natywny Gantt w Power BI
Zbudowany w ten sposób wykres Gantta w Power BI:
- Działa w każdym środowisku korporacyjnym bez zgody działu IT.
- Odświeża się automatycznie razem z danymi źródłowymi (Excel, SQL, SharePoint).
- Obsługuje filtry, drillthrough i zakładki tak jak każda inna wizualizacja Power BI.
- Jest w pełni responsywny na urządzeniach mobilnych (Power BI Mobile).
- Możesz go opublikować w Teams, SharePoint lub jako osadzony raport na stronie.
Kluczowe kroki w skrócie: przygotuj tabelę z datami startu i końca, oblicz offset od daty bazowej w DAX, zbuduj stacked bar chart z ukrytą lewą serią, posortuj zadania po dacie i dodaj tabelę kalendarza do dynamicznego filtrowania. Cały proces zajmuje do godziny, a efekt jest profesjonalny i w pełni zintegrowany z ekosystemem Microsoft Power Platform.