Ako dynamicky vyfarbiť pozadie grafu pre pracovné dni a víkendy v Power BI

Niekedy potrebujete v grafoch zvýrazniť pozadie pre niektoré body. Napríklad v čiarových grafoch, kde potrebujete odlíšiť predaje pre pracovné a nepracovné dni, pomocou rôznych farieb pre tieto typy dní. Grafy v Power BI síce podporujú dynamickú farbu pozadia, ale tá môže byť nastavená len na 1 farbu. A nemôžete ju dynamicky meniť pre každý bod na osi X. To, že to tam momentálne nie je, však neznamená, že to nejde. A preto sa teraz pozrieme, ako pomerne ľahko dynamicky vyfarbiť pozadie grafu pre pracovné dni a víkendy v Power BI.

Čo chceme dosiahnuť

Aby ste mali predstavu, čo chceme dosiahnuť, tak chceli by sme vytvoriť čiarový graf, ktorý obsahuje denné predaje pre cca. 1 mesiac. A jeho pozadie by sme chceli “naformátovať” tak, že tie dni, ktoré sú pracovné, budú podfarbené na pozadí pomocou jednej farby, a víkendy budú podfarbené pomocou druhej farby. Aby užívateľ vedel ľahšie odlíšiť víkendové vs. nevíkendové predaje, a prípadne došiel ľahšie na závislosti v nich, resp. medzi nimi. Vo výsledku teda chceme spraviť nejaký takýto graf:

Ako dynamicky vyfarbiť pozadie grafu v Power BI - výsledok

S čím začneme

Pre demonštráciu si to opäť ukážeme na našom vzorovom súbore Power BI. V prvom kroku si vytvoríme čiarový graf, kde:

  1. na os X dáme stĺpec DateKey z tabuľky Čas,
  2. do oblasti hodnôt dáme merítko Obrat z tabuľky Objednávky,
  3. graf vyfiltrujeme na obdobie 1.7.2001 až 24.7.2001,
  4. nastavíme, aby sa zobrazovali všetky dátumy na osi X (maliarsky valček => Os X => Typ: Kategorické),
  5. naformátujeme pole DateKey na osi X tak, aby zobrazovalo iba dátumy.

Graf by mal vyzerať nejako takto:

Ako dynamicky vyfarbiť pozadie grafu v Power BI - začiatok

A v tomto grafe by sme teraz chceli dosiahnuť to, čo vidíte na obrázku vyššie – aby boli víkendové dni podfarbené jednou farbou, a pracovné dni druhou farbou.

Tu však nastáva problém. Čiarový graf síce podporuje dynamickú farbu pozadia:

…ale iba štýlom všetko alebo nič. Čiže buď to nastaví celé pozadie na nejakú farbu, alebo na žiadnu. Tá farba síce môže byť dynamicky vypočítaná, ale opäť – len 1 farba pre celé pozadie grafu, a nie pre každý bod na X-ovej osi. Preto na to budeme musieť ísť s trochou tvorivosti.

Ako dynamicky vyfarbiť pozadie grafu v Power BI

Využijeme na to klasické stĺpcové grafy. Tento stĺpcový graf špeciálne nastavíme, napasujeme na rozmery a umiestnenie nášho čiarového grafu, a umiestníme ho pod tento graf. Čím sa nám navonok podarí dynamicky vyfarbiť pozadie grafu pre tento čiarový graf. Aj keď v skutočnosti to budú 2 prekryté a vhodne nastavené grafy.

Začneme teda s tým, že si vytvoríme stĺpcový graf, v ktorom budú všetky stĺpce rovnako vysoké. To sa dá dosiahnuť buď cez klasický stĺpcový graf, do ktorého dáme merítko s konštantou (napr. so vzorcom Merítko := 30000), alebo ešte jednoduchšie – využitím 100%-ných grafov. Budeme potrebovať vytvoriť 100%-ný skladaný stĺpcový graf (6. graf vo vizualizačnom paneli Power BI), ktorý nastavíme spočiatku rovnako ako ten hlavný čiarový graf. Preto ten čiarový graf skopírujeme (klasicky Ctrl+C a Ctrl+V) a prepneme ho na ten 100%-ný graf. Výsledok by mal vyzerať takto:

