Power BI desktop Pavel Lasák - Excel, Power BI, G-tabulky Načtení Vizualizace SdíleníÚprava Propojení Power BI Desktop Soubory (xls, csv, pdf) Složky Web Databáze …. Práce s řádky Úpravy se sloupci Řazení filtrování Transformace M - jazyk Propojení tabulek Slučování Hierarchie Vazby DAX …. Grafy Ovládací prvky Texty Obrázky …. Pdf Csv Cloud …. Power BI - DAX Teorie (porovnání s funkcemi v Excel) Výpočtové sloupce Výpočtové míry (i rychle) Výpočtové tabulky … DAX DAX - Data Analysis Expressions • Jazyk vzorců funkcí, operátorů a konstant • Výpočet a vrácení jedné nebo více hodnot • Využívá datovým model • Nejde o programovací jazyk A DAX tři základní koncepty „pojmy“ • Syntaxe • vzorce, který vytváříte • příkazy, znaménka, operátora, sloupce, řádky nebo tabulky • jde programová struktura. • Kontext • týká se cílového řádku začleněného do vzorce • kontext řádku • kontext filtru • Funkce • předdefinované a známé příkazy A Typy „druhy“ kalkulací v DAX • Výpočtový sloupec: • vytvoří nový sloupec ve vybrané tabulce • vypočítá hodnoty pro každý řádek. • Nová míra: • výraz DAX který provede výpočet nad vašimi daty. • Nová tabulka: • Výraz DAX, který vytvoří novou tabulku. • Rychlá míra: • vybrat ze seznamu předdefinovaných výpočtů. A Umí i Excel – Power Pivot Kontexty • Kontextem se rozumí cílový řádek začleněný do vzorce pro vyhledávání nebo výpočet. • Důležité k pochopení fungování DAX • Jak se bude počítat (když budou filtry) • Dva druhy kontextu: • Kontext řádku • Výpočet se provede nad každým řádkem • Kontext filtru • Na výpočet (ne)mají vliv nastavení filtry A Syntaxe DAX (1) Název míry – Celkem zisk (2) = označuje začátek vzorce. (3) Funkce DAX sečte všechna čísla sloupce [Zisk] tabulky Prodeje (4) () závorky Obklopují funkci (výraz), uvnitř funkce argumenty (5) Prodeje – název tabulky (6) Sloupec [Zisk] nachází v tabulce Prodeje. A1 2 3 4 4 5 6 Funkce • Viz syntax funkce A Poznámky A DAX vs Excel •Stejné s Excel •Lepší než Excel •Horší jak Excel B Stejné s Excel • DAX má stejné názvy funkcí a jejich význam • funkce - (např. YEAR - z datum zjistí rok, atd.) • snad se nebudou překládat do češtiny • DAX obsahuje stejné kategorie • plus pár kategorií navíc, obsahující speciální funkce. • Zápis funkcí funguje podobně • Připomíná z Excel tabulky formátované jako tabulka • Odkazujete se přes názvy sloupců (tabulek) • Funguje nad celým sloupcem > kontext • Stejné designové možnosti funkcí • při psaní funkcí používat Alt + Enter (nový řádek), mezerník (mezery ve funkci) • Navíc lze do DAX psát poznámky B Lepší než v Excel • Názvy funkcí jen v angličtině EN • doufám, že se nezmění • Lze pracovat elegantně s více "propojenými" tabulkami (mají nastavené relace) • Jsou k dispozici zajímavé funkce • FILTER • CALCULATE • SUMX, atd. • Pojmenovávat tabulky, sloupce • není nad pořádek v názvech tabulek a sloupců • Poznámky ve vzorci B Horší jak v Excel Najít nějaká proti, když se vám nástroj líbí, … • Nutnost mít dobře pojmenovány tabulky • Jinak se můžete "ztratit" a výpočet zkomplikovat (na druhou stranu je to i výhoda, nutí vám mít v tabulkách a datech pořádek) • Některé funkce nejsou až tak intuitivní • můžete funkci napsat chybně, • musíte znát syntaxi a i rozdíly SUM, SUMX • Chápat kontext • CALCULATE, FILTER (jak zapůsobí filtr nad vizuálem?) B Na co dávat pozor! • V Excel Power Pivot := v Power BI jen = • Středník, čárka pro oddělování argumentů • Anglické názvy funkcí • || a && pro OR a AND • / nebo dělení DIV… • Funkce SUM vs SUMX (mohou být jinak definovány než v Excel) • Kontext řádku a filtrů B Poznámky B Nutná teorie • Budete se vracet • Datové typy • Operátory aritmetické • Operátory porovnávací • Logické • Textové • Pořadí operátoru • Vyhrazená slova C DAX Aritmetické operátory C Operátory porovnávací C Textové - Slučovací C Logické C Poznámky v kodu // Poznámka /* Více Řádková Poznáma */ Pořadí operátoru • C Datové typy C Vyhrazená slova • DEFINE Definuje jednu nebo více entit, které existují výhradně po dobu trvání záznamu DAX. • EVALUATE Vyžaduje se pro provedení jakéhokoli typu dotazu DAX. • ORDER BY Používá se pro jeden nebo více výrazů k seřazení výsledků v dotazu DAX. • VAR Ukládá výsledek výrazu jako pojmenovanou proměnnou a lze jej předat téměř jakémukoli argumentu, včetně jiných výrazů pro měření C Poznámky C Funkce v DAX 1. Datum a čas (Date and time)– CLOSINGBALANCEMONTH, ... DATE, DATEADD, ... o Funkce data a času pomáhají vytvářet výpočty založené na datech a časech. Mnoho funkcí v DAXu je podobných funkcím data a času v Excelu. 2. Matematické (Math) – ABS, ACOS, ... CURRENCY, DEGREES, ... SUM, SUMX o Matematické funkce v DAXu jsou velmi podobné matematickým a trigonometrickým funkcím aplikace Excel. 3. Statistické (Statistical) MEDIAN, GEOMEAN, … o Statistické agregační funkce. 4. Agregační (Aggregation) – AVERAGE, COUNT, COUNTX, COUNTA, COUNTAX, SUM, SUMX... o Agregační funkce vracejí skalární hodnotu při použití agregační funkce na sloupec nebo na výraz vyhodnocený iterací výrazu tabulky. 5. Textové (Text) – BLANK, CONCACENATE, CONCACENATEX, .... o Textové funkce manipulují s řetězci. D Funkce v DAX 6. Logické (Logical)– AND, FALSE, IF, IFERROR, NOT ... o Logické funkce působí na výraz a vracejí informace o hodnotách nebo množinách ve výrazu. 7. Filtr (Filter) - nejsou v Excel, ALL, CALCULATE, FILTER... o Funkce filtru manipulují s kontextem tabulky a filtru. 8. Informace (Information) - nejsou v Excel – CONTAINS, CONTAINSROW, ... ISBLANK, ... o Informační funkce poskytují informace o typu dat nebo kontextu filtru zadaného argumentu. 9. Nadřazené/Podřízené (Parent-child) - nejsou v Excel - PATH, ... o Tyto funkce pomáhají zploštit vztah rodič-dítě na pravidelný. 10. Finanční (Financial) o Finanční funkce odpovídající stejnojmenným funkcím Excelu. D Funkce v DAX 11. Vazby-Relace (Relationships) – o Tyto funkce spravují a manipulují se vztahy mezi tabulkami. 12. Manipulace s tabulkou (Table manipulation) - DATATABLE o Tyto funkce manipulují s tabulkami a vracejí je. 13. Časová inteligence/měřítko (Time Intelligence) o Funkce časové inteligence podporují výpočty pro porovnávání a agregaci dat v časových obdobích, přičemž podporují dny, měsíce, čtvrtletí a roky. 14. Další (Other) o Jedná se o speciální funkce, které nelze zařadit do jiných kategorií. D Seznam funkcí • Viz pdf D Poznámky D Od teorie k praxi • Jak zadat výpočty? E Zadávání vzorců - Sestava • Modelování > Výpočty • Nová míra E Zadávání vzorců - Data • Nástroje tabulky E IntelliSense (Inteligentní nápověda). • Aplikace Power BI Desktop má funkci IntelliSense • Inteligentní nápověda • IntelliSense pomáhá při psaní kódu • automaticky doplňuje kód • za pochodu zobrazuje názvy tabulek sloupců • Syntaxe funkcí • Pozor na české znaky (trochu zlobí). E Tipy při psaní DAX • Nový řádek • Alt + Enter (Shift + Enter) • Zvětšení • Ctrl + kolečko myši • Skákání po řádcích • Alt + šipky nahoru dolů • Skok na řádek • Ctrl + G • Začátek / konec • Ctrl + Home / Ctrl + End E Tipy při psaní DAX • Označit řádek • Ctrl + L • Výběr všech výskytů aktuálního výběru(slova) • Ctrl + Shift + L • Vloženíkurzoru • Alt + klik • Přidání/Odebrání komentáře k řádku • Ctrl + K + C Ctrl + K + U • nejdřív K poté C(U) E Poznámky E Výpočtové sloupce • Calculated columns v EN (počítaný sloupec, Nový sloupec) • Výpočet výpočtových sloupců probíhá až po vytvoření datového modelu • Vypočtené sloupce jsou uloženy v tabulce, ke které jsou přiřazeny, • Hodnoty jsou statické, • Přepočet po obnovení dat. • Tip Sloupec možno přidat i v Power Query Editoru G Ukázka výpočtového sloupce • Název tabulky Název sloupce v tabulceNázev výpočtového sloupce G Data • Mějme tabulku G Výpočtové sloupce - prakticky • Úkol: • Výpočet odměny • Vytvořit kód MM-YYYY( • Způsob 1 • Způsob 2 • Vypočíst-věk • Kategorie-SWITCH • RELATED-napojení do další tabulky G Vytvoření počítaného sloupce • Zobrazí se název nové míry Sloupec = (Columns =) G Zadání výpočtu odměny • Přepíšu název sloupce na Odměna • Přidám = • Zadám ' (apostrof) • PBI nabídne název tabulky a názvy sloupců (klik myš) - Tab • Vyberu 'Zamestnanci'[Odpracováno] • Přidám * (krát) a ' (apostrof) • Vyberu 'Zamestnanci'[Hodinová_sazba] • Potvrdit Enter G Odměna • Výsledný vzorec: Odměna = 'Zamestnanci'[Odpracováno]*'Zamestnanci'[Hodinov á_sazba] G Vytvoření celého jména • Vzoreček Celé jméno = 'Zamestnanci'[Jméno] & " " & 'Zamestnanci'[Příjmení] G Kód MM-YYYY • Zjistím měsíc Kod_MM-YYYY = MONTH('Zamestnanci'[Datum_narození]) • Jen budu mít jednociferné u 1 – 9, doplním o nulu Kod_MM-YYYY = "0" & MONTH('Zamestnanci'[Datum_narození]) • Budu mít trojciferné u 10 – 12, oříznu zprava Kod_MM-YYYY = RIGHT("0" & MONTH('Zamestnanci'[Datum_narození]),2) G Kód MM-YYYY • Přidám pomlčku a rok Kod_MM-YYYY = RIGHT("0" & MONTH('Zamestnanci'[Datum_narození]),2) &"-" & YEAR('Zamestnanci'[Datum_narození]) G Kód MM-YYYY – verze 2 • Nebo využitím funkce FORMAT • Kod_MM-YYYY-v2 = FORMAT('Zamestnanci'[Datum_narození],"MM-YYYY") G Věk • Využijeme funkci DATEDIFF VěkStudneta = DATEDIFF('Zamestnanci'[Datum_narození], TODAY(), YEAR) • Co se nelíbí? G Věk 2 VěkStudenta2 = IF( FORMAT('Zamestnanci'[Datum_narození], "MMDD") <= FORMAT(TODAY(), "MMDD"), DATEDIFF('Zamestnanci'[Datum_narození], TODAY(), YEAR), DATEDIFF('Zamestnanci'[Datum_narození], TODAY(), YEAR) -1) G Věk vylepšení • Co se ještě nelíbí? • Formátování • Názvy tabulky • Poznámky G Věk vylepšeno - formát VěkStudenta3 = IF ( FORMAT ( [Datum_narození], "MMDD" ) <= FORMAT ( TODAY (), "MMDD" ), DATEDIFF ( [Datum_narození], TODAY (), YEAR ), DATEDIFF ( [Datum_narození], TODAY (), YEAR ) - 1 ) // Poznámka ve funkci G Formátování • Nový řádek • klávesy Shift + Enter (funguje i Alt + Enter) • // poznámka G SWITCH - Kategorie Kategorie = SWITCH ( TRUE (), 'Zamestnanci'[VekStudenta2] >= 100, "D", 'Zamestnanci'[VekStudenta2] >= 60, "C", 'Zamestnanci'[VekStudenta2] >= 18, "B", "A" ) G Kategorie dle věku – verze 2 KategorieA = SWITCH ( TRUE (), 'Zamestnanci'[VekStudenta2] >= 100, "100 + ", 'Zamestnanci'[VekStudenta2] >= 60, "60 -99", 'Zamestnanci'[VekStudenta2] >= 18, "18-59", "0-17" ) G RELATED, RELATEDTABLE, LOOKUPVALUE • RELATED – • Musí být vazba • Lze přiřadit hodnoty z druhé tabulky • (SVYHLEDAT) • RELATEDTABLE • LOOKUPVALUE • Připomíná SVYHLEDAT • Tabulky nemusí být propojeny G RELATED • Musí být vazba Rozsah vek = RELATED(Kategorie1[Věk]) G Prostor pro poznámky G Nová tabulka • v J Tabulka • DATATABLE (ColumnName1, DataType1, ColumnName2, DataType2..., {{Value1, Value2...}, {ValueN, ValueN+1...}...}) • ColumnName Libovolný výraz DAX, který vrací tabulku • DataType Výčet, který zahrnuje: INTEGER, DOUBLE, STRING, BOOLEAN, CURRENCY, DATETIME • Hodnota Jeden argument, který používá syntaxi Excelu pro konstantu jednorozměrného pole vnořenou za účelem poskytnutí pole polí. Tento argument představuje sadu hodnot dat, které budou v tabulce. 1. BOOLEAN (True/False) 2. CURRENCY (Fixed Decimal Number) 3. DATETIME (Date/Time) 4. DOUBLE (Decimal Number) 5. INTEGER (Whole Number) 6. STRING (Text) J První tabulka Zakaznik = DATATABLE ( "ID", INTEGER, "Jmeno", STRING, { { 1, "ABC" }, { 2, "HIJ" }, { 3, „XYZ" } } ) Jméno tabulky Jméno sloupce Datový typ Definice sloupců Data, řádky Jeden záznam - řádek JFunkce První tabulka - výsledek • J Druhá tabulka Tabulka_ukazka = DATATABLE ( "Vyrobek", STRING, "Počet prodejů 2020", INTEGER, "Počet prodejů 2021", INTEGER, "Popisek", STRING, -- Například pro tool tip "Kategorie", STRING, { { "Kniha", 5, 10, "Popisek ke knize", "A" }, { "Propiska", 10, 100, "Popisek k propisce", "B" }, { "Sešit", 100, 10, "Popisek k sešitu", "A" } } ) J Třetí tabulka Tabulka_vše typy = DATATABLE ( "Výrobek", STRING, -- Text "Datum", DATETIME, -- datum "Datum2", DATETIME, -- čas "Datum3", DATETIME, -- datum a čas "Kuřák", BOOLEAN, -- Logická "Cena", CURRENCY, -- Fixované des číslo, nastaven formát čísla "Věk", INTEGER, -- Číslo "Desetinné", DOUBLE, -- Desetinné číslo { { "Kniha", "2015-01-01", "10:15", "2015-01-01 20:10", TRUE, 21.12, 10, 1.12345 }, { "Kniha", "2015-01-01", "10:15", "2022-01-01 20:10", TRUE, 21.1222, 10, 1.145 }, { "Kniha2", "2015-01-01", "10:15", "12/25/2017 2:00:00 AM", FALSE, 21, 100, 1.0 } } ) J Třetí tabulka - výsledek J Poznámky J Rychlá míra – Quick measure • Mějme tabulku úspěšnost studentů K Rychlá míra • Výběrem rychlá míra K Rychlá míra • Vyberu hodnoceni hvězdičkami K • Do základní hodnota • Splnění • Klik • OK K DAXová funkce K Co když provedu ještě jednou pro procento? • A klik na OK • Tip nastavit limity… K Výsledek do vizuálu • Pokud nebude správně nastaveno K Poznámky K Výpočtová míra • Nejsou přiřazeny ke konkrétní tabulce • Nevytváří se hodnoty do tabulky • Jde o „vzorec“ • validovat v zobrazení dat • Ve vizuálu, • Externí pomůckou • Nejsou statické (mění se) • Pracují v kontextu aktuálního filtru sestavy • Výpočet může ovlivnit kontext řádku • Automaticky spolupracují s vazbami L Data • Mějme tabulku L Výpočtová míra - Prakticky • Vypočtené míry - základní agregace • Náklady celkem – Součet := Nákupní cena ks * Počet prodaných ks • (PomocNaklady) • Tržby celkem – Součet := Prodejní cena ks * Počet prodaných ks • (PomocProdeje) • Zisk – Rozdíl Tržby celkem – Náklady celkem • Zisková marže - Zisk / Tržby celkem L Výpočtová míra - Kde „nakliknout“ • Sestava • Data • Pravý klik nad tabulkou • Tři tečky L Výpočtová míra - Agregační neagregační • Načtená data • Typ kontrola sloupců ! • Syntaxe SUM • Vložíme vzorce (využijeme pomocné sloupce) Naklady celkem pomoc = SUM(Prodeje1[PomocNaklady]) Tržby celkem pomoc = SUM(Prodeje1[PomocProdeje]) L Výpočtová míra – Funkce - SUM syntaxe L Výpočtová míra - Agregační neagregační • Pokud pomocný sloupec nechceme • Nejen úspora místa • SUM vs SUMX • Naklady celkem = SUMX('Prodeje1','Prodeje1'[Nákupni cena ks]*'Prodeje1'[Počet prodaných ks]) • Tržby celkem = SUMX('Prodeje1','Prodeje1'[Prodejní cena Kč ks]*'Prodeje1'[Počet prodaných ks]) L Výpočtová míra – Funkce - SUM syntax • L Výpočtová míra – Otestujeme • Vizuál tabulka L Výpočtová míra – Zisk Zisk komplikovane = SUMX('Prodeje1','Prodeje1'[Prodejní cena Kč ks]*'Prodeje1'[Počet prodaných ks]) SUMX('Prodeje1','Prodeje1'[Nákupni cena ks]*'Prodeje1'[Počet prodaných ks]) • Proč? • Jak vylepšit? • Máme již Náklady a tržby? • Přemýšlet při tvorbě L Výpočtová míra – Zisk - lépe Zisk = 'Prodeje1'[Tržby celkem] - 'Prodeje1'[Naklady celkem] • Je pochopitelnější? • Využiji výpočtové míry, které již mám • POJMENOVÁNÍ L Výpočtová míra – Kontrola L Výpočtová míra – Zisková marže •Jak vypočteme ručně: Zisk / Tržby celkem • Dělením Marze deleni = 'Prodeje1'[Zisk] / 'Prodeje1'[Tržby celkem pomoc] • Funkci DIVIDE Marže = DIVIDE( 'Prodeje1'[Zisk] , 'Prodeje1'[Tržby celkem pomoc]) L Výpočtová míra – Syntaxe DIVIDE • v L Výpočtová míra – Otestuji • Co se nelíbí? • % L Výpočtová míra – Vylepšení „měr“ • Nastavení procent • Formát • …. L Výpočtová míra – Vylepšení - Částky - Kč • kč L Výpočtová míra – Výsledek? • L Výpočtová míra – Kontext řádku L Výpočtová míra – Kontext filtru L Poznámky L Výpočtové míry - časově •Jak počítat časově závislé údaje •Tržby • Od začátku roku • Dle čtvrtletí • Dle měsíců • Začátek fiskálního roku (třeba od 6.6.) • Tržby za předchozí rok M Výpočtové míry - časově - komplikace • Odkazovat se na míru datum/čas • Mít správně definován typ datum • Viz DAX a časové měřítko M Data M TOTALYTD M Připravit si „míru“ ZiskMira = Sum(ProdejeZaklad[Zisk]) // Vrací skalár M Výpočtové míry - Od začátku Y/Q/M • Od začátku roku Od začátku roku = TOTALYTD([ZiskMira],'ProdejeZaklad'[Datum prodeje]) • Podle čtvrtletí Od začátku čtvrtletí = TOTALQTD([ZiskMira],'ProdejeZaklad'[Datum prodeje]) • Od začátku měsíce … M Bez pomocné míry Od začátku roku 2 = TOTALYTD(SUM([Zisk]),'ProdejeZaklad'[ Datum prodeje]) M Výsledek M Výpočtové míry - Od začátku roku fiskál Od začátku roku fiskal = TOTALYTD([ZiskMira],'ProdejeZaklad'[Datum prodeje], "4/30") • Tip • Funguje pro čtvrtletí/měsíc M Kontrola • M Výpočtové míry - Předchozí rok Predchozi rok = CALCULATE ( [ZiskMira], SAMEPERIODLASTYEAR ( 'ProdejeZaklad'[Datum prodeje] ) ) M Výpočtové míry - Výsledek M Výpočtové míry - Poznámky M Výpočtové míry - Praktické použití funkcí •Ve výpočtových mírách lze použít funkce: •CALCULATE •FILTER •ALL P Syntaxe funkcí viz Google – Např. CALCULATE • P Výpočtové míry - Funkce - Data • Mějme tabulku P Výpočtové míry - Funkce - Požadavky • Co se nám může hodit vypočíst? • Počet dle konkrétní barvy u dané barvy • Počet všeho bez ohledu na barvu • Počet za vybranou barvu všude • Počet za vybranou barvu dle barvy • Některé výpočty se budou hodit do dalších výpočtu • Jak jsou na tom jiné barvy vs červená atd. …. P Výpočtové míry - Funkce - Co můžeme chtít •Kontext řádku •Kontext filtru P Výpočtové míry - Funkce – Počet celkem • Lze i využitím funkce SUM (nebo SUMX) • Případně CALCULATE Celkem počet = CALCULATE(SUMX(Barvy,‘Barvy‘[Počet ])) P Výpočtové míry - Funkce – Celkový počet Celkem počet nefiltruje = CALCULATE(SUMX(Barvy,'Barvy'[Počet ]),ALL('Barvy'[Barva])) P Výpočtové míry - Funkce – • Počet pro červenou všude Celkem počet cervena = CALCULATE(SUMX(Barvy,'Barvy'[Počet ]),'Barvy'[Barva]="červená") P Výpočtové míry - Funkce – • Počet červené jen u červené Celkem počet cervena jen = CALCULATE(SUMX(Barvy,'Barvy'[Počet ]),FILTER( 'Barvy', 'Barvy'[Barva]="červená")) P Výpočtové míry - Funkce – Výsledek • Máme co potřebujeme? • Jaký vliv budou mít další filtry • Třeba dle kategorie? P Poznámky P Proměnné • V komplexnějších vzorcích se neobejdete bez proměnných • Pouze pro dokreslení problematiky – ukázky • Přesahuje rámec kurzu • Více weby • Microsoft • Marco Ruso • atd V Proměnné Pozdrav = Var Test1 = "Ahoj světe" Return Test1 Pozdrav_2 = VAR Test1 = "Ahoj světe" RETURN Test1 V Proměnné Measure_1 = Var Test1 = 1 Var test2 = 2 Return Test1 + Test2 V Proměnné - poznámky V Zajímavé funkce • Máte nějakou zajímavou? X Zajímavé funkce X DAX – Knihy, videa •Knihy •Blogy •Videa •Konference •PRAXE… Z Knihy • Definitive Guide to DAX • „Bible“ DAX Z Knihy • Z