Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Power BI ponúka viacero nástrojov na vykonávanie výpočtov na základe času, ktoré sa spoliehajú buď na automatické tabuľky dátumov, alebo tabuľky dátumov, ktoré pridáte.
Odporúčame používať časovú inteligenciu založenú na kalendári (Preview), pretože poskytuje najlepší výkon a najvyšší rozsah flexibility na splnenie akéhokoľvek kalendára.
Táto tabuľka porovnáva tri poskytnuté nástroje:
| Nástroj | Vyžaduje sa úsilie o nastavenie | Jednoduchosť riadenia | Flexibilita | Poznámky |
|---|---|---|---|---|
| Automatický dátum/čas | prakticky nula | tvrdý | nízky | Zväčšuje veľkosť modelu vďaka vytvoreniu viacerých skrytých tabuliek dátumov |
| Klasická časová inteligencia | médium | ľahký | nízky | Vyžaduje vytvorenie tabuľky dátumov, predpokladá gregoriánsky alebo posunutý gregoriánsky kalendár, trpí problémami s výkonom v niektorých špecifických scenároch |
| Časová inteligencia založená na kalendári | vysoký | médium | vysoký | Odporúča sa vytvoriť tabuľku dátumov, najvyššiu flexibilitu, najlepší výkon, ale zvýšené náklady na nastavenie |
Poznámka
Neodporúčame používať alternatívne techniky časovej inteligencie, najmä tie, ktoré zahŕňajú pridanie ďalších stĺpcov do tabuliek dátumov na výpočet posunov s výnimkou špecifických prípadov použitia. Aj keď tieto prístupy môžu osloviť začiatočníkov kvôli ich jednoduchým vzorcom DAX, majú tendenciu zbytočne nafukovať sémantické modely. Toto nafúknutie môže viesť k pomalšiemu obnoveniu údajov a zníženiu výkonu zostavy s rastom množín údajov.
Automatický dátum/čas
Funkcia automatického dátumu a času automaticky vytvára skryté tabuľky dátumov pre každé pole dátumu v dátovom modeli. Ďalšie informácie o tomto automatickom správaní nájdete v téme Použitie automatického dátumu a času v aplikácii Power BI Desktop.
Poznámka
Aj keď je automatický dátum a čas pohodlnou možnosťou pre jednoduché modely, neodporúča sa pre zložitejšie scenáre a väčšie modely. Pre tieto modely je vhodnejšie vytvoriť špeciálny stôl pre väčšiu flexibilitu.
Pridanie tabuľky dátumov
V prípade väčšiny modelov sa odporúča pridať tabuľku dátumov (alebo v niektorých scenároch viac). Mnohí dátoví analytici uprednostňujú vytváranie vlastných tabuliek dátumov, čo je v poriadku.
Existuje niekoľko spôsobov, ako vytvoriť takúto tabuľku, vrátane:
- Power Query M. Môžete použiť funkciu List.Dates . Príklad je uvedený ďalej v tomto dokumente.
- DAX. Na vygenerovanie základnej vypočítanej tabuľky dátumov môžete použiť funkcie CALENDAR alebo CALENDARAUTO . Na vytvorenie tabuľky dátumov môžete použiť aj pokročilejší príkaz DAX. Príklad je uvedený ďalej v tomto dokumente.
- Externé nástroje.
- Načítanie zo zdroja, ako je napríklad zdrojový systém, súbor alebo iný sémantický model služby Power BI.
Ktorá možnosť je pre vás najlepšia, závisí od rôznych faktorov a presahuje rámec tohto návodu.
Práca s výpočtami na základe času
Za predpokladu, že nepoužívate automatický dátum a čas, existujú dva alternatívne spôsoby práce s funkciami časovej inteligencie v službe Power BI na vykonávanie výpočtov na základe času:
- Klasická časová inteligencia. Najjednoduchšia možnosť a funguje skvele pre gregoriánske alebo posunuté gregoriánske kalendáre, ale má obmedzenú flexibilitu pre kalendáre, ktoré majú odlišnú štruktúru alebo pre týždenné výpočty.
- Časová inteligencia založená na kalendári (ukážka). Novšia možnosť, ale nastavenie vyžaduje trochu viac práce. Poskytuje vám však aj lepší výkon, väčšiu flexibilitu pri práci s negregoriánskymi kalendármi a možnosť vykonávať týždenné výpočty.
Poznámka
Tabuľku musíte nastaviť ako tabuľku dátumov pre konkrétne scenáre.
Klasická časová inteligencia
Táto možnosť vyžaduje, aby ste v modeli mali tabuľku dátumov a podľa toho ju nastavili. Potom môžete použiť funkcie časovej inteligencie a pozrieť sa na svoju tabuľku dátumov. Ak máte napríklad v modeli tabuľku dátumov s názvom Dátum, ktorú ste nastavili ako tabuľku dátumov, ktorá obsahuje stĺpec Dátum, môžete použiť:
SAMEPERIODLASTYEAR ( 'Date'[Date] )
Aj keď ide o rýchly a jednoduchý prístup, v porovnaní s prístupom založeným na kalendári má mnoho nevýhod:
- vyžaduje nastavenie tabuľky dátumov
- Funguje len s modelmi, ktoré majú aspoň jednu vyhradenú tabuľku dátumov
- V použitých stĺpcoch dátumov by nemali chýbať žiadne dátumy medzi prvým a posledným dátumom. Ak medzi prvým a posledným dátumom chýbajú nejaké dátumy, zobrazí sa chyba.
- je menej flexibilný, pretože je optimalizovaný pre gregoriánske alebo posunuté gregoriánske kalendáre, ako sú fiškálne roky, ktoré začínajú 1. júla, ale stále sa riadia gregoriánskym kalendárom
- Neposkytuje týždenné výpočty
- V konkrétnych scenároch výpočty založené na čase nefungujú dobre.
Poznámka
Odporúčame vám použiť rozšírený prístup založený na kalendári .
Časová inteligencia založená na kalendári (ukážka)
Kalendáre sú definície metaúdajov pridané do tabuľky, ktoré označujú, ktoré stĺpce z tejto tabuľky predstavujú aké atribúty času. Môžete definovať jeden alebo viac kalendárov v ľubovoľnej tabuľke v modeli. Po definovaní kalendára v modeli sa naň môžete odvolávať vo funkciách časovej inteligencie. Tu je napríklad postup, ako vypočítať celkový rok od dátumu predaja pomocou definovaného fiškálneho kalendára:
TOTALYTD ( [Sales], 'Fiscal Calendar' )
Výhody časovej inteligencie založenej na kalendári
Hlavné výhody časovej inteligencie založenej na kalendári sú:
Funguje s akýmkoľvek kalendárom
Kalendáre vám poskytujú úplnú flexibilitu pri rozhodovaní o tom, ako rozdeliť čas na roky, štvrťroky, mesiace a týždne. Môžete napríklad definovať kalendáre, ktoré sa riadia týmito vzormi:
- Gregoriánsky
- Posunutá gregoriánska
- Maloobchod (445, 454, 544 vzorov)
- 13-mesačný
- Lunárny
Možnosti sú nekonečné, pretože zo služby Power BI neexistuje žiadny vstavaný predpoklad o štruktúre kalendára. Časová inteligencia založená na kalendári nevytvára žiadne predpoklady o základných dátumoch. Všetky výpočty používajú základné údaje presne as-is.
Riedke dátumy
Klasická časová inteligencia vyžaduje, aby bol poskytnutý stĺpec dátumu úplný – ak medzi prvým a posledným dátumom chýbajú nejaké dátumy, zobrazí sa chyba. Funkcie časovej inteligencie založené na kalendári takúto požiadavku nemajú. Namiesto toho fungujú v termínoch as-is. Aj keď stále odporúčame mať kompletnú a vyhradenú tabuľku kalendára, už ju nemusíte mať. Ak sú napríklad všetky vaše maloobchodné predajne cez víkend zatvorené, môžete víkendové dni preskočiť, pretože nemajú žiadne výpredaje. Za predpokladu, že váš víkend je sobota a nedeľa, môžete teraz použiť PREVIOUSDAY kalendár založený na tabuľke, ktorá nemá záznamy na víkend, aby ste preskočili z pondelka priamo na piatok.
Týždenné výpočty
Časová inteligencia založená na kalendári priamo poskytuje funkcie jazyka DAX, ktoré fungujú s týždennou granularitou. Napríklad súčty od začiatku týždňa možno vypočítať priamo pomocou TOTALWTD:
TOTALWTD ( Expr, CalendarName )
Vylepšenia výkonu
Niektoré scenáre môžu vykazovať lepší výkon pri porovnaní funkcie časovej inteligencie založenej na kalendári s jej klasickým náprotivkom. Napríklad vizuál, ktorý je zoskupený podľa týždňa a vykonáva výpočet TOTALYTD ( ..., CalendarName ) od začiatku roka, by sa mal vo všeobecnosti vykonávať rýchlejšie, ako keby sa použil jeho klasický náprotivok TOTALYTD ( ..., TableName[DateColumnName] ), . Informácie o tom, prečo sa to môže stať, nájdete v časti Vymazanie kontextu .
Povolenie vylepšenej ukážky DAX Time Intelligence
Ak chcete začať, musíte najprv povoliť funkciu ukážky rozšírenej časovej inteligencie DAX .
- V aplikácii Power BI Desktop prejdite na položku Možnosti súboru > a nastavenia > Možnosti > funkcie ukážky.
- Vyberte ukážku rozšírenej časovej inteligencie DAX .
- Vyberte položku OK
- Reštartovanie aplikácie Power BI Desktop
Správa kalendárov
Ak chcete spravovať kalendár, kliknite pravým tlačidlom myši na tabuľku, ktorá obsahuje kalendár alebo v ktorej chcete kalendár definovať, a po výbere tabuľky vyberte položku Možnosti kalendára alebo vyberte položku Možnosti kalendára na páse s nástrojmi Nástroje tabuliek:
Prípadne môžete na definovanie kalendára použiť externé nástroje alebo zobrazenie TMDL . Ďalšie informácie nájdete v skripte TMDL.
Kalendáre sa zobrazujú aj v prieskumníkovi modelov v tabuľke, v ktorej sú definované:
Obrazovka možností kalendára
Obrazovka možností kalendára zobrazuje kalendáre definované vo vybratej tabuľke. Tu môžete:
- vytvorte nový kalendár výberom položky Nový kalendár
- upravte existujúci kalendár výberom položky Upraviť
- odstránenie existujúceho kalendára výberom položky Odstrániť
- nastavte tabuľku ako tabuľku dátumov výberom položky Označiť ako tabuľku dátumov
Priradenie kategórií stĺpcov
Definovanie kalendára zahŕňa jeho pomenovanie a priradenie stĺpcov ku kategóriám. Každá kategória predstavuje jednotku času a k dispozícii sú špecifické kategórie stĺpcov . Ak chcete kalendár uložiť, musíte ku kategórii priradiť aspoň jeden primárny stĺpec. Každá kategória by mala mať primárny stĺpec a môže mať nula alebo viac priradených stĺpcov. Vždy, keď sú stĺpce priradené ku kategórii v kontexte, Power BI vie, akú jednotku času prezentujú. Okrem toho v prípade niektorých funkcií, ako je TOTALMTD napríklad Power BI, používa na vykonanie požadovaného výpočtu primárny stĺpec priradený k príslušnej kategórii v odkazovanom kalendári. Ak chcete priradiť stĺpec ku kategórii, vyberte kategóriu z ponuky Pridať kategóriu a potom vyberte primárny a voliteľný priradený stĺpec.
Dostupné kategórie stĺpcov
V nasledujúcej tabuľke sú uvedené kategórie, ktoré sú k dispozícii. V tabuľke sú uvedené aj príklady hodnôt a kardinalín pre gregoriánske kalendáre.
Kategórie sú rozdelené do dvoch skupín:
- Kompletné. Údaje v stĺpcoch priradených ku kategóriám Dokončiť stačia na jednoznačnú identifikáciu časového obdobia.
- Čiastočné. Údaje v stĺpcoch priradených k čiastočným kategóriám nestačia na jednoznačnú identifikáciu časového obdobia.
| Kategória | Description | Typ | Príklad kardinality v gregoriánskom kalendári | Príklady hodnôt stĺpcov v gregoriánskom kalendári |
|---|---|---|---|---|
| Year | Rok | Complete |
Y = počet rokov |
2024, 2025 |
| Štvrťrok | Štvrťrok vrátane roka | Complete | 4*Y |
1. štvrťrok 2024, 2. štvrťrok 2025 |
| Štvrťrok | Štvrťrok roka | Partial | 4 |
Rok 1. štvrťrok, 1. štvrťrok, 1. štvrťrok, 2. štvrťrok |
| Month | Mesiac vrátane roka | Complete | 12*Y ≤ value ≤ 13*Y |
Januára 2023, 2024 februára |
| Mesiac v roku | Mesiac v roku | Partial | 12 |
Január, Rok Mesiac 11, YM11, M11, 11 |
| Mesiac štvrťroka | Mesiac štvrťroka | Partial | 3 |
1, QM2 |
| Week | Týždeň vrátane roka | Complete | 52 ≤ value ≤ 53 |
Týždeň 50 2023, W50-2023, 2023-W50 |
| Týždeň v roku | Týždeň v roku | Partial | 52 |
Týždeň 50, W50, 50 |
| Týždeň štvrťroka | Týždeň štvrťroka | Partial | 13 |
10. štvrťrok, 10. štvrťrok |
| Týždeň v mesiaci | Týždeň v mesiaci | Partial | 5 |
Mesiac Týždeň 2, MW2, 2 |
| Date (Dátum) | Dátum | Complete | 365*Y ≤ value ≤ 366*Y |
12/31/2025 |
| Deň v roku | Deň v roku | Partial | 365 ≤ value ≤366 |
365, D1 |
| Deň štvrťroka | Deň štvrťroka | Partial | 92 |
Štvrťrok 10, QD2, 50 |
| Deň v mesiaci | Deň v mesiaci | Partial | 31 |
Mesiac Deň 30, MD10, 30 |
| Deň v týždni | Deň v týždni | Partial | 7 |
Týždeň Deň 5, WD5, 5 |
Okrem týchto kategórií môžete priradiť ľubovoľný počet stĺpcov v tabuľke ku kategórii Súvisiace s časom . V súčasnosti to nie je možné v možnostiach kalendára, ale namiesto toho je možné to urobiť iba pomocou externých nástrojov alebo TMDL.
Poznámka
Kontext vo všetkých stĺpcoch, ktoré sú priradené ku kategórii súvisiacej s časom , sa odstráni pri vykonávaní výpočtov vo všetkých funkciách okrem DATEADD a SAMEPERIODLASTYEAR. Zachová sa všetok kontext v stĺpcoch, ktoré sú súčasťou tabuľky, v ktorej je kalendár definovaný, ale nie sú v ňom označené.
Poznámka
Odporúčame priradiť iba stĺpce v kalendári, ktoré chcete použiť pri výpočtoch časovej inteligencie.
Primárne verzus pridružené stĺpce
Primárny stĺpec je povinný pre každú kategóriu. Vždy, keď sú tento stĺpec alebo akékoľvek priradené stĺpce priradené k rovnakej kategórii v odkazovanom kalendári v kontexte alebo sa kategória vyžaduje na vykonanie výpočtu, Power BI použije primárny stĺpec. Okrem toho sa na triedenie používajú primárne stĺpce. Ak hodnoty v primárnom stĺpci neumožňujú jeho zoradenie podľa očakávania, môžete buď nakonfigurovať primárny stĺpec tak, aby bol zoradený podľa iného stĺpca , alebo použiť iný stĺpec a pôvodný stĺpec nastaviť ako priradený stĺpec. Napríklad stĺpec s textovými údajmi obsahujúcimi číslo mesiaca a rok vo formáte mm-yyyy (t. j. 01-2024, 02-2024atď.) nebude správne zoradený vo viacerých rokoch, ale stĺpec, ktorý používa tento formát, yyyy-mm bude:
Ku kategórii môžete mať priradené nula alebo viac priradených stĺpcov.
Validation
Je dôležité overiť a otestovať kalendár, aby ste si boli istí, že vyhovuje vašim potrebám. Overenia ponúkané v službe Power BI zahŕňajú overenia v reálnom čase aj overenia offline.
Poznámka
Kalendár môžete uložiť aj napriek chybám overenia v režime offline, ale odporúča sa ich najskôr vyriešiť. Na uloženie je potrebné opraviť zlyhania overovania v reálnom čase.
Overenia v reálnom čase
Overenia kalendárov v reálnom čase sú:
- Jedinečný názov kalendára. Každý kalendár musí mať v sémantickom modeli jedinečný názov.
- Jedno priradenie na kalendár. Stĺpec nesmie patriť do viac ako jednej kategórie v rovnakom kalendári.
- Jedinečnosť obdobia. Priradené kategórie by mali jednoznačne identifikovať obdobie.
- Konzistentná kategorizácia. Tým sa zabezpečí, že stĺpce budú priradené k rovnakej kategórii vo všetkých kalendároch.
Jedinečnosť obdobia
Vždy by mala existovať cesta na jednoznačnú identifikáciu obdobia pre priradené kategórie.
Vždy, keď pridáte čiastočnú kategóriu, Power BI overí, či je v rovnakom kalendári označená aj zodpovedajúca kombinácia úplných alebo čiastočných kategórií. Ak to tak nie je, zobrazí sa varovanie.
Napríklad pri nastavovaní kalendára pre týždenné výpočty nezabudnite priradiť aspoň primárny stĺpec k jednej z nasledujúcich skupín kategórií:
- Week
- Týždeň v roku, rok
- Týždeň štvrťrok, štvrťrok
- Týždeň štvrťroka, štvrťroka, roka
- Týždeň v mesiaci, mesiac
- Týždeň v mesiaci, mesiac v roku, rok
- Týždeň v mesiaci, mesiac štvrťrok, štvrťrok
- Týždeň v mesiaci, Mesiac v štvrťroku, Štvrťrok, Rok
Konzistentná kategorizácia
Stĺpce musia mať konzistentnú kategóriu v kalendároch. Rovnaký stĺpec nemôžete priradiť k rôznym kategóriám, ako napríklad Rok, Štvrťrok alebo súvisiace s časom v samostatných kalendároch.
Offline overenia
Overenia offline môžu byť potenciálne časovo náročné pri prístupe k údajom tabuľky. Preto sa nespúšťajú automaticky na rozdiel od overovania v reálnom čase. Ak chcete spustiť overenia, vyberte položku Overiť údaje:
Offline overenia kontrolujú nasledujúce pravidlá a vrátia upozornenie, ak sú niektoré pravidlá v kalendári zneplatnené:
- Stĺpec priradený ku kategórii nemá prázdne hodnoty.
- Kategórie vyššej a nižšej úrovne majú pomer kardinality jedna ku mnohým. Napríklad stĺpce priradené ku kategórii Rok by mali mať kardinalitu jedna ku mnohým so stĺpcami priradenými ku kategórii Mesiac.
- Stĺpce priradené ku kategóriám na rovnakej úrovni majú pomer kardinality jedna ku jednej. Napríklad stĺpce priradené ku kategórii Mesiac by mali mať kardinalitu jedna ku jednej s kombináciami stĺpcov priradených ku kategóriám Mesiac v roku a Rok.
- Primárne a súvisiace stĺpce priradené k rovnakej kategórii majú pomer kardinality jedna ku jednej. Napríklad pri priradení do kategórie Mesiac by primárny stĺpec Month a priradený stĺpec EnglishMonthName mali mať kardinalitu jedna ku jednej.
Práca s kalendármi
Po definovaní kalendára sa naň môžete odvolávať vo funkciách časovej inteligencie. Nasledujúca mierka napríklad vypočíta celkovú hodnotu od mesiaca k dátumu Celkové množstvo podľa kalendára ISO-454 :
Total Quantity MTD ISO-454 = TOTALMTD ( [Total Quantity], 'ISO-454' )
Ak kalendár nie je definovaný a zobrazí sa chyba:
Aj keď je však kalendár definovaný, mierka môže stále vrátiť chybu. Stáva sa to, ak použitá funkcia očakáva, že kategória bude prítomná v kalendári a kalendár túto kategóriu nemá. Očakáva napríklad, TOTALWTD že v kalendári budú prítomné konkrétne kategórie. Ak nie sú, vráti sa chyba:
Funkcie časovej inteligencie a požadované kategórie
Mnohé funkcie časovej inteligencie vyžadujú, aby boli v kalendári, na ktorý sa odkazuje vo volaní funkcie, zahrnuté dostatočné kategórie, aby služba Power BI mohla identifikovať jedinečne konkrétnu jednotku času. Inými slovami, služba Power BI musí byť schopná prejsť z úrovne, na ktorej sa výpočet vykonáva, až po jednotlivý rok. Napríklad pri vykonávaní výpočtu štvrťrokov, napríklad pomocou priradenia kategórie TOTALQTD, alebo priradenia Štvrťroka aj Roka v kalendári, ako to diktuje overenie jedinečnosti Obdobie.
Poznámka
Pre niektoré funkcie ich názov naznačuje, na ktorej úrovni výpočet funguje (napríklad TOTALYTD), zatiaľ čo pre iné je závislý od parametrov a kontextu (napríklad DATEADD).
Vymazanie kontextu
Funkcie časového spravodajstva fungujú tak, že začínajú v určitom časovom bode a potom na ňom vykonávajú nejakú operáciu, aby získali iný časový bod. Prirodzene, počiatočný časový bod môže byť v konflikte s týmto výsledkom, čo spôsobí priesečník kontextu filtra, ktorý by v predvolenom nastavení priniesol čiastočné alebo prázdne výsledky. Zvážte napríklad nasledujúci scenár.
Definícia kalendára
Máme jednoduchý gregoriánsky kalendár, ktorý označuje tri kategórie, definované ako:
| Kategória | Primárny stĺpec |
|---|---|
| Year | Year |
| Mesiac v roku | MesiacRokaRoka |
| Štvrťrok | Štvrťrok |
Definície mierok
Definované sú dve základné miery: jedna na výpočet celkového predaja a druhá na výpočet celkového predaja z predchádzajúceho štvrťroka:
[TotalSales] = CALCULATE ( SUM( FactInternetSales[SalesAmount] ) )
[LastQuarterSales] = CALCULATE ( [TotalSales], DATEADD( GregorianCalendar, -1, QUARTER ) )
Príklad: Ako funguje vymazanie kontextu
Vizuál tabuľky prehľadáva podrobnosti mesiaca pomocou stĺpcov Year a MonthOfYear :
| Year | MesiacRokaRoka | Celkový predaj | Predaj za posledný štvrťrok |
|---|---|---|---|
| 2011 | 1 | 10 | |
| 2011 | 2 | 20 | |
| 2011 | 3 | 30 | |
| 2011 | 4 | 40 | 10 |
| 2011 | 5 | 50 | 20 |
V tejto tabuľke sa tučný riadok prehľadáva na úrovni mesiaca za mesiac apríl 2011. Všetky mierky v tomto riadku sa teda vyhodnotia v kontexte filtra [Rok] == 2011 a [MesiacRoka] == 4.
Ako sa očakávalo, TotalSales je tu vypočítaný ako celkový predaj za apríl 2011.
LastQuarterSales podobne počíta TotalSales, ale má ďalší filter, ktorý poskytuje funkcia DATEADD založená na kalendári.
Pre tento riadok DATEADD by mal počiatočný začiatočný bod v apríli 2011 a priniesol by časový bod, ktorý je presne pred jedným štvrťrokom: január 2011. V dôsledku toho možno očakávať, že tento celkový predaj sa vypočíta v nasledujúcich dvoch kontextoch filtra:
- Poskytujú stĺpce prehľadávania aktuálneho riadka:
{ [Year] == 2011, [MonthOfYear] == 4 }(ekvivalentne, apríl 2011) - Poskytuje DATEADD filter:
{ [Year] == 2011, [MonthOfYear] == 1 }(Ekvivalentne, január 2011)
Je zrejmé, že tieto dva kontexty filtrov by boli v rozpore - nemôžeme vyhodnotiť celkový predaj vzhľadom na aktuálny mesiac ako január 2011 a apríl 2011. Takáto križovatka by nepriniesla žiadne výsledky.
To sa však nedeje. Namiesto toho na základe definície kalendára funkcie časovej inteligencie založené na kalendári identifikujú, ktoré stĺpce kategórií môžu viesť ku konfliktom po časovej operácii, ktorú funkcia vykonáva. V tomto prípade DATEADD vykoná posun na úrovni štvrťroka . Funkcia identifikuje, že kategórie Rok aj Mesiac v roku sa môžu zmeniť v dôsledku zmeny stĺpcov kategórie Štvrťrok . Funkcia teda vymaže kontext filtra vo všetkých (primárnych aj priradených) stĺpcoch, ktoré sú označené k týmto kategóriám.
Inými slovami, môžeme povedať, že kategórie Rok a Mesiac roka sú závislosťami kategórie Štvrťrok . Naopak, môžeme povedať, že kategória Štvrťrok je závislá od kategórií Rok a Mesiac v roku .
Ako funguje vymazanie kontextu
Tento diagram slúži na lepšiu vizualizáciu závislostí medzi rôznymi časovými kategóriami. Každá kategória v tejto mriežke predstavuje všetky stĺpce (primárne a priradené) označené k tejto kategórii. Kategórie sú prepojené so svojimi závislosťami pomocou šípok. Napríklad "Mesiac" závisí od "Rok", "Štvrťrok", "Mesiac štvrťroka", "Štvrťrok" a "Mesiac v roku".
Keď je kontext nastavený v stĺpci alebo jeho priradenom zoradení podľa stĺpca , ktorý je označený v kalendári, predchádzajúci kontext filtra sa vymaže:
- Všetky závislosti kategórií X. Možno si to predstaviť ako všetky kategórie nad X.
- Všetky kategórie závislé od X a jeho závislostí (t. j. od 1. vyššie). Možno si to predstaviť ako všetky kategórie pod X a všetky kategórie v 1 vyššie.
Poznámka
Vymazanie kontextu sa uskutočňuje v stĺpcoch označených v kalendári alebo priradených stĺpcoch zoradenia podľa bez ohľadu na to, či je kontext nastavený pomocou funkcií časovej inteligencie alebo inak.
Stĺpce súvisiace s časom
Väčšina funkcií časovej inteligencie, s výnimkou DATEADD a SAMEPERIODLASTYEAR, vymaže kontext vo všetkých stĺpcoch súvisiacich s časom a priradených stĺpcoch zoradenia podľa.
Správanie naprieč kalendármi
Ak je v tej istej tabuľke definovaných viacero kalendárov, tieto procesy sa dokončia pre každý kalendár definovaný v tabuľke. To zahŕňa poznámku týkajúcu sa kontextového vymazania stĺpcov súvisiacich s časom. Inými slovami, predpokladajme, že tabuľka definuje tri kalendáre: Kalendár1, Kalendár2 a Kalendár3. Ak je kontext filtra nastavený na kategóriu "X" v kalendári1, vyššie uvedené procesy sa vykonávajú vo všetkých troch kalendároch.
Príklad: Filter nastavený na "Štvrťrok"
Ak by bol kontext filtra nastavený v kategórii "Štvrťrok", postup by bol nasledovný.
Najprv by sa zvážili všetky závislosti kategórie "Štvrťrok".
Ďalej by sa brali do úvahy všetky závislé osoby "Štvrtiny" a jej závislosti.
Konečný výsledok by bol nasledujúci. Všetky červené kategórie by mali odstránený predchádzajúci kontext filtra a nový kontext by bol nastavený na Štvrťrok.
TMDL skript pre kalendáre
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šimnite si, že ak nezadáte žiadnu kategóriu pre calendarColumnGroup TMDL, stĺpce sa označia ako súvisiace s časom. V tomto príkladesú stĺpce súvisiace s časom v ukážkovom kalendári.
Dajte to všetko dokopy: Príklady časového posunu
Niektoré funkcie časovej inteligencie posúvajú kontext iba laterálne, pričom berú do úvahy všetky stĺpce, zatiaľ čo iné vykonávajú hierarchické posuny – zachovávajú alebo čistia kontext na základe toho, či sú stĺpce v kalendári označené. Funkcie časovej inteligencie možno rozdeliť do dvoch skupín podľa toho, či umožňujú hierarchické posuny:
- Opravené. Funkcie v tejto skupine sú DATEADD a SAMEPERIODLASTYEAR. Tieto funkcie umožňujú iba bočné časové posuny a nevracajú hodnoty z inej úrovne podrobností.
- Flexibilný. Táto skupina obsahuje všetky ostatné funkcie časovej inteligencie. Tieto funkcie umožňujú hierarchické časové posuny a v závislosti od nastavenia kalendára môžu vrátiť výsledky z inej úrovne podrobností.
Na zobrazenie tohto správania si prejdime príklad pomocou jednoduchého dátového modelu pozostávajúceho z dvoch tabuliek, dvoch kalendárov a piatich mierok.
Tabuľky a vzťahy
V tomto príklade máme nasledujúci jednoduchý dátový model:
| Table | Stĺpce |
|---|---|
| Date (Dátum) | Rok, IsWorkingDay, Dátum |
| Sales | Kľúč objednávky, množstvo, dátum objednávky |
Tu je niekoľko príkladov riadkov v tabuľke Dátum:
Tu je niekoľko príkladov riadkov v tabuľke Predaj:
Tabuľky Sales a Date súvisia s Dátumom objednávky a Dátumom.
Kalendáre
V tabuľke Dátum sme definovali kalendáre s týmito priradeniami:
| Názov kalendára | Kategória | Primárny stĺpec |
|---|---|---|
| gregoriánsky | Year | Year |
| Date (Dátum) | Date (Dátum) | |
| GregorianWithWorkingDay | Year | Year |
| Date (Dátum) | Date (Dátum) | |
| Súvisiace s časom | IsWorkingDay |
Ekvivalentná definícia TMDL týchto dvoch kalendárov 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
Miery
V tabuľke Predaj definujeme nasledujúce mierky:
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 )
)
Príklad bočného posunu
Vytvorme vizuál, ktorý zobrazuje Year, MonthOfYear, IsWorkingDay, Total Quantity, OneYearAgoQuantity a OneYearAgoQuantityTimeRelated pre roky 2024 a 2025:
Všetky hodnoty pre OneYearAgoQuantity a OneYearAgoQuantityTimeRelated pre rok 2025 sa zhodujú s celkovým množstvom presne pred rokom (2024) pre rovnakú hodnotu IsWorkingDay .
To ukazuje, že DATEADD zachováva kontext v každom stĺpci v tabuľke Dátum, ktorý obsahuje použitý kalendár bez ohľadu na to, či nie je označený alebo či je v danom kalendári označený ako súvisiaci s časom. Keďže v našich definíciách mierok sme nariadili DATEADD posunúť sa o jeden rok dozadu, jediným stĺpcom, ktorého kontext bol posunutý, bol stĺpec priradený ku kategórii Rok. To, či bol stĺpec IsWorkingDay v kalendári označený ako súvisiaci s časom alebo nebol označený vôbec, nezmenilo výsledok. Jediná ďalšia funkcia, ktorá vykazuje toto správanie, je .SAMEPERIODLASTYEAR
Príklad hierarchického posunu
Teraz sa pozrime na príklad, v ktorom to, či je stĺpec označený ako časovo súvisiaci alebo nie, skutočne zmení výsledok.
Na tento účel znova vytvoríme rovnaký vizuál ako v predchádzajúcom príklade, ale tentoraz použijeme mierky FullLastYearQuantity a FullLastYearQuantityTimeRelated:
To ukazuje, že PARALLELPERIOD zachová kontext pre stĺpce, ktoré nie sú označené v kalendári, ale vymaže kontext pre stĺpce označené ako súvisiace s časom. FullLastYearQuantity používal gregoriánsky kalendár, v ktorom nebol v kalendári označený IsWorkingDay, zatiaľ čo FullLastYearQuantityTimeRelated používal kalendár GregorianWithWorkingDay , kde bol IsWorkingDay označený ako súvisiaci s časom. Všetka časová inteligencia funguje okrem DATEADD a SAMEPERIODLASTYEAR správa sa týmto spôsobom.
Bonus: Ak ste naozaj chceli vynútiť tieto funkcie, aby zachovali kontext aj pre stĺpce súvisiace s časom, môžete použiť VALUES:
FullLastYearQuantityTimeRelatedOverride =
CALCULATE ( [Total Quantity], PARALLELPERIOD ( 'GregorianWithWorkingDay', -1, YEAR ), VALUES('Date'[IsWorkingDay]) )
V tomto prípade FullLastYearQuantityTimeRelatedOverride vráti rovnaké výsledky ako FullLastYearQuantity.
Záver
Vyššie uvedený podrobný príklad ukazuje, že rôzne funkcie časovej inteligencie sa správajú odlišne v závislosti od toho, či sú stĺpce v kalendári označené ako súvisiace s časom. DATEADD a SAMEPERIODLASTYEAR vykonávať iba bočné časové posuny. Všetky ostatné funkcie časovej inteligencie umožňujú hierarchické časové posuny.
Použitie DATEADD a DÁTUMY v období s kalendármi
Funkcie DATEADDa DATESINPERIOD majú špecifické parametre, ktoré umožňujú jemnú kontrolu nad tým, ako sa posuny vykonávajú, keď je výber na detailnejšej úrovni než úroveň posunu indikovaná interval parametrom. Toto sa deje napríklad, ak zobrazujete dáta na úrovni dátumu, ale nastavíte interval parameter týchto funkcií na MONTH. Napríklad v gregoriánskom kalendári, keď posunutie obdobia, ktoré zahŕňa 3. až 10. marec o mesiac, bude mať za následok 3. až 10. apríla. Keďže sa však mesiace v gregoriánskych kalendároch líšia dĺžkou, môže to viesť k nejasnostiam pri posune. Nižšie sú uvedené príklady scenárov založených na gregoriánskom kalendári:
Prechod z kratšieho na dlhšie obdobie
Napríklad posunutie o jeden mesiac dopredu s výberom vo februári, takže cieľovým mesiacom je marec.
Parameter na môžete použiť extension na DATEADD ovplyvnenie, ako sa posun vykoná:
| Hodnota parametra rozšírenia | Description | Result |
|---|---|---|
precise |
Tým sa prísne zachováva pôvodné obdobie obdobia. | 25. – 28. február sa posúva na 25. – 28. marca. |
extended |
Umožňuje rozšírenie okna ku koncu mesiaca. | 25. – 28. február sa posúva na 25. – 31. marca. |
endaligned |
Zarovnáva koncový dátum s koncom cieľového mesiaca, keď výber dosiahne koniec svojho mesiaca; inak zachováva relatívne polohy. | 28. február sa presunul na 31. marec, zatiaľ čo 27. február na 27. marec. |
Poznámka
DATESINPERIOD poskytuje endbehavior parameter, ktorý ponúka možnosti precise a endaligned .
Prechod z dlhšieho na kratšie obdobie
Napríklad posunutie o jeden mesiac dozadu s výberom v marci, takže cieľovým mesiacom je február.
Parameter na môžete použiť truncation na DATEADD ovplyvnenie, ako sa posun vykoná:
| Hodnota parametra skrátenia | Description | Result |
|---|---|---|
anchored |
Ukotví výsledok k poslednému platnému dátumu menšieho mesiaca. | 31. marec sa posúva na 28. februára (alebo 29. februára v priestupnom roku). |
blank |
Ak posunutý dátum neexistuje, vráťte prázdne položku. | Posunutie 31. marca o jeden mesiac späť sa vráti prázdne (keďže 31. február neexistuje). |
Poznámka
Tento parameter nie je dostupný pre DATEINPERIOD.
Dôležité informácie o práci s časovou inteligenciou založenou na kalendári
- Vykonanie výpočtu časovej inteligencie v tabuľke faktov, ktorá definuje kalendár a podlieha pravidlám zabezpečenia na úrovni riadkov (RLS) a môže viesť k neočakávaným výsledkom.
- Výkon tejto funkcie Preview nie je reprezentatívny pre konečný produkt.
- V službe Power BI zatiaľ nemôžete vytvárať kalendáre.
- S vlastnými kalendármi by ste nemali používať automatické tabuľky dátumu a času .
- Kalendáre nemôžete používať so živými pripojenými alebo zloženými modelmi.
- Odporúčame priradiť iba stĺpce v kalendári, ktoré chcete použiť pri výpočtoch časovej inteligencie.
- Kalendáre podliehajú overeniu v reálnom čase aj offline . Kalendár môžete uložiť aj napriek chybám overenia v režime offline, ale odporúča sa ich najskôr vyriešiť. Na uloženie je potrebné opraviť zlyhania overovania v reálnom čase.
- Každý kalendár musí mať v rámci dátového modelu jedinečný názov
- Jedna tabuľka môže obsahovať viacero kalendárov
- Tabuľka, ktorá obsahuje kalendár, musí mať menej ako 200 stĺpcov. Ak tabuľka obsahuje viac ako 20 000 riadkov, overenia nebudú k dispozícii, ale stále môžete pridať kalendár.
- Kalendár musí kategórii priradiť aspoň jeden hlavný stĺpec
- Kalendár môže ku kategóriám priradiť iba stĺpce z vlastnej tabuľky
- Každá kategória by mala mať primárny stĺpec a môže mať priradený nula alebo viac priradených stĺpcov
- DATEADD obsahuje nové parametre na riadenie správania rozšírenia a rozšírenia, ktoré nie sú rozpoznané v technológii IntelliSense.
- Každý daný stĺpec je možné priradiť iba k jednej kategórii
- Funkcie časovej inteligencie, ktoré používajú kalendáre, nie je možné vnoriť. Napríklad nasledujúci príkaz DAX nie je podporovaný:
ThisIsNotSupported = PREVIOUSDAY ( PREVIOUSMONTH( 'Calendar' ) )
Namiesto toho môžete:
ThisWorks = CALCULATETABLE ( PREVIOUSDAY ( 'Calendar' ), PREVIOUSMONTH( 'Calendar' ) )
Vytvorenie tabuľky dátumov pomocou vstavaných nástrojov
Nasledujúce príklady vytvárajú tabuľku dátumov od 1. januára 2010 do 31. decembra 2030 pomocou doplnku Power Query M alebo jazyka DAX. Zahŕňa nasledujúce stĺpce: Rok, Číslo mesiaca, Názov mesiaca, Mesiac Rok, Štvrťrok, Rok Štvrťrok, Deň a Dátum.
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]
)
Ďalšie informácie a ďalšie možnosti nájdete v téme Tabuľky dátumov.
Súvisiaci obsah
Ďalšie informácie týkajúce sa tohto článku nájdete v nasledujúcich zdrojoch informácií: