Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Power BI nabízí několik nástrojů pro provádění výpočtů založených na čase, které závisí na automatických tabulkách kalendářních dat nebo tabulkách kalendářních dat, které přidáte.
Doporučujeme používat časové měřítko založené na kalendáři (Preview), protože poskytuje nejlepší výkon a nejvyšší flexibilitu pro splnění libovolného kalendáře.
Tato tabulka porovnává poskytnuté tři nástroje:
| Tool | Vyžaduje se úsilí o nastavení. | Snadná správa | Flexibilita | Poznámky |
|---|---|---|---|---|
| Automatické datum a čas | prakticky nula | tvrdý | nízký | Zvyšuje velikost modelu kvůli vytvoření více skrytých tabulek kalendářních dat. |
| Klasická časová inteligence | médium | snadný | nízký | Vyžaduje vytvoření tabulky dat, předpokládá použití gregoriánského nebo posunutého gregoriánského kalendáře, a v některých konkrétních scénářích trpí problémy s výkonem. |
| Kalendářová časová inteligence | vysoko | médium | vysoko | Doporučujeme vytvořit tabulku kalendářních dat, nejvyšší flexibilitu, nejlepší výkon, ale vyšší náklady na nastavení. |
Poznámka:
Nedoporučujeme používat alternativní techniky časové inteligence, zejména ty, které zahrnují přidání dalších sloupců do tabulek dat k výpočtu posunů, s výjimkou specifických případů použití. I když se tyto přístupy mohou zdát lákavé pro začátečníky díky jednoduchým vzorcům DAX, mohou zbytečně rozšiřovat sémantické modely. To může vést k pomalejšímu obnovování dat a snížení výkonu reportu, jak se datové sady zvětšují.
Automatické datum a čas
Funkce automatického nastavení datumu a času automaticky vytvoří skryté tabulky dat pro každé datové pole v datovém modelu. Další informace o tomto automatickém chování najdete v tématu Použití automatického data a času v Power BI Desktopu.
Poznámka:
I když je automatické datum a čas praktickou možností pro jednoduché modely, nedoporučuje se pro složitější scénáře a větší modely. Pro tyto modely je vhodnější vytvořit vyhrazenou tabulku pro větší flexibilitu.
Přidání tabulky kalendářních dat
U většiny modelů se doporučuje přidat tabulku kalendářních dat (nebo více v některých scénářích). Mnoho datových analytiků dává přednost vytváření vlastních tabulek kalendářních dat, což je v pořádku.
Existuje několik způsobů vytvoření takové tabulky, mezi které patří:
- Power Query M. Můžete použít funkci List.Dates . Příklad je uveden dále v tomto dokumentu.
- DAX. Pomocí funkcí CALENDAR nebo CALENDARAUTO můžete vygenerovat základní počítanou tabulku kalendářních dat. K vytvoření tabulky kalendářních dat můžete také použít pokročilejší příkaz DAX. Příklad je uveden dále v tomto dokumentu.
- Externí nástroje.
- Načítání ze zdroje, jako je zdrojový systém, soubor nebo jiný sémantický model Power BI.
Která možnost je pro vás nejvhodnější, závisí na různých faktorech a je nad rámec tohoto kurzu.
Práce s výpočty založenými na čase
Za předpokladu, že nepoužíváte automatické datum a čas, existují dva alternativní způsoby práce s funkcemi časového měřítka v Power BI k provádění výpočtů založených na čase:
- Klasická časová inteligence. Nejjednodušší možnost a funguje skvěle pro gregoriánské nebo přesunuté gregoriánské kalendáře, ale má omezenou flexibilitu pro kalendáře, které jsou strukturovány odlišně nebo pro týdenní výpočty.
- Časové měřítko založené na kalendáři (Preview) Novější možnost, ale k nastavení vyžaduje trochu víc práce. Poskytuje ale také lepší výkon, větší flexibilitu při práci s negregoriánskými kalendáři a možnost provádět týdenní výpočty.
Poznámka:
Tabulku musíte nastavit jako tabulku kalendářních dat pro konkrétní scénáře.
Klasická časová inteligence
Tato možnost vyžaduje, abyste měli v modelu tabulku kalendářních dat a odpovídajícím způsobem ji nastavili. Potom můžete použít funkce časové inteligence a odkazovat na svoji tabulku dat. Pokud máte například tabulku kalendářních dat s názvem Date v modelu, kterou jste nastavili jako tabulku kalendářních dat, která obsahuje sloupec Datum, můžete použít:
SAMEPERIODLASTYEAR ( 'Date'[Date] )
I když se jedná o rychlý a snadný přístup, existuje v porovnání s přístupem založeným na kalendáři mnoho nevýhod:
- vyžaduje, abyste nastavili tabulku kalendářních dat.
- funguje jenom s modely, které mají aspoň jednu vyhrazenou tabulku kalendářních dat.
- Použité sloupce kalendářních dat by neměly obsahovat žádná chybějící kalendářní data mezi prvním a posledním datem. Pokud mezi prvním a posledním datem chybí nějaká kalendářní data, vyvolá se chyba.
- je méně flexibilní, protože je optimalizovaná pro gregoriánské nebo přesunuté gregoriánské kalendáře, jako jsou fiskální roky, které začínají 1. července, ale stále následují gregoriánský kalendář.
- neposkytuje týdenní výpočty.
- v konkrétních scénářích nefungují výpočty založené na čase dobře.
Poznámka:
Doporučujeme použít vylepšený přístup založený na kalendáři .
Inteligence založená na kalendářním čase (náhled)
Kalendáře jsou definice metadat přidané do tabulky, které označují sloupce z této tabulky, které představují atributy času. V libovolné tabulce v modelu můžete definovat jeden nebo více kalendářů. Po definování kalendáře v modelu na něj můžete odkazovat ve funkcích časové analýzy. Tady je příklad, jak vypočítat celkový rok k datu prodeje pomocí definovaného fiskálního kalendáře:
TOTALYTD ( [Sales], 'Fiscal Calendar' )
Výhody kalendářem založené časové inteligence
Mezi hlavní výhody kalendářové časové inteligence patří:
Funguje s libovolným kalendářem
Kalendáře poskytují plnou flexibilitu při rozhodování, jak rozdělit čas v letech, čtvrtletích, měsících a týdnech. Můžete například definovat kalendáře, které se řídí těmito vzory:
- Gregorian
- Posunutý gregoriánský kalendář
- Maloobchod (445, 454, 544 schémata)
- 13měsíční
- Měsíční
Možnosti jsou nekonečné, protože z Power BI neexistuje žádný předdefinovaný předpoklad, jak je váš kalendář strukturovaný. Časové měřítko založené na kalendáři nepředpokládá podkladová data. Všechny výpočty používají základní data přesně tak, jak jsou.
Řídké termíny
Klasické časové měřítko vyžaduje, aby byl zadaný sloupec kalendářních dat dokončený – pokud mezi prvním a posledním datem chybí nějaká kalendářní data, vyvolá se chyba. Funkce kalendářově založené časové inteligence nemají takový požadavek. Místo toho pracují s daty v jejich aktuální podobě. I když stále doporučujeme mít úplnou a vyhrazenou tabulku kalendáře, už ji nemusíte mít. Pokud jsou například všechny maloobchodní prodejny uzavřeny o víkendu, můžete přeskočit přes víkendové dny, protože nemají žádné prodeje. Za předpokladu, že je víkend sobota a neděle, teď můžete použít PREVIOUSDAY kalendář založený na tabulce, která neobsahuje záznamy o víkendu, abyste mohli přejít z pondělí rovnou do pátku.
Výpočty založené na týdnech
Kalendářová časová inteligence přímo poskytuje funkce DAX, které pracují s týdenní granularitou. Například celkové součty od týdne do data je možné vypočítat přímo pomocí TOTALWTD:
TOTALWTD ( Expr, CalendarName )
Vylepšení výkonu
Některé scénáře můžou vykazovat vyšší výkon při porovnávání funkce časového měřítka založeného na kalendáři s jeho klasickým protějškem. Například vizuál, který je seskupen podle týdne a provádí výpočet k aktuálnímu datu pomocí TOTALYTD ( ..., CalendarName ), by měl být obecně proveden rychleji, než kdyby byl použit jeho klasický protějšek TOTALYTD ( ..., TableName[DateColumnName] ). Informace o tom, proč k tomu může dojít, najdete v části Vymazání kontextu .
Povolit vylepšenou funkci DAX Time Intelligence v náhledové verzi
Abyste mohli začít, musíte nejdřív povolit funkci Rozšířené časové měřítko DAX ve verzi Preview.
- V Power BI Desktopu přejděte na Soubor > Možnosti a nastavení > Možnosti > Náhled funkcí.
- Vyberte rozšířený náhled časového měřítka DAX .
- Vyberte OK.
- Restartování Power BI Desktopu
Správa kalendářů
Pokud chcete kalendář spravovat, klikněte pravým tlačítkem myši na tabulku obsahující kalendář nebo na kterou chcete kalendář definovat, a zvolte možnosti kalendáře nebo vyberte možnosti kalendáře na pásu karet Nástroje tabulky po výběru tabulky:
Případně můžete k definování kalendáře použít externí nástroje nebo zobrazení TMDL . Další informace najdete ve skriptu TMDL.
Kalendáře se také zobrazují v Průzkumníku modelů v tabulce, na které jsou definované:
Obrazovka možností kalendáře
Na obrazovce možností kalendáře se zobrazují kalendáře definované ve vybrané tabulce. Tady můžete:
- Vytvořte nový kalendář výběrem Nový kalendář
- Úprava existujícího kalendáře výběrem možnosti Upravit
- Odstranění existujícího kalendáře výběrem možnosti Odstranit
- Nastavení tabulky jako tabulky kalendářních dat výběrem možnosti Označit jako tabulku kalendářních dat
Přiřazení kategorií sloupců
Definování kalendáře zahrnuje pojmenování a přiřazení sloupců kategoriím. Každá kategorie představuje jednotku času a jsou k dispozici konkrétní kategorie sloupců . Abyste mohli kalendář uložit, musíte alespoň přiřadit jeden primární sloupec ke kategorii. Každá kategorie by měla mít primární sloupec a může mít nula nebo více přidružených sloupců. Vždy, když jsou všechny sloupce přidružené ke kategorii v kontextu, Power BI ví, jakou jednotku času představují. Navíc, Power BI u některých funkcí používá primární sloupec přiřazený příslušné kategorii v odkazovaném kalendáři k provedení požadovaného výpočtu. Pokud chcete přiřadit sloupec ke kategorii, vyberte kategorii z nabídky Přidat kategorii a pak vyberte primární a volitelné přidružené sloupce.
Dostupné kategorie sloupců
V následující tabulce jsou uvedeny kategorie, které jsou k dispozici. Tabulka také poskytuje ukázkové hodnoty a kardinality pro gregoriánské kalendáře.
Kategorie jsou rozdělené do dvou skupin:
- Dokončeno. Data ve sloupcích přiřazených k dokončeným kategoriím stačí k jednoznačné identifikaci časového období.
- Částečná. Data ve sloupcích přiřazených k částečným kategoriím nestačí k jednoznačné identifikaci časového období.
| Kategorie | Description | Typ | Příklad kardinality v gregoriánském kalendáři | Příklad hodnot sloupců v gregoriánském kalendáři |
|---|---|---|---|---|
| Rok | Rok | Complete |
Y = počet let |
2024, 2025 |
| Čtvrtletí | Čtvrtletí včetně roku | Complete | 4*Y |
1. čtvrtletí 2024, 2. čtvrtletí 2025 |
| Čtvrtletí roku | Čtvrtletí roku | Částečná | 4 |
Rok čtvrtletí 1, RČ1, Q1, čtvrtletí 2 |
| Měsíc | Měsíc včetně roku | Complete | 12*Y ≤ value ≤ 13*Y |
Leden 2023, 2024 Únor |
| Měsíc roku | Měsíc v roce | Částečná | 12 |
Leden, Měsíc roku 11, YM11, M11, 11 |
| Měsíc čtvrtletí | Měsíc čtvrtletí | Částečná | 3 |
1, QM2 |
| Týden | Týden včetně roku | Complete | 52 ≤ value ≤ 53 |
Týden 50 2023, W50-2023, 2023-W50 |
| Týden roku | Týden v roce | Částečná | 52 |
Týden 50, W50, 50 |
| Týden čtvrtletí | Týden čtvrtletí | Částečná | 13 |
10. týden čtvrtletí, QW10, 10 |
| Týden v měsíci | Týden v měsíci | Částečná | 5 |
Týden 2, MW2, 2 |
| Date | Datum | Complete | 365*Y ≤ value ≤ 366*Y |
12/31/2025 |
| Den roku | Den v roce | Částečná | 365 ≤ value ≤366 |
365, D1 |
| Den čtvrtletí | Den čtvrtletí | Částečná | 92 |
Desátý kvartální den, QD2, 50 |
| Den v měsíci | Den v měsíci | Částečná | 31 |
30. den měsíce, MD10, 30 |
| Den v týdnu | Den v týdnu | Částečná | 7 |
Den týdne 5, WD5, 5 |
Kromě těchto kategorií můžete k kategorii Související s časem přidružit libovolný počet sloupců v tabulce. V možnostech kalendáře to momentálně není možné, ale dá se to udělat jenom pomocí externích nástrojů nebo TMDL.
Poznámka:
Kontext všech sloupců přiřazených k kategorii související s časem se odebere při provádění výpočtů ve všech funkcích s výjimkou DATEADD a SAMEPERIODLASTYEAR. Všechny kontexty sloupců, které jsou součástí tabulky, na které je kalendář definovaný, ale nejsou v tomto kalendáři označené, se uchovávají.
Poznámka:
Doporučujeme přidružit pouze ty sloupce ve vašem kalendáři, které chcete používat pro časové inteligentní výpočty.
Primární versus přidružené sloupce
Pro každou kategorii se vyžaduje primární sloupec. Pokaždé, když je daný sloupec nebo jakýkoli přidružený sloupec přiřazený ke stejné kategorii v odkazovaném kalendáři v kontextu nebo je k provedení výpočtu potřeba kategorie, Power BI použije primární sloupec. Kromě toho se primární sloupce používají k řazení. Pokud hodnoty v primárním sloupci neumožňují řazení podle očekávání, můžete primární sloupec nakonfigurovat tak, aby se seřadil podle jiného sloupce , nebo použít jiný sloupec a nastavit původní sloupec jako přidružený sloupec. Například sloupec s textovými daty obsahujícími číslo měsíce a rok ve formátu mm-yyyy (to znamená 01-2024, 02-2024, a tak dále) se nebude správně řadit napříč více roky, ale sloupec, který používá yyyy-mm formát, bude:
Ke kategorii můžete přiřadit nula nebo více přidružených sloupců.
Validation
Je důležité ověřit a otestovat kalendář, abyste měli jistotu, že splňuje vaše potřeby. Mezi ověření nabízená v Power BI patří ověření v reálném čase i offline ověření.
Poznámka:
Kalendář můžete uložit i přes chyby ověření offline, ale doporučujeme je nejprve vyřešit. Aby bylo možné uložit, je nutné opravit chyby ověření v reálném čase.
Ověřování v reálném čase
Ověření v reálném čase prováděná v kalendářích jsou:
- Jedinečný název kalendáře Každý kalendář musí mít jedinečný název v sémantickém modelu.
- Jedno sdružení pro kalendář. Sloupec nemůže patřit do více než jedné kategorie ve stejném kalendáři.
- Jedinečnost období Přiřazené kategorie by měly jednoznačně identifikovat období.
- Konzistentní kategorizace. Tím zajistíte, že sloupce jsou přidružené ke stejné kategorii napříč kalendáři.
Jedinečnost období
Vždy by měla existovat cesta k jednoznačné identifikaci období pro přiřazené kategorie.
Pokaždé, když přidáte částečnou kategorii, Power BI ověří, že ve stejném kalendáři je také označená odpovídající kombinace úplných nebo částečných kategorií. Pokud tomu tak není, zobrazí se upozornění.
Například při nastavování kalendáře pro výpočty založené na týdnech nezapomeňte přiřadit alespoň primární sloupec k jedné z následujících sad kategorií:
- Týden
- Týden roku, Rok
- Týden čtvrtletí, Čtvrtletí
- Týden čtvrtletí, Čtvrtletí roku, Rok
- Týden měsíce, měsíc
- Týden měsíce, Měsíc roku, Rok
- Týden v měsíci, měsíc ve čtvrtletí, čtvrtletí
- Týden měsíce, Měsíc čtvrtletí, Čtvrtletí roku, Rok
Konzistentní kategorizace
Sloupce musí mít konzistentní kategorii napříč kalendáři. Stejný sloupec nemůžete přiřadit k různým kategoriím, jako je Year, Quarter of Year nebo time-related v samostatných kalendářích.
Offline ověření
Offline ověřování může být potenciálně časově náročné, protože přistupují k datům tabulky. Proto se nespustí automaticky na rozdíl od ověřování v reálném čase. Ověření spustíte tak, že vyberete Ověřit data:
Offline ověření zkontroluje následující pravidla a vrátí varování, pokud některá pravidla ve vašem kalendáři budou neplatná:
- Sloupec přidružený k kategorii nemá prázdné hodnoty.
- Kategorie vyšší úrovně a nižší úrovně mají poměr kardinality jedna ku mnoha. Například sloupce přidružené k kategorii Rok by měly mít kardinalitu 1:N se sloupci přidruženými k kategorii Měsíc.
- sloupce přidružené k kategoriím na stejné úrovni mají poměr kardinality 1:1. Například sloupce přidružené k kategorii Měsíc by měly mít kardinalitu 1:1 s kombinacemi sloupců přidružených k kategoriím Měsíc roku a Rok.
- primární a přidružené sloupce přiřazené stejné kategorii mají poměr kardinality 1:1. Například při přiřazení k kategorii Měsíc by primární sloupec Month a přidružený sloupec EnglishMonthName měly mít kardinalitu 1:1.
Práce s kalendáři
Jakmile je kalendář definovaný, můžete na něj odkazovat ve funkcích časové inteligence. Například následující měřítko vypočítá celkovou hodnotu od začátku měsíce pro celkové množství podle kalendáře ISO-454:
Total Quantity MTD ISO-454 = TOTALMTD ( [Total Quantity], 'ISO-454' )
Pokud kalendář není definovaný a vrátí se chyba:
I když je však kalendář definovaný, míra může přesto vrátit chybu. K tomu dochází v případě, že použitá funkce očekává, že bude v kalendáři k dispozici kategorie a kalendář tuto kategorii nemá. Očekává například, TOTALWTD že se v kalendáři budou vyskytovat určité kategorie. Pokud ne, vrátí se chyba:
Funkce časové inteligence a požadované kategorie
Mnoho funkcí časové inteligence vyžaduje, aby byl v kalendáři, na který odkazuje volání funkce, zahrnut dostatečný počet kategorií, aby Power BI mohl jednoznačně identifikovat konkrétní časovou jednotku. Jinými slovy, Power BI musí být schopný postupně se přesouvat z úrovně, na které se výpočet provádí, až na úroveň jednotlivých roků. Například při provádění výpočtu pro čtvrtletí můžete buď přiřadit TOTALQTD, nebo v kalendáři přiřadit jak čtvrtletí roku, tak rok, jak to vyžaduje ověření jedinečnosti období.
Poznámka:
Pro některé funkce je jejich název indikací toho, na jaké úrovni výpočet probíhá (například TOTALYTD), zatímco u jiných závisí na parametrech a kontextu (například DATEADD).
Vynulování kontextu
Funkce časové inteligence fungují tak, že začínají v určitém bodě v čase a provádějí s ním určitou operaci, aby získaly jiný bod v čase. Přirozeně se může počáteční časový bod dostat do konfliktu s tímto výsledkem, což způsobí průnik kontextu filtru, který v základním nastavení může přinést částečné nebo prázdné výsledky. Představte si například následující scénář.
Definice kalendáře
Máme jednoduchý gregoriánský kalendář, který označuje tři kategorie definované takto:
| Kategorie | Primární sloupec |
|---|---|
| Rok | Rok |
| Měsíc roku | MonthOfYear |
| Čtvrtletí | Čtvrtletí |
Definice měr
Jsou definovány dvě základní míry: jedna pro výpočet celkového prodeje a druhá pro výpočet celkového prodeje z předchozího čtvrtletí:
[TotalSales] = CALCULATE ( SUM( FactInternetSales[SalesAmount] ) )
[LastQuarterSales] = CALCULATE ( [TotalSales], DATEADD( GregorianCalendar, -1, QUARTER ) )
Příklad: Jak funguje vymazání kontextu
Vizuál tabulky prochází členitostí měsíce pomocí sloupců Year a MonthOfYear :
| Rok | MonthOfYear | CelkovéProdeje | Tržby za Poslední Čtvrtletí |
|---|---|---|---|
| 2011 | 1 | 10 | |
| 2011 | 2 | 20 | |
| 2011 | 3 | 30 | |
| 2011 | 4 | 40 | 10 |
| 2011 | 5 | 50 | 20 |
V této tabulce představuje tučný řádek sestavu na měsíční úrovni pro měsíc duben 2011. Proto budou všechny míry v tomto řádku vyhodnoceny v kontextu filtru [Year] == 2011 a [MonthOfYear] == 4.
Podle očekávání se totalSales vypočítá jako celkový prodej za duben 2011.
LastQuarterSales podobně vypočítá totalSales, ale vzhledem k dodatečnému filtru poskytovanému funkcí založenou na DATEADD kalendáři.
Pro tento řádek DATEADD by měl počáteční bod v čase duben 2011 a určil by bod v čase, který je přesně před jedním čtvrtletím: leden 2011. V důsledku toho můžete očekávat, že se tento totalSales vypočítá pod následujícími dvěma kontexty filtru:
- Poskytuje sloupce procházení aktuálního řádku:
{ [Year] == 2011, [MonthOfYear] == 4 }(Ekvivalentní, duben 2011) - Poskytuje filtr DATEADD :
{ [Year] == 2011, [MonthOfYear] == 1 }(ekvivalentní leden 2011)
Jasně, tyto dva kontexty filtru by byly v konfliktu – celkový prodej vzhledem k aktuálnímu měsíci nemůžeme vyhodnotit jako leden 2011 i duben 2011. Takový průnik by nepřinesl žádné výsledky.
To ale není to, co se děje. Místo toho na základě definice kalendáře funkce časového měřítka založeného na kalendáři určují, které sloupce kategorií můžou vést ke konfliktům po operaci času, kterou funkce provádí. V tomto případě DATEADD provede směnu na úrovni čtvrtletí . Funkce identifikuje, že kategorie Year a Month of Year se můžou v důsledku změny ve sloupcích kategorie Čtvrtletí změnit. Funkce tedy vymaže kontext filtru u všech (primárních i přidružených) sloupců, které jsou označené k těmto kategoriím.
Jinými slovy můžeme říci, že kategorie Year a Month of Year jsou závislosti kategorie Čtvrtletí . Naopak můžeme říci, že kategorie Čtvrtletí je závislá na kategoriích Rok a Měsíc roku .
Jak funguje vymazání kontextu
Tento diagram je k dispozici pro lepší vizualizaci závislostí mezi různými časovými kategoriemi. Každá kategorie v této mřížce představuje všechny sloupce (primární a přidružené) označené k této kategorii. Kategorie jsou propojeny s jejich závislostmi prostřednictvím šipek. Například "Měsíc" je závislý na "Rok", "Čtvrtletí roku", "Měsíc čtvrtletí", "Čtvrtletí" a "Měsíc roku".
Pokud je kontext nastavený u sloupce nebo u jeho přidruženého řazení podle sloupce, který je označený v kalendáři, předchozí kontext filtru se vymaže při:
- Všechny závislosti kategorií X. To si můžete představit jako všechny kategorie nad X.
- Všechny závislé kategorie x i jejích závislostí (tj. od 1. výše). To si můžete představit jako všechny kategorie pod X a všechny kategorie v 1 výše.
Poznámka:
Vymazání kontextu probíhá u sloupců označených v kalendáři nebo přidružených sloupcích řazení podle bez ohledu na to, jestli je kontext nastavený pomocí funkcí časového měřítka nebo jinak.
Sloupce související s časem
Většina funkcí pro práci s časem, s výjimkou DATEADD a SAMEPERIODLASTYEAR, vymaže kontext všech sloupců souvisejících s časem a přidružených sloupců řazení.
Chování mezi kalendáři
Pokud je ve stejné tabulce definováno více kalendářů, jsou tyto procesy dokončeny pro každý kalendář definovaný v tabulce. To zahrnuje poznámku týkající se vymazání kontextu sloupců souvisejících s časem. Jinými slovy, předpokládejme, že tabulka definuje tři kalendáře: Kalendář1, Kalendář2 a Kalendář3. Pokud je kontext filtru nastavený na kategorii X v kalendáři 1, výše uvedené procesy se provádějí ve všech třech kalendářích.
Příklad: Filtr nastavený na čtvrtletí
Pokud by byl kontext filtru nastaven na kategorii Čtvrtletí, proces by byl následující.
Za prvé budou zváženy všechny závislosti kategorie "Čtvrtletí".
Dále by se zvažovaly všechny závislosti "Quarter" a jeho závislých.
Konečný výsledek by nakonec byl následující. Všechny červené kategorie budou mít předchozí kontext filtru odstraněn a nový kontext bude nastaven na čtvrtletí.
Skript TMDL pro kalendáře
createOrReplace
table Date
lineageTag: xyz
column Date
dataType: dateTime
formatString: Long Date
lineageTag: abc
summarizeBy: none
sourceColumn: Date
column Year
dataType: string
lineageTag: abc
summarizeBy: none
sourceColumn: Year
annotation SummarizationSetBy = Automatic
column Month
dataType: string
lineageTag: def
summarizeBy: none
sourceColumn: Month
annotation SummarizationSetBy = Automatic
column MonthName
dataType: string
lineageTag: ghi
summarizeBy: none
sourceColumn: MonthName
sortByColumn: SortByMonth
changedProperty = SortByColumn
annotation SummarizationSetBy = Automatic
column DutchMonthName
dataType: string
lineageTag: jkl
summarizeBy: none
sourceColumn: DutchMonthName
annotation SummarizationSetBy = Automatic
column 'Holiday Name'
dataType: string
lineageTag: mno
summarizeBy: none
sourceColumn: Holiday Name
annotation SummarizationSetBy = Automatic
column IsWorkingDay
dataType: string
lineageTag: pqr
summarizeBy: none
sourceColumn: IsWorkingDay
annotation SummarizationSetBy = Automatic
...
calendar 'Demo Calendar'
lineageTag: def
calendarColumnGroup = year
primaryColumn: Year
calendarColumnGroup = month
primaryColumn: Month
associatedColumn: DutchMonthName
associatedColumn: MonthName
calendarColumnGroup
column: 'Holiday Name'
column: isWorkingDay
Poznámka:
Všimněte si, že pokud pro TMDL nezadáte žádnou kategorii calendarColumnGroup , budou sloupce označené jako související s časem. V tomto příkladu jsou sloupce související s časem v ukázkovém kalendářiNázev svátku a isWorkingDay.
Seskupte vše dohromady: Příklady posunu času
Některé funkce časové inteligence posunují kontext pouze laterálně, zvažují všechny sloupce, zatímco jiné provádějí hierarchické posuny – zachovávají nebo vymazávají kontext podle toho, zda jsou sloupce označené v kalendáři. Funkce časové inteligence je možné rozdělit do dvou skupin na základě toho, jestli umožňují hierarchické posuny.
- Opraveno. Funkce v této skupině jsou DATEADD a SAMEPERIODLASTYEAR. Tyto funkce umožňují pouze laterální časové posuny a nevrací hodnoty z jiné úrovně podrobností.
- Flexibilní. Tato skupina obsahuje všechny ostatní funkce časové inteligence. Tyto funkce umožňují hierarchické časové posuny a v závislosti na nastavení kalendáře můžou vracet výsledky z jiné úrovně podrobností.
Abychom ukázali toto chování, projdeme si příklad pomocí jednoduchého datového modelu, který se skládá ze dvou tabulek, dvou kalendářů a pěti měr.
Tabulky a vztahy
V tomto příkladu máme následující jednoduchý datový model:
| Table | Columns |
|---|---|
| Date | Rok, IsWorkingDay, Datum |
| Sales | KlíčObjednávky, Množství, DatumObjednávky |
Tady je několik příkladů řádků v tabulce Kalendářní datum :
Tady je několik ukázkových řádků v tabulce Sales (Prodej ):
Tabulky Sales a Date jsou propojené přes OrderDate a Date.
Kalendáře
V tabulce Date jsme definovali kalendáře s těmito mapováními:
| NázevKalendáře | Kategorie | Primární sloupec |
|---|---|---|
| Gregoriánský | Rok | Rok |
| Date | Date | |
| Gregoriánský kalendář s pracovním dnem | Rok | Rok |
| Date | Date | |
| Související s časem | JePracovníDen |
Ekvivalentní definice TMDL těchto dvou kalendářů je:
ref table Date
calendar 'Gregorian'
lineageTag: xyz
calendarColumnGroup = year
primaryColumn: Year
calendarColumnGroup = date
primaryColumn: Date
calendar 'GregorianWithWorkingDay'
lineageTag: dc4fc383-1661-4112-8afb-930d324fbb6e
calendarColumnGroup = year
primaryColumn: Year
calendarColumnGroup = date
primaryColumn: Date
calendarColumnGroup
column: IsWorkingDay
Opatření
V tabulce Sales definujeme následující míry:
Total Quantity = SUM ( 'Sales'[Order Quantity] )
OneYearAgoQuantity =
CALCULATE ( [Total Quantity], DATEADD ( 'Gregorian', -1, YEAR ) )
OneYearAgoQuantityTimeRelated =
CALCULATE ( [Total Quantity], DATEADD ( 'GregorianWithWorkingDay', -1, YEAR ) )
FullLastYearQuantity =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'Gregorian', -1, YEAR ) )
FullLastYearQuantityTimeRelated =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR )
)
Příklad laterálního posunu
Pojďme vytvořit vizuál, který zobrazuje Rok, Měsíc v roce, Je pracovní den, Celkové množství, Množství před rokem a Časově související množství před rokem pro roky 2024 a 2025.
Všechny hodnoty pro OneYearAgoQuantity a OneYearAgoQuantityTimeRelated pro rok 2025 odpovídají celkovému množství z přesně jednoho roku před (2024) pro stejnou hodnotu IsWorkingDay .
To ukazuje, že DATEADD udržuje kontext v libovolném sloupci tabulky Datum, který obsahuje použitý kalendář, bez ohledu na to, zda není označen, nebo je v tomto kalendáři označen jako související s časem. Vzhledem k tomu, že v měřicích definicích jsme uvedli DATEADD k posunu zpět o jeden rok, jediný sloupec, jehož kontext byl posunut zpět, byl sloupec přidružený k kategorii Rok. Jestli byl sloupec IsWorkingDay v kalendáři označený jako související s časem nebo vůbec nebyl označen, nezměnil výsledek. Jedinou další funkcí, která toto chování vykazuje, je SAMEPERIODLASTYEAR.
Příklad hierarchického posunu
Nyní se podíváme na příklad, ve kterém skutečnost, zda je sloupec označen jako související s časem, skutečně změní výsledek.
V tomto případě znovu vytvoříme stejný vizuál jako v předchozím příkladu, ale tentokrát použijeme míry FullLastYearQuantity a FullLastYearQuantityTimeRelated:
To ukazuje, že zachovává kontext pro sloupce, které PARALLELPERIOD nejsou označené v kalendáři, ale vymaže kontext pro ty, které jsou označené jako související s časem. FullLastYearQuantity použil gregoriánský kalendář, ve kterém IsWorkingDay nebyl označen v kalendáři, zatímco FullLastYearQuantityTimeRelated použil kalendář GregoriánskýWithWorkingDay, kde byl IsWorkingDay označen jako související s časem. Všechny funkce časové inteligence s výjimkou DATEADD a SAMEPERIODLASTYEAR se chovají tímto způsobem.
Pokud byste opravdu chtěli přimět tyto funkce, aby zachovaly kontext i pro sloupce související s časem, můžete použít VALUES:
FullLastYearQuantityTimeRelatedOverride =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR ), VALUES('Date'[IsWorkingDay]) )
V tomto případě FullLastYearQuantityTimeRelatedOverride vrátí stejné výsledky jako FullLastYearQuantity.
Conclusion
Složitý příklad výše ukazuje, že různé funkce časové inteligence se chovají odlišně v závislosti na tom, zda jsou sloupce v kalendáři označené jako časové. DATEADD a SAMEPERIODLASTYEAR provádějí pouze laterální časové posuny. Všechny ostatní funkce časové inteligence umožňují hierarchické časové posuny.
Použití DATEADD a DATESINPERIOD s kalendáři
Funkce DATEADDDATESINPERIOD má specifické parametry, které umožňují detailní kontrolu nad tím, jak se posuny provádějí, když je výběr na podrobnější úrovni než úroveň posunu určená parametrem interval . K tomu dochází například v případě, že zobrazujete data na úrovni data, ale nastavíte interval parametr na tyto funkce na MĚSÍC. Například v gregoriánském kalendáři při posunu období od 3. do 10. března o měsíc výsledkem bude období od 3. do 10. dubna. Vzhledem k tomu, že měsíce v gregoriánských kalendářích se liší délkou, může to vést k nejednoznačnostem při posunu. Níže jsou uvedeny příklady scénářů založených na gregoriánském kalendáři:
Přechod z kratšího na delší období
Například posun o jeden měsíc dopředu s výběrem v únoru, takže cílový měsíc je březen.
Parametr extension můžete použít na DATEADD k ovlivnění způsobu provedení posunu:
| Hodnota parametru rozšíření | Description | Result |
|---|---|---|
precise |
Tím se přísně zachová původní rozsah dat. | 25.–28. února se přesouvá na 25.–28. března. |
extended |
Umožňuje rozšíření okna do konce měsíce. | Únor 25-28 se přesouvá na březen 25-31. |
endaligned |
Sladí koncové datum s koncem cílového měsíce, když výběr dosáhne konce měsíce; jinak zachovává relativní pozice. | 28. února se posune na 31. března, zatímco 27. února se posune na 27. března. |
Poznámka:
DATESINPERIOD poskytuje parametr endbehavior, který nabízí možnosti precise a endaligned.
Přechod z delšího na kratší období
Například posun o měsíc zpět s výběrem v březnu, takže cílový měsíc je únor.
Parametr truncation můžete použít na DATEADD k ovlivnění způsobu provedení posunu:
| Hodnota parametru ořezání | Description | Result |
|---|---|---|
anchored |
Ukotvení výsledku k poslednímu platnému datu menšího měsíce. | 31. března se posune na 28. února (nebo 29 v přestupném roce). |
blank |
Pokud posunuté datum neexistuje, vraťte prázdnou hodnotu. | Posun 31. března zpět o měsíc vrátí prázdnou hodnotu (od 31. února neexistuje). |
Poznámka:
Tento parametr není k dispozici pro DATEINPERIOD.
Důležité úvahy o práci s kalendářově založenou časovou inteligencí
- Provádění výpočtu časového měřítka v tabulce faktů, která definuje kalendář a podléhá pravidlům zabezpečení na úrovni řádků (RLS) a může vést k neočekávaným výsledkům.
- Výkon této funkce Preview není reprezentativní pro koncový produkt.
- Kalendáře ve službě Power BI zatím nemůžete vytvářet.
- Neměli byste používat tabulky automatického data a času u vlastních kalendářů.
- Kalendáře nemůžete používat s živými připojenými nebo složenými modely.
- Doporučujeme přidružit pouze ty sloupce ve vašem kalendáři, které chcete používat pro časové inteligentní výpočty.
- Kalendáře podléhají ověřování v reálném čase i offline . Kalendář můžete uložit i přes chyby ověření offline, ale doporučujeme je nejprve vyřešit. Aby bylo možné uložit, je nutné opravit chyby ověření v reálném čase.
- Každý kalendář musí mít jedinečný název v rámci datového modelu.
- Jedna tabulka může obsahovat více kalendářů.
- Tabulka, která obsahuje kalendář, musí mít méně než 200 sloupců. Pokud tabulka obsahuje více než 20 000 řádků, ověření nebudou k dispozici, ale stále můžete přidat kalendář.
- Kalendář musí alespoň přiřadit jeden primární sloupec ke kategorii.
- Kalendář může přiřadit pouze sloupce z vlastní tabulky do kategorií.
- Každá kategorie by měla mít primární sloupec a může mít přiřazené nula nebo více přidružených sloupců.
- DATEADD má nové parametry pro řízení rozšíření a jeho chování, které nejsou rozpoznány v IntelliSense.
- Libovolný daný sloupec lze mapovat pouze na jednu kategorii.
- Funkce časové inteligence, které používají kalendáře, nemůžete vnořit. Například následující příkaz DAX není podporován:
ThisIsNotSupported = PREVIOUSDAY ( PREVIOUSMONTH( 'Calendar' ) )
Místo toho můžete:
ThisWorks = CALCULATETABLE ( PREVIOUSDAY ( 'Calendar' ), PREVIOUSMONTH( 'Calendar' ) )
Vytvoření tabulky kalendářních dat pomocí předdefinovaných nástrojů
Následující příklady vytvoří tabulku kalendářních dat od 1. ledna 2010 do 31. prosince 2030 pomocí Power Query M nebo DAX. Obsahuje následující sloupce: Rok, Číslo měsíce, Název měsíce, Rok měsíce, Čtvrtletí, Čtvrtina roku, Den a Datum.
Power Query M
let
StartDate = #date(2010, 1, 1),
EndDate = #date(2030, 12, 31),
NumberOfDays = Duration.Days(EndDate - StartDate) + 1,
DateList = List.Dates(StartDate, NumberOfDays, #duration(1,0,0,0)),
DateTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"Date"}),
AddYear = Table.AddColumn(DateTable, "Year", each Date.Year([Date]), Int64.Type),
AddMonthNumber = Table.AddColumn(AddYear, "Month Number", each Date.Month([Date]), Int64.Type),
AddMonthName = Table.AddColumn(AddMonthNumber, "Month Name", each Date.ToText([Date], "MMMM"), type text),
AddMonthYear = Table.AddColumn(AddMonthName, "Month Year", each Date.ToText([Date], "MMM yyyy"), type text),
AddQuarter = Table.AddColumn(AddMonthYear, "Quarter", each "Q" & Text.From(Date.QuarterOfYear([Date])), type text),
AddYearQuarter = Table.AddColumn(AddQuarter, "Year Quarter", each Text.From(Date.Year([Date])) & " Q" & Text.From(Date.QuarterOfYear([Date])), type text),
AddDay = Table.AddColumn(AddYearQuarter, "Day", each Date.Day([Date]), Int64.Type)
in
AddDay
DAX
DateTable =
ADDCOLUMNS (
CALENDAR ( DATE ( 2010, 1, 1 ), DATE ( 2030, 12, 31 ) ),
"Year", YEAR ( [Date] ),
"Month Number", MONTH ( [Date] ),
"Month Name", FORMAT ( [Date], "MMMM" ),
"Month Year", FORMAT ( [Date], "MMM YYYY" ),
"Quarter", "Q" & FORMAT ( [Date], "Q" ),
"Year Quarter",
FORMAT ( [Date], "YYYY" ) & " Q"
& FORMAT ( [Date], "Q" ),
"Day", DAY ( [Date] ),
"Date", [Date]
)
Další informace a další možnosti naleznete v tabulkách kalendářních dat.
Související obsah
Další informace související s tímto článkem najdete v následujících zdrojích informací: