Použijte partice tabulek na horké a studené k optimalizaci velmi velkých datových modelů Power BI

Tento článek popisuje, jak využívat horké a studené oddíly tabulek k optimalizaci velmi rozsáhlých datových modelů. Oddíly poskytují způsob, jak rozdělit data tabulky do samostatných podmnožina. Oddíly nejsou přímo zpřístupněny ve standardních nástrojích pro modelování dat Power BI, ale můžete získat výhody pokročilých metod partitioningu konfigurací politiky přírůstkového obnovení v Power BI Desktopu. Přírůstková aktualizace spoléhá na oddíly, jak je vysvětleno v Přírůstková aktualizace a data v reálném čase pro datové sady. Konfigurace horkých a studených oddílů tabulky ale přesahuje to, čeho se dají zásady přírůstkové aktualizace dosáhnout, a předpokládají znalost typických schémat dělení tabulek a nástrojů založených na JAZYCE XMLA.

Požadavky

Vzhledem k relativní složitosti této techniky dělení je nejvhodnější pro pokročilé uživatele s zkušenostmi v následujících oblastech:

  1. Principy konceptů dělení tabulek, jak fungují oddíly režimu importu, režim DirectQuery a duální režim.

  2. Znalost vytváření hybridních tabulek pomocí nástrojů založených na XMLA Hybridní tabulky používají jeden nebo více oddílů režimu importu a jeden oddíl DirectQuery .

  3. Znalost požadavků funkcí DAX, které lze použít k určení DataCoverageDefinition. Toto je nová vlastnost pro oddíly DirectQuery , které popisují, jaká data oddíl DirectQuery hybridní tabulky obsahuje, aby modul Power BI mohl tento oddíl vyloučit z zpracování dotazů, kde je to vhodné. Vyloučení oddílu DirectQuery může pomoct vyhnout se zbytečným dotazům na zdroje dat a zlepšit výkon zpracování dotazů DAX.

  4. Pochopení rozdílu mezi běžnými a omezenými relacemi mezi tabulkami Například funkce RELATED je užitečná, pokud chcete definovat pokrytí dat oddílu tabulky faktů na základě hodnot ze související tabulky dimenzí kalendářních dat. Mějte na paměti, že oddíl tabulky faktů je oddíl DirectQuery s šancí omezené relace k tabulce kalendářních dat, přes kterou funkce RELATED nemůže načíst hodnoty. V tomto scénáři funkce RELATED funguje pouze v případě, že tabulka dimenzí kalendářních dat je duální tabulka. Tabulka kalendářních dat musí být v režimu DirectQuery nebo Duální . Nemůže to být čistý import.

Mějte na paměti, že nesprávně definované DataCoverageDefinition můžou vést k nesprávným výsledkům, protože Power BI může nesprávně vyloučit oddíl DirectQuery ze zpracování dotazů. Proto se ujistěte, že porovnáváte výsledky s DataCoverageDefinition a bez něj, abyste měli jistotu, že se sčítají.

Kdy použít horké a studené partice tabulky

Tady je příklad, jak horké a studené partice mohou pomoci vyladit hybridní tabulku pro historickou analýzu. Předpokládejme, že máte velmi velký zdroj dat, který se hromadí v průběhu mnoha let. Primárním využitím je analýza nejnovějších dat z posledních pár let. Někdy také chcete analyzovat starší data. Možná jste si všimli nedávného ostrého nárůstu prodeje za rok. Stalo se to někdy dřív? Jedná se o nejvyšší špičku prodeje od začátku sledování prodeje?

Bez podpory pro horké a studené oddíly by bylo nutné pro tento druh historické analýzy importovat všechna historická data spolu s novějšími daty do tabulky faktů. V nejlepším případě je to neefektivní využití prostředků, protože primární analýza ani nepoužívá žádná starší historická data. V nejhorším případě je objem dat tak velký, že ho ani nejde naimportovat úplně. Datový model musíte přepnout do režimu DirectQuery a přijmout v porovnání s režimem importu pokles výkonu, nebo můžete vytvořit samostatné modely a požadovat, aby uživatelé museli přepínat mezi sestavami. Hybridní tabulka s horkými a studenými oddíly poskytuje lepší možnost.

Jak používat oddíly horkých a studených tabulek

Nejprve nakonfigurujte tabulku prodeje s oddílem horkého importního režimu pro nejnovější data a zachovejte starší data v oddílu DirectQuery pro studený režim, jak je znázorněno na následujícím diagramu pro tabulku FactInternetSales ukázkového datového modelu AdventureWorks. Všechny řádky s OrderDateKey větší nebo rovno 20200101 se importují do datového modelu pomocí oddílu režimu hot import. Řádky s klíčem OrderDateKey menší než 20200101 jsou pokryty studeným oddílem DirectQuery . Power BI teď dokáže rychle doručovat primární případy použití v režimu importu a nemusíte importovat obrovské objemy historických dat, která analyzujete jen občas, protože oddíl DirectQuery to pokrývá.

