Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
W skrócieAnaliza co-jeśli (what-if) to symulacja scenariuszy: suwak zmienia założenie, a raport przelicza wynik na żywo. Na 108 675 transakcjach Nordvelli budujemy parametry rabatu, marży i podwyżki z GENERATESERIES, wpinamy je do wizualizacji i poznajemy parametry pól, które przełączają miary i wymiary.
Lekcja 10 z 28 bezpłatnego kursu Power BI, od pierwszego raportu do Fabric i Copilota, na jednym zestawie danych sieci Nordvella.
<-- Spis wszystkich lekcjiZarząd Nordvella S.A. pyta na spotkaniu: co się stanie z marżą, jeśli dorzucimy 12 procent rabatu na cały asortyment przed świętami? A jeśli 8, a jeśli 20? Do tej pory odpowiedzią był Excel z ręcznie wpisaną liczbą i kolejny plik, i jeszcze jeden. W Power BI odpowiadasz na to jednym suwakiem, a wykres przelicza się na żywo na wszystkich 108 675 transakcjach Nordvelli. To właśnie jest analiza co-jeśli (po angielsku what-if, czyli symulacja scenariuszy), i w tym rozdziale zbudujesz ją od zera.
Pokażemy dwa różne mechanizmy, które często się mylą: parametr co-jeśli (podaje liczbę do obliczeń, na przykład wysokość rabatu) oraz parametry pól (po angielsku field parameters, pozwalają użytkownikowi przełączać, którą miarę albo które pole widać na wykresie). Na koniec złożysz z nich realne scenariusze biznesowe Nordvelli: widełki cen produktu, prognozę sprzedaży i pulpit z przełącznikiem perspektyw.
Z tej lekcji dowiesz się:
Pliki do tej lekcji
Gotowy efekt: plik Power BI Desktop w stanie z końca tej lekcji, z tymi samymi zapytaniami, modelem i stronami raportu, które widać na zrzutach.
Pobierz nordvella_10_parametry.pbix
Plik startowy: stan z końca poprzedniej lekcji. Otwórz go, jeśli chcesz wykonywać kroki tej lekcji od razu, bez odtwarzania wcześniejszych.
Pobierz nordvella_09_wiz_zaawansowane.pbix
Dane źródłowe:
Nordvella_
Nordvella.bak.gz - te same dane jako baza MS SQL Server (odtwarzasz poleceniem RESTORE DATABASE), do ćwiczeń z połączeniem z bazą SQL.
Co chcemy osiągnąć. Zarząd Nordvelli przed świątecznymi promocjami pyta, co stanie się ze sprzedażą i marżą przy danym rabacie albo zmianie ceny. Chcemy zrozumieć mechanizm, który pozwala odpowiadać na takie pytania suwakiem w raporcie, zamiast liczyć każdy wariant osobno.
Analiza co-jeśli to odpowiedź na pytanie zaczynające się od słowa "gdyby". Gdyby cena wzrosła o 10 procent, ile stracimy na wolumenie? Gdyby rabat wyniósł 15 procent, czy marża jeszcze się broni? W klasycznym raporcie liczby są zamrożone: pokazujesz to, co już się wydarzyło. W raporcie z parametrem co-jeśli dokładasz jedną ruchomą liczbę, którą użytkownik ustawia sam, a cały model natychmiast przelicza wynik pod ten scenariusz.
Parametr co-jeśli składa się z trzech elementów, które warto zapamiętać, bo do nich będziemy wracać. Po pierwsze, tabela zakresu, czyli lista wszystkich dozwolonych wartości (na przykład rabat od 0 do 30 procent co 1 punkt). Po drugie, fragmentator (po angielsku slicer, czyli filtr do klikania na stronie raportu), którym użytkownik wybiera jedną wartość z tej tabeli. Po trzecie, miara odczytująca wybór, która bierze klikniętą liczbę i wstawia ją do Twoich obliczeń.
Różnica względem zwykłego filtra: parametr co-jeśli nie filtruje danych, tylko podaje liczbę do wzoru. Filtr wyrzuca wiersze z tabeli. Parametr zostawia wszystkie 108 675 transakcji Nordvelli i tylko zmienia liczbę użytą w obliczeniu. Dlatego suma sprzedaży bazowej nie znika, a obok niej możesz pokazać sumę po rabacie i różnicę między nimi.
Wskazówka: parametr co-jeśli to symulacja, a nie prognoza z modelu statystycznego. Jeśli dasz rabat 20 procent, Power BI po prostu przemnoży sprzedaż przez 0,8. Nie zakłada, że niższa cena podniesie wolumen. Reakcję popytu musisz oszacować sam i wpisać jako drugi parametr (o tym w sekcji o prognozie).
Co chcemy osiągnąć. Nordvella planuje świąteczny rabat na całą sprzedaż. Chcemy, żeby menedżer ustawiał wysokość rabatu suwakiem i od razu widział, jak zmienia się przychód sieci.
Zaczynamy od scenariusza świątecznego rabatu na całą sprzedaż Nordvelli. Otwórz plik z końca poprzedniej lekcji (plik startowy nordvella_
Przejdź na wstążkę Modelowanie. W środkowej części wstążki jest grupa Parametry z jednym przyciskiem Nowy parametr.
Kliknij Nowy parametr. Rozwinie się małe menu z dwiema pozycjami: Zakres liczbowy i Pola. Zakres liczbowy to klasyczny parametr co-jeśli, Pola to przełącznik miar albo kolumn, do którego dojdziemy później. Kliknij Zakres liczbowy.
Otworzy się okno Parametry. Na starcie ma nazwę Parametr, typ danych Liczbowy całkowity, Minimum 0, Maksimum 20, Zwiększ 1 i puste pole Domyślny. Pole Dodaj fragmentator do tej strony jest już zaznaczone.
Wpisz kolejno: Nazwa = Rabat proc, Maksimum = 30, Domyślny = 0. Minimum (0) i Zwiększ (1) zostaw bez zmian, a typ danych zostaw jako Liczbowy całkowity, bo rabat podajemy w pełnych procentach. Pole Domyślny ustawiamy na 0, żeby raport po otwarciu pokazywał stan bez rabatu.
Kliknij Utwórz. Po kilku sekundach (na ekranie mignie komunikat Pracujemy nad tym) na stronie pojawi się fragmentator z suwakiem, a w panelu Dane nowa tabela Rabat proc. Rozwiń ją strzałką przy nazwie: w środku jest kolumna o tej samej nazwie Rabat proc i jedna miara.
Najedź myszą na miarę w tabeli Rabat proc, żeby zobaczyć jej pełną nazwę. Kreator nazwał ją słowami Rabat proc, długą kreską i słowem wartość. Taką nazwę trudno potem wpisać w formule, dlatego za chwilę ją zmienimy.
Zajrzyjmy pod maskę. Kliknij nazwę tabeli Rabat proc w panelu Dane. Pod wstążką pojawi się pasek formuły z definicją tabeli, a na wstążce karta Narzędzia tabel. Funkcja GENERATESERIES tworzy tabelę z jedną kolumną: 0, 1, 2, aż do 30, co 1. To właśnie wartości, które użytkownik będzie wybierał suwakiem. Tabela nie ma żadnej relacji z resztą modelu i tak ma być.
Rabat proc = GENERATESERIES(0, 30, 1)Druga rzecz, którą wygenerował kreator, to miara odczytująca wybór. Kliknij tę miarę w tabeli Rabat proc i zobacz jej definicję w pasku formuły. Funkcja SELECTEDVALUE zwraca liczbę wybraną na fragmentatorze, a jeśli nic nie wybrano (albo wybrano wiele), zwraca wartość domyślną, czyli 0. To jest most między kliknięciem użytkownika a Twoim wzorem.
Teraz zmień nazwę miary. Gdy miara jest zaznaczona, na karcie Narzędzia miar kliknij pole Nazwa, zaznacz cały tekst, wpisz Rabat proc wartość i naciśnij Enter.
Po Enter nowa nazwa trafia do paska formuły i do panelu Dane. Pod nią miara występuje w całym rozdziale.
Rabat proc wartość = SELECTEDVALUE('Rabat proc'[Rabat proc], 0)Teraz krok, którego kreator za Ciebie nie zrobi: własna miara, która używa parametru do przeliczenia sprzedaży. Miara ma trafić do tabeli FaktSprzedaz, więc najpierw kliknij nazwę tabeli FaktSprzedaz w panelu Dane, a potem na karcie Narzędzia tabel kliknij Nowa miara.
W pasku formuły pojawi się Miara =. Zastąp to poniższym wzorem. Dzielimy wybrany rabat przez 100 (bo suwak podaje procenty jako liczby całkowite), a sprzedaż po rabacie to łączna sprzedaż przemnożona przez (1 minus rabat). Nową linię w pasku formuły robisz klawiszami Shift i Enter, a samo Enter zatwierdza miarę.
Sprzedaż po rabacie =
VAR Rabat = [Rabat proc wartość] / 100
VAR Baza = [Łączna sprzedaż]
RETURN
Baza * ( 1 - Rabat )Naciśnij Enter. Zaraz potem, gdy nowa miara jest zaznaczona, kliknij pole Format na karcie Narzędzia miar, wpisz #,0 "zł" i naciśnij Enter. To ten sam format, którego używa Łączna sprzedaż, dzięki niemu karta pokaże kwotę w złotych.
Dorzuć jeszcze miarę pokazującą, ile pieniędzy oddajesz klientom przy danym rabacie. Kliknij Nowa miara na karcie Narzędzia miar (nowa miara trafi do tej samej tabeli FaktSprzedaz), wpisz wzór, Enter i ustaw ten sam format #,0 "zł". Kwota rabatu to różnica między sprzedażą bazową a sprzedażą po rabacie.
Kwota rabatu = SUM(FaktSprzedaz[WartoscNetto]) - [Sprzedaż po rabacie]Teraz trzy karty. Kliknij puste miejsce na stronie (żeby nic nie było zaznaczone), a potem w panelu Wizualizacje kliknij ikonę Karta.
Na stronie pojawi się pusta karta. Rozwiń w panelu Dane tabelę FaktSprzedaz i przeciągnij miarę Łączna sprzedaż do obszaru Wartość w panelu Wizualizacje.
Ułóż elementy w jednym rzędzie: zmniejsz fragmentator do paska u góry strony, a kartę przesuń obok niego (przeciągasz za ramkę, rozmiar zmieniasz uchwytem w prawym dolnym rogu). Tak samo dodaj dwie kolejne karty, z miarami Sprzedaż po rabacie i Kwota rabatu. Na starcie pole nad suwakiem jest puste, czyli nic nie jest wybrane, a miara Rabat proc wartość zwraca wartość domyślną 0. Obie kwoty sprzedaży są więc równe, a kwota rabatu wynosi 0 zł.
Teraz przesuń suwak albo wpisz 12 w pole nad nim i naciśnij Enter. Sprzedaż bazowa (467,78 mln zł dla całego okresu Nordvelli, na karcie zaokrąglona do 468 mln zł) się nie rusza, sprzedaż po rabacie spada do 411,64 mln zł (na karcie 412 mln zł), a kwota rabatu pokazuje 56,13 mln zł oddanych klientom (na karcie 56 mln zł). Jedna liczba na suwaku, trzy karty przeliczone na żywo.
| Rabat na suwaku | Sprzedaż bazowa | Sprzedaż po rabacie | Kwota rabatu |
|---|---|---|---|
| 0% | 467,78 mln | 467,78 mln | 0,00 mln |
| 8% | 467,78 mln | 430,35 mln | 37,42 mln |
| 12% | 467,78 mln | 411,64 mln | 56,13 mln |
| 20% | 467,78 mln | 374,22 mln | 93,56 mln |
Plik do pobrania: arkusz Nordvelli do odtworzenia demo, Nordvella_
Co chcemy osiągnąć. Zarząd Nordvelli musi wiedzieć, przy jakim rabacie sieć zaczyna sprzedawać poniżej kosztu zakupu towaru. Chcemy policzyć marżę po rabacie i zobaczyć ją osobno dla każdej kategorii produktów.
Sam spadek przychodu nie wystarczy zarządowi. Nordvella sprzedaje elektronikę o różnej marżowości: telefony mają cienką marżę, akcesoria grubą. Do policzenia marży po rabacie użyjemy kolumny KosztWlasny z FaktSprzedaz, która trzyma koszt zakupu towaru od dostawcy dla każdej transakcji.
Marża po rabacie to sprzedaż pomniejszona o rabat, minus koszt własny (koszt się nie zmienia, płacisz dostawcy tyle samo niezależnie od tego, jaki rabat dajesz klientowi). Kliknij nazwę tabeli FaktSprzedaz w panelu Dane, na karcie Narzędzia tabel kliknij Nowa miara i wpisz wzór. Zwróć uwagę, że rabat obniża tylko przychód, a KosztWlasny wchodzi w pełnej wysokości. Po Enter ustaw format #,0 "zł", tak jak przy poprzednich miarach.
Marża po rabacie =
VAR Rabat = [Rabat proc wartość] / 100
VAR PrzychodPoRabacie = SUM(FaktSprzedaz[WartoscNetto]) * (1 - Rabat)
VAR Koszt = SUM(FaktSprzedaz[KosztWlasny])
RETURN
PrzychodPoRabacie - KosztDodaj jeszcze rentowność procentową, żeby od razu widzieć, czy scenariusz jest zdrowy. Marża procentowa po rabacie to marża podzielona przez przychód po rabacie. Funkcja DIVIDE jest tu ważna, bo bezpiecznie obsługuje dzielenie (gdyby przychód wyszedł zero, zwróci pusto zamiast błędu). Utwórz ją tak samo (FaktSprzedaz, Nowa miara), a w polu Format wpisz 0.00%, żeby wynik pokazywał się jako procent z dwoma miejscami po przecinku.
Marża proc po rabacie =
VAR Rabat = [Rabat proc wartość] / 100
VAR PrzychodPoRabacie = SUM(FaktSprzedaz[WartoscNetto]) * (1 - Rabat)
RETURN
DIVIDE([Marża po rabacie], PrzychodPoRabacie)Teraz wykres. Ustaw suwak z powrotem na 0. Kliknij puste miejsce strony, a w panelu Wizualizacje kliknij ikonę Wykres kolumnowy grupowany (czwarta ikona w pierwszym rzędzie).
Na stronie pojawi się pusta ramka wykresu z szarym podglądem i napisem Zaznacz lub przeciągnij pola, aby wypełnić tę wizualizację. Ustaw ją pod suwakiem, po lewej stronie.
Rozwiń w panelu Dane tabelę DimKategorie i przeciągnij kolumnę Kategoria do obszaru Oś X.
Rozwiń tabelę FaktSprzedaz i przeciągnij miarę Marża proc po rabacie do obszaru Oś Y. Przy rabacie 0 wszystkie kategorie są dodatnie, ale Telefony mają najcieńszą marżę procentową.
Żeby widzieć dokładne liczby nad słupkami, zaznacz wykres, w panelu Wizualizacje kliknij ikonę pędzla (Formatuj element wizualny) i na karcie Wizualizacja włącz przełącznik Etykiety danych.
Ta czwarta liczba to jednocześnie odpowiedź na pytanie z początku podrozdziału: Telefony wytrzymają rabat najwyżej 6,59 procent, bo tyle wynosi cała ich marża. Sprawdź to: wpisz 7 w pole suwaka i naciśnij Enter. Telefony jako pierwsze przechodzą na minus.
| Kategoria | Marża % przy rabacie 0 | Marża % przy rabacie 15 |
|---|---|---|
| AGD/RTV | 21,57% | 7,73% (niska dodatnia) |
| Komputery | 10,10% | minus 5,77% (poniżej zera) |
| Telefony | 6,59% | minus 9,90% (poniżej zera) |
| Akcesoria | 40,65% | 30,18% (nadal wysoka) |
Wskazówka: to jest moment, w którym symulacja co-jeśli zamienia się w decyzję biznesową. Zamiast płaskiego rabatu 15 procent na wszystko, wykres podpowiada rabat różnicowany: hojny na Akcesoriach, ostrożny na Telefonach.
Zobacz też: Szkolenie Power BI - Desktop, DAX i Online + Copilot
Co chcemy osiągnąć. Chcemy sprawdzić, co stanie się z marżą Nordvelli, gdy dostawcy podniosą ceny zakupu o kilka procent. Taki parametr zbudujemy samym wzorem DAX, bez kreatora, i poznamy pułapki, przez które przestaje działać.
Kreator jest wygodny, ale warto umieć napisać parametr ręcznie, bo daje Ci pełną kontrolę. Załóżmy, że chcesz symulować podwyżkę cen zakupów u dostawcy w krokach co 2,5 procent, do 20 procent, i zbudować tę tabelę samym wzorem DAX, bez kreatora. Kliknij puste miejsce strony, przejdź na wstążkę Modelowanie i kliknij Nowa tabela.
W pasku formuły pojawi się Tabela =. Zastąp to poniższym wzorem i naciśnij Enter. GENERATESERIES przyjmuje wartości ułamkowe, więc dostaniesz 0, 2,5, 5 i tak dalej aż do 20. W samej formule ułamek piszesz z kropką (2.5), bo DAX w pasku formuły używa kropki dziesiętnej.
Podwyżka kosztów = GENERATESERIES ( 0, 20, 2.5 )Żeby zobaczyć wiersze nowej tabeli, kliknij drugą ikonę na lewym pasku okna (Widok tabeli), a potem tabelę Podwyżka kosztów w panelu Dane. Kolumna nazywa się Value, bo GENERATESERIES nie zna nazwy, którą nadałeś tabeli. Tak ją zostawiamy (jeśli wolisz czytelniejszą nazwę, zmień ją dwuklikiem nagłówka w widoku tabeli, ale wtedy popraw ją także w mierze).
Dodaj miarę odczytu. Gdy tabela Podwyżka kosztów jest zaznaczona, kliknij Nowa miara na karcie Narzędzia tabel i wpisz wzór. Zwróć uwagę na apostrofy i nazwę kolumny: muszą dokładnie pasować do tego, co jest w modelu, inaczej dostaniesz błąd.
Podwyżka kosztów wartość =
SELECTEDVALUE ( 'Podwyżka kosztów'[Value], 0 )Trzy częste pułapki. Po pierwsze, brak wartości domyślnej w SELECTEDVALUE. Jeśli napiszesz sam SELECTEDVALUE bez drugiego argumentu, to gdy fragmentator jest wyczyszczony albo zaznaczono kilka wartości, miara zwróci pusto, a Twoje obliczenie pokaże puste pole albo dziwny wynik. Zawsze podawaj drugi argument (najczęściej 0).
Po drugie, relacja tabeli parametru z resztą modelu. Tabela parametru MA być odizolowana, bez żadnej relacji do FaktSprzedaz. Jeśli przez pomyłkę połączysz ją relacją, zacznie filtrować dane zamiast tylko podawać liczbę, i wyniki przestaną mieć sens. Sprawdź to: kliknij trzecią ikonę na lewym pasku (Widok modelu), a potem przycisk Dopasuj do strony w prawym dolnym rogu okna, żeby zobaczyć cały model.
Po trzecie, jednostki. Suwak podaje 12 jako liczbę 12, a nie 0,12. Jeśli zapomnisz podzielić przez 100 w mierze, przemnożysz sprzedaż przez (1 minus 12), czyli minus 11, i dostaniesz gigantyczną liczbę ujemną. Żeby to zobaczyć na własne oczy, wróć do widoku raportu (pierwsza ikona na lewym pasku), utwórz w FaktSprzedaz celowo błędną miarę (format #,0 "zł", jak przy poprzednich) i wrzuć ją na czwartą kartę. Ustaw suwak na 12.
Sprzedaż po rabacie błąd =
VAR Rabat = [Rabat proc wartość]
VAR Baza = [Łączna sprzedaż]
RETURN
Baza * ( 1 - Rabat )
To typowy błąd w co-jeśli, ale widać go natychmiast. Po tym pokazie usuń błędną kartę (zaznacz ją i naciśnij Delete) i błędną miarę (prawy klik na niej w panelu Dane i usunięcie z menu), bo dalej nie będą potrzebne. Na kolejnych zrzutach już ich nie ma.
Plik do pobrania: ten sam arkusz Nordvella_
Co chcemy osiągnąć. Menedżer Nordvelli chce jednym kliknięciem przełączać wykres między sprzedażą, marżą i liczbą transakcji, zamiast przeglądać trzy osobne strony. Chcemy zbudować taki przełącznik parametrem pól.
Drugi typ parametru rozwiązuje zupełnie inny problem. Wyobraź sobie, że menedżer chce jednym kliknięciem przełączać wykres między "sprzedaż", "marża" i "liczba transakcji", bez budowania trzech osobnych stron. Do tego służą parametry pól (po angielsku field parameters), które pozwalają użytkownikowi wybrać, którą miarę albo które pole widać na wizualu. To nie liczba do wzoru, tylko przełącznik zawartości.
Potrzebne będą trzy miary: Łączna sprzedaż, Marża po rabacie i Liczba transakcji. Miarę Liczba transakcji masz już z lekcji o podstawach DAX, jest w tabeli FaktSprzedaz. Jeśli jej nie masz, zbuduj ją tak jak niżej. COUNTROWS liczy wiersze tabeli FaktSprzedaz, czyli pojedyncze pozycje sprzedaży.
Liczba transakcji = COUNTROWS(FaktSprzedaz)Kliknij puste miejsce strony, przejdź na wstążkę Modelowanie, kliknij Nowy parametr i tym razem wybierz Pola.
Otworzy się to samo okno Parametry, ale w wariancie Pola. Po lewej jest pusta lista Dodaj i zmień kolejność pól, po prawej lista Pola ze wszystkimi tabelami modelu. Przycisk Utwórz jest wyszarzony, dopóki nie dodasz żadnego pola.
W polu Nazwa wpisz Miara wyboru. Na liście Pola rozwiń strzałką tabelę FaktSprzedaz i zaznacz haczykiem kolejno Łączna sprzedaż, Marża po rabacie i Liczba transakcji. Każda zaznaczona miara trafia na listę po lewej, w kolejności klikania. To jest kolejność, w jakiej pozycje pojawią się na fragmentatorze. Trzy pozycje w zupełności wystarczą, przełącznik z dziesięcioma miarami przestaje być czytelny.
Zostaw zaznaczone Dodaj fragmentator do tej strony i kliknij Utwórz. Power BI tworzy nową tabelę Miara wyboru i od razu pokazuje jej definicję w pasku formuły. Pod spodem jest funkcja NAMEOF, która trzyma referencje do miar, oraz para "etykieta, kolejność" dla każdej pozycji: każdy wiersz to jedna pozycja przełącznika (widoczna nazwa, techniczna referencja do miary, numer porządkowy). Na stronie pojawia się fragmentator z trzema polami wyboru.
Miara wyboru = {
("Łączna sprzedaż", NAMEOF('FaktSprzedaz'[Łączna sprzedaż]), 0),
("Marża po rabacie", NAMEOF('FaktSprzedaz'[Marża po rabacie]), 1),
("Liczba transakcji", NAMEOF('FaktSprzedaz'[Liczba transakcji]), 2)
}Różnica względem parametru co-jeśli: parametru pól nie odczytujesz miarą. Zamiast tego przeciągasz pole parametru na oś wartości wykresu, a Power BI sam podmienia pokazywaną miarę w zależności od wyboru na fragmentatorze. Zero SELECTEDVALUE, zero własnej logiki w tym miejscu. Zrób to krok po kroku. Przesuń fragmentator Miara wyboru w prawą część strony, obok wykresu marży. Kliknij puste miejsce strony, wstaw drugi Wykres kolumnowy grupowany, ustaw go między wykresem marży a fragmentatorem i przeciągnij na Oś X kolumnę Kategoria z DimKategorie. Potem rozwiń w panelu Dane tabelę Miara wyboru: w środku jest jedno pole o tej samej nazwie.
Przeciągnij pole Miara wyboru (to w środku tabeli) do obszaru Oś Y. Dopóki na fragmentatorze nic nie jest zaznaczone, wykres pokazuje wszystkie trzy miary naraz. Sprzedaż w setkach milionów zagłusza wtedy resztę, a marża i liczba transakcji są ledwo widoczne.
Teraz kliknij Łączna sprzedaż na fragmentatorze. Wykres pokazuje tylko tę miarę, a tytuł zmienia się sam. Prowadzi AGD/RTV z 193 mln zł.
Kliknij Marża po rabacie. Ten sam wykres pokazuje teraz marżę w złotych przy rabacie ustawionym na suwaku (u nas 12 procent). Komputery i Telefony są pod zerem.
Kliknij Liczba transakcji. Widać, że AGD/RTV to także najwięcej pozycji sprzedaży.
Różnicę między oboma mechanizmami zebraliśmy w jednej tabeli. Zapamiętaj prostą regułę: jeśli użytkownik ma podać liczbę do obliczeń (rabat, podwyżka, docelowa marża), używasz parametru co-jeśli. Jeśli użytkownik ma przełączyć zawartość wizuala (którą miarę, który wymiar widać), używasz parametru pól.
| Cecha | Parametr co-jeśli | Parametr pól |
|---|---|---|
| Co podaje | liczbę (np. rabat 12) | wybór miary lub pola |
| Jak powstaje | GENERATESERIES | tabela z NAMEOF |
| Jak odczytujesz wybór | SELECTEDVALUE w mierze | nie odczytujesz, wrzucasz na oś |
| Typowe użycie w Nordvelli | symulacja rabatu, marży, podwyżki | przełącznik Sprzedaż/Marża/Transakcje |
| Filtruje dane? | nie, tylko podaje liczbę | nie, podmienia pole na osi |
Oba mechanizmy można łączyć. Na jednej stronie raportu Nordvelli możesz mieć suwak rabatu (co-jeśli) i obok fragmentator przełączający wykres między sprzedażą a marżą (parametr pól). Menedżer ustawia rabat 15 procent, przełącza widok na marżę i od razu widzi, które kategorie tracą, wszystko na jednym ekranie i bez klikania między stronami.
Co chcemy osiągnąć. Menedżer, który przesuwa suwak rabatu, musi od razu widzieć, jaki scenariusz ogląda, inaczej łatwo pomylić symulację z wynikiem rzeczywistym. Chcemy pokazać wartość parametru na wykresie, na karcie i w tytule wizualizacji.
Sama miara przeliczająca to za mało, żeby raport był czytelny. Trzeba jeszcze zadbać, żeby użytkownik od razu widział, jaki scenariusz właśnie ogląda. Zaczynamy od wykresu. Kliknij puste miejsce strony i w panelu Wizualizacje kliknij Wykres liniowy (pierwsza ikona w drugim rzędzie).
Ustaw pustą ramkę w lewym dolnym rogu strony. Rozwiń tabelę DimKalendarz i przeciągnij kolumnę PierwszyDzienMiesiaca (tę, którą dodaliśmy w poprzedniej lekcji) do obszaru Oś X.
Rozwiń FaktSprzedaz i przeciągnij do obszaru Oś Y najpierw Łączna sprzedaż, a potem, pod nią, Sprzedaż po rabacie. Przy rabacie 0 obie linie leżą na sobie, przy większym rabacie się rozjeżdżają, i ta odległość to Twój koszt promocji miesiąc po miesiącu. U nas suwak jest na 12, więc linie są już rozsunięte.
Teraz dynamiczny tytuł, żeby wykres sam się podpisywał. Zbuduj w FaktSprzedaz miarę tekstową, która wstawi wybrany rabat do tytułu (FaktSprzedaz, Nowa miara, wzór, Enter). Funkcja FORMAT zamienia liczbę na tekst, a operator & skleja fragmenty. Power BI sam ustawia tej mierze format Tekst.
Tytuł wykresu = "Sprzedaż przy rabacie " & FORMAT([Rabat proc wartość], "0") & "%"Żeby ten tekst trafił na wykres: zaznacz wykres liniowy, w panelu Wizualizacje kliknij ikonę pędzla (Formatuj element wizualny), przejdź na kartę Ogólne i rozwiń sekcję Tytuł. Obok pola Tekst jest mała ikona fx. Najedź na nią, a podpowiedź nazwie rzecz po imieniu: formatowanie warunkowe.
Kliknij fx. Otworzy się okno Tekst tytułu - Tytuł - Tytuł. Styl formatowania zostaw na Wartość pola. Pole Na jakim polu powinniśmy się opierać? jest na razie puste i obrysowane na czerwono, z napisem Wybierz opcję.
Kliknij to pole i zacznij pisać Tytuł. Lista od razu się zawęża: w gałęzi Wszystkie dane, w tabeli FaktSprzedaz zostaje tylko miara Tytuł wykresu.
Kliknij Tytuł wykresu. Miara trafia do pola, a przycisk OK robi się aktywny. Kliknij OK. Od teraz tytuł jest podpięty do parametru.
Ustaw suwak na 15. Tytuł wykresu zmienia się z "Sprzedaż przy rabacie 12%" na "Sprzedaż przy rabacie 15%", gdy tylko ruszysz suwakiem.
Ostatni element to karta z komunikatem, który interpretuje wynik za użytkownika. Zbuduj w FaktSprzedaz miarę, która sama powie, czy scenariusz jest bezpieczny. Funkcja SWITCH z warunkiem TRUE działa jak drabinka "jeśli, w przeciwnym razie": sprawdza kolejne progi marży i zwraca odpowiedni komunikat.
Ocena scenariusza =
VAR MarzaProc = [Marża proc po rabacie]
RETURN
SWITCH(
TRUE(),
MarzaProc < 0, "Scenariusz nierentowny, sprzedaż poniżej kosztu",
MarzaProc < 0.05, "Uwaga, marża pod 5 procent",
"Scenariusz zdrowy"
)Wstaw nową kartę (ikona Karta), przeciągnij do niej miarę Ocena scenariusza i ustaw ją obok wykresu liniowego. Przy rabacie 15 procent marża całej sprzedaży wynosi 1,73 procent, więc karta ostrzega.
Wpisz 20 w pole suwaka. Marża całej sprzedaży spada do minus 4,42 procent, a karta zmienia komunikat.
Do 12 procent włącznie karta pokazuje Scenariusz zdrowy (marża całości 5,08 procent przy rabacie 12). Na koniec ustaw suwak z powrotem na 15.
Co chcemy osiągnąć. Pierwszy scenariusz to ustalanie ceny produktu. Menedżer produktu w Nordvelli chce zobaczyć, jak zmiana ceny sprzedaży wpływa na marżę na jednej pozycji, na przykład na wybranym modelu laptopa z DimProdukty. Gotowe scenariusze biznesowe robimy na nowej stronie, żeby nie mieszały się z symulacją rabatu. Kliknij + na pasku stron (powstaje Strona 8). Zbuduj parametr Cena testowa ręcznie, od 2000 do 6000 zł co 100 zł: wstążka Modelowanie, Nowa tabela, wzór, Enter.
Cena testowa = GENERATESERIES ( 2000, 6000, 100 )Teraz miara, która liczy marżę jednostkową przy cenie testowej. Bierzemy koszt jednostkowy produktu (cena katalogowa CenaNetto minus marża MarzaNetto z DimProdukty, przez SELECTEDVALUE, bo pracujemy na jednym wybranym produkcie) i odejmujemy go od ceny testowej z parametru. Gdy tabela Cena testowa jest zaznaczona, kliknij Nowa miara, wpisz wzór i ustaw format #,0 "zł".
Marża jednostkowa przy cenie testowej =
VAR CenaTest = SELECTEDVALUE ( 'Cena testowa'[Value], 0 )
VAR KosztJedn = SELECTEDVALUE ( DimProdukty[CenaNetto] ) - SELECTEDVALUE ( DimProdukty[MarzaNetto] )
RETURN
CenaTest - KosztJednWstaw Wykres liniowy, rozciągnij go na prawą część strony, przeciągnij kolumnę Value z tabeli Cena testowa do obszaru Oś X, a miarę Marża jednostkowa przy cenie testowej do obszaru Oś Y. Uwaga, pułapka: dopóki nie wybierzesz produktu, SELECTEDVALUE po DimProdukty zwraca pusto, koszt jednostkowy jest pusty i linia pokazuje po prostu samą cenę testową, od 2 do 6 tys. zł.
Kliknij puste miejsce strony, wstaw Fragmentator (pierwsza ikona w piątym rzędzie panelu Wizualizacje), ustaw go po lewej stronie wykresu i przeciągnij do obszaru Pole kolumnę Nazwa z tabeli DimProdukty. Fragmentator z kolumną tekstową od razu pokazuje listę z polami wyboru.
Kliknij na liście Laptop Kelvani Vela Pro 13. Koszt jednostkowy tego laptopa to 4 206 zł (cena katalogowa 4 599 zł minus marża 393 zł). Linia przesuwa się w dół i przecina zero dokładnie tam, gdzie cena testowa zrównuje się z kosztem. To jest Twój próg opłacalności.
| Cena testowa (zł) | Koszt jednostkowy | Marża jednostkowa |
|---|---|---|
| 3 800 | 4 206 | minus 406 |
| 4 200 | 4 206 | minus 6 |
| 4 300 | 4 206 | 94 (pierwsza cena na plusie) |
| 4 600 | 4 206 | 394 (blisko ceny katalogowej 4 599) |
| 5 200 | 4 206 | 994 |
Co chcemy osiągnąć. Obniżka ceny zwykle zwiększa liczbę sprzedanych sztuk, a samo przeliczenie rabatu tego nie uwzględnia. Chcemy prognozować przychód Nordvelli przy zmianie ceny razem z reakcją klientów, czyli elastycznością popytu.
Wracamy do zastrzeżenia z początku: parametr co-jeśli sam z siebie nie zakłada, że niższa cena podniesie sprzedaż. Ale możesz to domodelować drugim parametrem. Zbuduj dwa parametry: Zmiana ceny (od minus 20 do plus 20 procent) i Elastyczność (o ile procent zmieni się wolumen na każdy 1 procent zmiany ceny, na przykład od minus 3 do 0). To jest uproszczony model elastyczności cenowej popytu, czyli zależności "taniej równa się więcej sztuk". Obie tabele robisz tak samo jak Cenę testową: Modelowanie, Nowa tabela, wzór, Enter. Robimy to na tej samej Stronie 8.
Zmiana ceny = GENERATESERIES ( -20, 20, 1 )
Elastyczność = GENERATESERIES ( -3, 0, 0.5 )Miara prognozy przychodu składa oba parametry. Nowa cena to bazowa razy (1 plus zmiana ceny). Nowy wolumen to bazowy skorygowany o elastyczność (zmiana ceny razy elastyczność daje procentową zmianę wolumenu). Prognoza to przychód bazowy przemnożony przez obie korekty. Utwórz ją w FaktSprzedaz i ustaw format #,0 "zł".
Prognoza przychodu =
VAR ZmCeny = SELECTEDVALUE ( 'Zmiana ceny'[Value], 0 ) / 100
VAR Elast = SELECTEDVALUE ( 'Elastyczność'[Value], 0 )
VAR PrzychodBazowy = SUM(FaktSprzedaz[WartoscNetto])
VAR ZmWolumenu = ZmCeny * Elast
RETURN
PrzychodBazowy * (1 + ZmCeny) * (1 + ZmWolumenu)Teraz fragmentatory. Kliknij puste miejsce strony, wstaw Fragmentator, ustaw go pod listą produktów i przeciągnij do obszaru Pole kolumnę Value z tabeli Zmiana ceny. Fragmentator z kolumną liczbową startuje w stylu Między, czyli jako suwak z zakresem od minus 20 do 20, a nagłówek nazywa się Value.
Zmień styl: zaznacz fragmentator, kliknij ikonę pędzla (Formatuj element wizualny), rozwiń Ustawienia fragmentatora, potem Opcje, i w polu Styl wybierz Rozwijanie.
Nagłówek Value nic nie mówi użytkownikowi. Wróć do ikony Utwórz element wizualny (pierwsza ikona pod napisem Wizualizacje), w obszarze Pole kliknij strzałkę przy Value i wybierz Zmień nazwę tej wizualizacji. Wpisz Zmiana ceny i naciśnij Enter. Nazwa zmienia się tylko na tym fragmentatorze, kolumna w modelu dalej nazywa się Value.
Tak samo zrób drugi fragmentator z kolumną Value tabeli Elastyczność: styl Rozwijanie, nazwa nagłówka Elastyczność, ustaw go obok pierwszego.
Postaw dwie karty: jedną z miarą Prognoza przychodu, drugą z Łączna sprzedaż jako punkt odniesienia. I tu kolejna pułapka: obie karty pokazują 30 mln zł zamiast 468 mln zł. To nie błąd miary, tylko fragmentator produktów ze scenariusza 1, który filtruje całą stronę, także nowe karty, do jednego laptopa.
Wyłącz ten wpływ funkcją znaną z lekcji o wizualizacjach podstawowych. Zaznacz fragmentator Nazwa (kliknij jego nagłówek, nie pozycję na liście), na wstążce przejdź na kartę Format i kliknij Edytuj interakcje. Nad innymi wizualami pojawią się dwie małe ikony: Filtruj (wykres) i Brak (przekreślone kółko).
Kliknij ikonę Brak nad kartą Prognoza przychodu i nad kartą Łączna sprzedaż. Karty od razu wracają do wartości dla całej firmy, 468 mln zł. Kliknij Edytuj interakcje jeszcze raz, żeby wyłączyć ten tryb.
Teraz scenariusz z tabeli. Rozwiń listę Zmiana ceny i kliknij 10: przy elastyczności 0 (nic nie wybrane na drugiej liście) podwyżka o 10 procent daje wprost plus 10 procent przychodu, 515 mln zł. Potem rozwiń listę Elastyczność. Wartości pokazują się z dwoma miejscami po przecinku.
Kliknij -2,00. Przy elastyczności minus 2 ta sama podwyżka o 10 procent zbija wolumen o 20 procent i przychód spada, mimo wyższej ceny. To dokładnie ten wniosek, którego zarząd nie zobaczy w statycznym raporcie: podwyżka nie zawsze oznacza więcej pieniędzy.
| Zmiana ceny | Elastyczność | Prognoza przychodu vs baza |
|---|---|---|
| plus 10% | 0 | plus 10,0% (514,55 mln) |
| plus 10% | minus 1 | minus 1,0% (463,10 mln) |
| plus 10% | minus 2 | minus 12,0% (411,64 mln) |
| minus 10% | minus 2 | plus 8,0% (505,20 mln) |
Wskazówka: elastyczność wpisujesz jako założenie, nie jako fakt z danych. Uczciwy raport powinien to jasno zaznaczać (na przykład etykietą "scenariusz zależy od przyjętej reakcji popytu"). Analiza co-jeśli ma pomóc zadać właściwe pytania, a nie udawać, że zna przyszłość.
Co chcemy osiągnąć. Zarząd Nordvelli chce analizować sprzedaż raz według miast, raz według kategorii, raz według kanału sprzedaży. Chcemy zbudować pulpit, na którym ten wybór robi się jednym kliknięciem, bez trzech osobnych wykresów.
Ostatni scenariusz łączy parametr pól z drugą jego zdolnością: przełączaniem nie miar, lecz wymiarów (kolumn opisowych). Dodaj kolejną stronę (Strona 9), przejdź na wstążkę Modelowanie i kliknij Nowy parametr, Pola. W polu Nazwa wpisz Wymiar analizy, a z listy Pola dodaj trzy kolumny: Miasto z DimSklepy, Kategoria z DimProdukty i KanalSprzedazy z FaktSprzedaz (rozwijasz tabelę strzałką i zaznaczasz kolumnę haczykiem).
Kliknij Utwórz. Definicja wygląda tak samo jak przy miarach, tylko NAMEOF wskazuje kolumny.
Wymiar analizy = {
("Miasto", NAMEOF('DimSklepy'[Miasto]), 0),
("Kategoria", NAMEOF('DimProdukty'[Kategoria]), 1),
("KanalSprzedazy", NAMEOF('FaktSprzedaz'[KanalSprzedazy]), 2)
}Przesuń fragmentator w prawy górny róg strony. Wstaw Wykres kolumnowy grupowany, rozciągnij go na lewą część strony, przeciągnij pole Wymiar analizy (to w środku tabeli Wymiar analizy) do obszaru Oś X, a miarę Łączna sprzedaż do obszaru Oś Y. Bez wyboru na fragmentatorze wykres bierze pierwszą pozycję listy, czyli Miasto, a pod wykresem pojawiają się strzałki przechodzenia do szczegółów, bo trzy pola działają jak hierarchia.
Kliknij Miasto na fragmentatorze. Wykres pokazuje sprzedaż jedenastu miast, posortowaną od największej, z Warszawą (222,8 mln zł) wyraźnie najwyżej i Białymstokiem (12,3 mln zł) najniżej.
Kliknij Kategoria, a ten sam wykres natychmiast rozbija sprzedaż na AGD/RTV, Komputery, Telefony i Akcesoria.
Kliknij KanalSprzedazy i widzisz podział na kanały. Jeden wizual, trzy perspektywy, zero dodatkowych wykresów.
Ten wzorzec przydaje się na prezentacji zarządowej. Zamiast pulpitu z dwudziestoma wykresami, dajesz pięć wizuali z przełącznikami, a odbiorca sam drąży to, co go interesuje. Pulpit jest czystszy, szybszy w odbiorze i, co ważne dla wydajności, model ma mniej wizuali do przeliczenia przy każdym otwarciu strony.
Plik do pobrania: wszystkie trzy scenariusze zbudujesz na danych z Nordvella_
Parametry przenoszą raport z poziomu "co się wydarzyło" na poziom "co by było, gdyby". W tym rozdziale zbudowaliśmy dwa różne narzędzia: parametr co-jeśli (GENERATESERIES plus SELECTEDVALUE), który podaje liczbę do obliczeń i pozwolił nam symulować rabat, marżę, widełki cen i prognozę z elastycznością popytu, oraz parametr pól (tabela z NAMEOF), który przełącza miary i wymiary na jednym wizualu.
Trzy rzeczy do zapamiętania. Parametr co-jeśli nie filtruje danych, tylko podaje wartość do wzoru, więc tabela parametru zostaje odizolowana od modelu. Wybór odczytujesz przez SELECTEDVALUE z wartością domyślną, żeby wyczyszczony fragmentator nie zepsuł obliczenia. Parametr pól odwrotnie, wrzucasz go wprost na oś wykresu i nie piszesz żadnej miary odczytu. Gdy opanujesz oba, Twoje raporty Nordvelli przestają być statycznymi obrazkami, a stają się kalkulatorem decyzji, przy którym zarząd sam kręci suwakami. W kolejnym rozdziale pójdziemy dalej w interaktywność: pokażemy przejście do szczegółów (drill-through) i zakładki, żeby użytkownik mógł drążyć od ogółu do pojedynczej transakcji.
Komentarze (0)
Brak komentarzy...