Potom si potrebujeme v dátovom modeli vytvoriť merítko, ktoré bude vracať jednu farbu pre víkendy, a druhú farbu pre ostatné dni. Na určenie víkendov využijeme vypočítaný stĺpec Víkend v tabuľke Čas, ktorý už máme v dátovom modeli:

Následne si vytvoríme toto merítko, s takýmto vzorcom:

Farba pre pozadie grafu =
IF ( SELECTEDVALUE ( 'Čas'[Víkend] ) = "víkend"; "#DDDDDD"; "#BBBBBB" )

Potom prejdeme znova do maliarskeho valčeku pre náš 100%-ný graf, a v ňom nastavíme podmienené formátovanie pruhov grafu pomocou tohto merítka, ktoré sme práve vytvorili:

  • Farby údajov => Predvolená farba => fx => Formátovať podľa: Hodnota poľa => Na základe poľa: merítko “Farba pre pozadie”

Výsledok by mal vyzerať takto:

Podmienené formátovanie grafu v Power BI

Tam vidíte, že pruhy pre víkendové dni majú inú farbu ako pre ostatné, pracovné dni.

Zloženie grafov

Následne potrebujeme cez maliarsky valček nastaviť v tomto 100%-nom grafe tieto nastavenia, aby sme z neho skryli a zamaskovali v ňom veci, ktoré nutne nepotrebujeme zobrazovať:

  1. Os X => Farba: Biela
  2. Os X => Minimálna šírka kategórie: 20
  3. Os X => Vnútorné odsadenie: 0%
  4. Os Y => Farba: Biela
  5. Os Y => Mriežka: Vypnúť
  6. Názov: Vypnúť

Výsledok by mal vyzerať takto:

A tento graf teraz využijeme na simuláciu pozadia čiarového grafu. Stačí spraviť tieto 2 jednoduché kroky:

  1. presunúť 100%-ný graf na pozíciu čiarového grafu (tak, aby bol nad čiarovým grafom),
  2. premiestniť 100%-ný graf pod čiarový graf – v hlavnom menu cez Formát => Presunúť ďalej => Presunúť dozadu:

Potom stačí kliknúť hocikde inde na prázdnu plochu v reporte, aby to Power BI Desktop prekreslil správne, a mali by ste dostať takýto výsledok:

Ako dynamicky vyfarbiť pozadie grafu v Power BI - hrubý výsledok

Nakoniec vieme dynamicky vyfarbiť pozadie grafu

Nie je to síce ideálne, ale už sme blízko. Teraz už len stačí trocha chirurgickej práce a trpezlivosti. Stačí sa pohrať s rozmermi 100%-ného grafu, aby jeho stĺpce presne lícovali s bodmi na x-ovej osi v čiarovom grafe, a po chvíli snaženia sa by ste mali dostať už ideálny výsledok:

Ako dynamicky vyfarbiť pozadie grafu v Power BI - výsledok

A presne to sme chceli. Dynamicky vyfarbiť pozadie grafu pre pracovné dni a víkendy v reporte Power BI. Napriek tomu, že to ešte stále nie je podporované, sa to dalo spraviť relatívne jednoducho, cez techniku vrstvenia grafov a pomocou trošky tvorivosti. Podobne ako sa dajú spraviť aj iné “nemožné” veci, ktoré som ukazoval buď v starších článkoch, na webinári o pokročilej interaktivite alebo na jednom z mojich workshopov. A ako vidíte, tak stačili na to základné znalosti práce s Power BI. A hneď je deň krajší 🙂