Snímek obrazovky s tabulkou Fact Internet Sales ukázkového datového modelu Adventure Works Tabulka faktů internetového prodeje je otevřena se zobrazenými filtrovanými řádky.

Pokud máte ukázkový datový sklad AdventureWorks a chcete postupovat podle následujících obecných kroků:

  1. Vytvořte datovou sadu. Pomocí Power BI Desktop vytvořte datovou sadu a sestavu pro AdventureWorks. Zahrnout všechny tabulky v čistém režimu DirectQuery . Potom převeďte všechny tabulky s výjimkou tabulky do FactInternetSales režimu. FactInternetSales Ponechte tabulku v režimu DirectQuery.

  2. Nahrajte datovou sadu. Pro operace zápisu použijte pracovní prostor hostovaný v Power BI Premium s povoleným koncovým bodem XMLA.

  3. Aktualizujte úroveň kompatibility. Otevřete pracovní prostor s datovou sadou AdventureWorks v aplikaci SQL Server Management Studio (SSMS). Pravým tlačítkem myši klikněte na AdventureWorks dataset>Script>Script Database asCreate or Replace to a vyberte Nové okno editoru dotazů. Nastavte vlastnost compatibilityLevel na 1603 (nebo vyšší). Vyberte Spustit nebo stiskněte klávesu F5. Ověřte, že se operace úspěšně dokončila.

    Snímek obrazovky skriptu s úrovní kompatibility nastavenou na 1603

  4. Nakonfigurujte oddíly tabulky FactInternetSales. Pravým tlačítkem myši klikněte na datovou sadu AdventureWorks>Skriptovat databázi jako>Vytvořit nebo nahradit a vyberte okno Nový editor dotazů. Nahraďte celou sekci oddílů následující sekcí. Nezapomeňte aktualizovat řádky Sql.Database tak, aby odkazovaly na databázi AdventureWorksDW ve vašem prostředí. Vyberte Spustit nebo stiskněte klávesu F5. Ověřte, že se operace úspěšně dokončila.

       "partitions": [ 
        { 
          "name": "FactInternetSales-DQ-Partition", 
          "mode": "directQuery", 
          "dataView": "full", 
          "source": { 
            "type": "m", 
            "expression": [ 
              "let", 
              "    Source = Sql.Database(\"demo.database.windows.net\", \"AdventureWorksDW\"),", 
              "    dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data],", 
              "    #\"Filtered Rows\" = Table.SelectRows(dbo_FactInternetSales, each [OrderDateKey] < 20200101)", 
              "in", 
              "    #\"Filtered Rows\"" 
            ] 
          } 
        }, 
        { 
          "name": "FactInternetSales-Import-Partition", 
          "mode": "import", 
          "source": { 
            "type": "m", 
            "expression": [ 
              "let", 
              "    Source = Sql.Database(\"demo.database.windows.net\", \"AdventureWorksDW\"),", 
              "    dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data],", 
              "    #\"Filtered Rows\" = Table.SelectRows(dbo_FactInternetSales, each [OrderDateKey] >= 20200101)", 
              "in", 
              "    #\"Filtered Rows\"" 
            ] 
          } 
        } 
      ],    
    
  5. Zpracování datového modelu Na portálu Power BI otevřete pracovní prostor s datovou sadou AdventureWorks a proveďte aktualizaci datové sady na vyžádání, aby se načetl oddíl importu s daty.

  6. Ověřte, že sestavy zobrazují poslední a historická data. Otevřete AdventureWorks a ověřte, že sestava dokáže zobrazit výsledky prodejních transakcí před a po 1. lednu 2020, jak je znázorněno na následujícím snímku obrazovky.

Snímek obrazovky se dvěma různými sestavami. Jedna zobrazuje data z roku 2020 a druhá data z roku 2019.

Definování pokrytí dat oddílu DirectQuery

Řešení bezproblémově funguje v nedávných a historických datech. Power BI ale ve výchozím nastavení dotazuje všechny oddíly tabulky, protože neví, jaká data každý oddíl pokrývá. Power BI proto stále dotazuje oddíl DirectQuery i po ty roky, které oddíl DirectQuery nepokrývá. Prodejní data jsou snadno dostupná v oddílu importu a oddíl DirectQuery nepřispívá žádným řádkům, ale toto nadbytečné dotazování na zdroj dat může stále způsobit výrazné zatížení zdroje dat a přispět ke zpoždění zpracování dotazů DAX. Abyste se vyhnuli tomuto nadbytečnému zdrojovému dotazování, použijte příkaz DataCoverageDefinition.

Jak ukazuje následující snímek obrazovky, sestava Power BI stále odesílá do zdroje dat několik nepotřebných dotazů SQL pro rok 2020, protože dotaz DAX každého vizuálu způsobí, že Power BI dotazuje část DirectQuery.

Snímek obrazovky s dotazy DAX

dataCoverageDefinition Nastavením vlastnosti oddílu DirectQuery jako v následujícím fragmentu kódu TMSL se těmto dotazům SQL vyhnete. Mějte ale na paměti, že po použití nebo změně definice pokrytí dat musíte datovou sadu aktualizovat. Přepočet procesu je dostatečný k vyhodnocení definice pokrytí dat. Pokud tento krok zapomenete, dotazy, které se dotknou oddílu, selžou s chybovou zprávou, která říká: "DataCoverageDefinition oddílu DQ v tabulce '[Název Tabulky]' se po nedávné změně ještě nevypočítal." Je potřeba ho znovu zpracovat".

        { 
          "name": "FactInternetSales-DQ-Partition", 
          "mode": "directQuery", 
          "dataView": "full", 
          "source": { 
            "type": "m", 
            "expression": [ 
              "let", 
              "    Source = Sql.Database(\"demopm.database.windows.net\", \"AdventureWorksDW2020\"),", 
              "    dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data],", 
              "    #\"Filtered Rows\" = Table.SelectRows(dbo_FactInternetSales, each [OrderDateKey] < 20200101)", 
              "in", 
              "    #\"Filtered Rows\"" 
            ] 
          },  
"dataCoverageDefinition": {  
                  "description": "DQ partition with all sales from 2017, 2018, and 2019.",  
                  "expression": "RELATED('DimDate'[CalendarYear]) IN {2017,2018,2019}"  
                }  
        } 

Jak už jsme zmínili dříve, tato vlastnost dataCoverageDefinition pomáhá eliminovat nepotřebné načtení zdroje dat. Zlepšuje také výkon analýzy nedávných dat, protože power BI teď může vyloučit oddíl DirectQuery ze zpracování dotazů DAX, kde je to vhodné. Jednoduché výrazy pokrytí dat můžete definovat pro jednotlivé hodnoty a rozsahy pomocí jednoduchých operátorů AND, OR a NOT. Pomocí funkce RELATED můžete také definovat pokrytí dat na základě sloupce z tabulky dimenzí, která má běžnou relaci s tabulkou faktů. Pokud výraz pokrytí dat používá sloupce z tabulky dimenzí, ujistěte se, že je tabulka dimenzí v duálním režimu. Pokrytí dat můžete definovat také na základě sloupců ze samotné tabulky faktů. Informace o podporovaných operacích zařazených do tří skupin najdete v následující tabulce. 

Typ Comments Examples
Jeden predikát (založený na hodnotách) Operátory rovnosti, nerovnosti a IN
Podpora jak dimenzionálních, tak faktových tabulek
RELATED('Date'[Year]) = 2020
NOT RELATED('Date'[Year]) = 2020
RELATED('Date'[Year]) IN {2020, 2021, 2022}
InternetSales'[SalesAmt] = CURRENCY(100,0)
NOT InternetSales'[SalesAmt] = CURRENCY(100,0)
InternetSales'[SalesAmt] IN {CENA(100,0 CZK), CENA(200,0 CZK)}
Jeden predikát (založený na rozsahu) Mohou být porovnávací operátory, jako >, <, >=, <=
Vyžadovat, aby tabulka dimenzí byla v duálním režimu
RELATED('Date'[Year]) > 2020
RELATED('Date'[Year]) <= 2020
Více predikátů Rovnost, nerovnost a porovnání
Nepodporuje operátor IN.
Omezeno na jednu tabulku dimenzí v duálním režimu
RELATED('Date'[Year]) > 2010 && RELATED('Date'[Year]) > 2020
RELATED('Date'[Year]) = 2020 && RELATED('Date'[Calendar Quarter]) = 1
RELATED('Date'[Year]) > 2020 && NOT RELATED('Date'[Calendar Quarter]) = 1
RELATED('Date'[Year]) > 2020 && RELATED('Date'[Calendar Quarter]) < 3
RELATED('Date'[Year]) > 2020 && (RELATED('Date'[Calendar Quarter]) = 1 || RELATED('Date'[Calendar Quarter]) = 2)

Vlastnost DataCoverageDefinition oddílů DirectQuery umožňuje optimalizovat dokonce i největší datové modely Power BI založené na horkých oddílech v režimu importu a studených oddílů v režimu DirectQuery tím, že zabrání zbytečnému dotazování zdroje dat. Toto snížení zdrojových dotazů pomáhá zlepšit výkon sestav při analýze aktuálních dat. Pomáhá také snížit zatížení zdroje dat a tímto způsobem pomáhá maximalizovat škálování zdroje dat. Mějte ale na paměti, že optimalizace datového modelu pomocí dataCoverageDefinition vlastnosti je stále pokročilým scénářem. Pečlivě ověřte výsledky.

Úvahy a omezení

  • DataCoverageDefinition Vlastnost oddílů DirectQuery v současné době vyžaduje statické hodnoty, například RELATED('Date'[Year]) = 2020 nebo RELATED('Date'[Year]) IN {2020, 2021, 2022}. Dynamické přiřazení se nepodporují, například RELATED('Date'[DateKey]) = TODAY().

  • Přírůstková aktualizace s daty v reálném čase tuto vlastnost nevyuží.DataCoverageDefinition Pokud u oddílu DirectQuery (v reálném čase) použijete definici pokrytí dat, incrementální aktualizace při opětovném vytvoření oddílu definici pokrytí dat zahodí.