Techniky redukce dat pro modelování importuData reduction techniques for Import modeling

Tento článek je určen pro modelátory dat Power BI Desktopu, kteří vyvíjí modely importu.This article targets Power BI Desktop data modelers developing Import models. Popisuje různé techniky, které umožňují snížit objem dat načítaných do modelů importu.It describes different techniques to help reduce the data loaded into Import models.

Do modelů importu se načítají data, která jsou zkomprimovaná, optimalizovaná a následně uložená na disk modulem úložiště VertiPaq.Import models are loaded with data that is compressed and optimized and then stored to disk by the VertiPaq storage engine. Při načtení zdrojových dat do paměti je možné pozorovat 10násobnou kompresi, lze tedy logicky očekávat, že se 10 GB zdrojových dat dokáže zkomprimovat přibližně na velikost 1 GB.When source data is loaded into memory, it is possible to see 10x compression, and so it is reasonable to expect that 10 GB of source data can compress to about 1 GB in size. Při trvalém ukládání na disk je ale možné dosáhnout snížení o dalších 20 %.Further, when persisted to disk an additional 20% reduction can be achieved.

Navzdory efektivitě, kterou modul úložiště VertiPaq nabízí, je potřeba se snažit maximálně snížit objem dat, která do modelů načítáte.Despite the efficiencies achieved by the VertiPaq storage engine, it is important that you strive to minimize the data that is to be loaded into your models. To platí hlavně pro velké modely, nebo modely, u nichž se předpokládá, že se časem zvětší.It is especially true for large models, or models that you anticipate will grow to become large over time. Toto jsou čtyři přesvědčivé důvody:Four compelling reasons include:

  • Větší modely nemusí být vaší kapacitou podporované.Larger model sizes may not be supported by your capacity. Sdílená kapacita může hostovat modely o velikosti až do 1 GB, kapacita Premium pak až do 13 GB.Shared capacity can host models up to 1 GB in size, while Premium capacities can host models up to 13 GB in size. Další informace najdete v článku Podpora velkých datových sad v Power BI Premium.For further information, read the Power BI Premium support for large datasets article.
  • Menší modely snižují kolize prostředků kapacity, a to hlavně paměti.Smaller model sizes reduce contention for capacity resources, in particular memory. Díky tomu je možné souběžně načítat více modelů po delší dobu a dosáhnout tak nižší míry vyřazování.It allows more models to be concurrently loaded for longer periods of time, resulting in lower eviction rates. Další informace najdete v tématu Správa kapacit Premium.For more information, see Managing Premium capacities.
  • Menší modely dosahují rychlejší aktualizace dat, což vede k nižší latenci vytváření sestav, vyšší propustnosti aktualizace datových sad a k menšímu zatížení prostředků zdrojového systému a kapacity.Smaller models achieve faster data refresh, resulting in lower latency reporting, higher dataset refresh throughput, and less pressure on source system and capacity resources.
  • U tabulek s menším počtem řádků v tabulce lze dosáhnout rychlejšího vyhodnocování výpočtů, a tím i lepšího celkového výkonu dotazů.Smaller table row counts can result in faster calculation evaluations, which can deliver better overall query performance.

V tomto článku se budeme věnovat osmi různým technikám redukce dat.There are eight different data reduction techniques covered in this article. Patří mezi ně:These techniques include:

Odebrání nepotřebných sloupcůRemove unnecessary columns

Sloupce tabulky modelu slouží ke dvěma hlavním účelům:Model table columns serve two main purposes:

  • Vytváření sestav pro zajištění návrhů sestav s vhodným filtrováním, seskupováním a shrnutím dat modeluReporting, to achieve report designs that appropriate filter, group, and summarize model data
  • Struktura modelu prostřednictvím podpory vztahů modelu, výpočtů modelu, rolí zabezpečení a dokonce barevného formátování datModel structure, by supporting model relationships, model calculations, security roles, and even data color formatting

Sloupce, které nebudou k těmto účelům sloužit, se pravděpodobně odeberou.Columns that don't serve these purposes can probably be removed. Odebrání sloupců se označuje jako vertikální filtrování.Removing columns is referred to as vertical filtering.

Doporučujeme navrhovat modely se správným počtem sloupců, který odráží známé požadavky vytváření sestav.We recommend that you design models with exactly the right number of columns based on the known reporting requirements. Tyto požadavky se mohou v průběhu času měnit, ale mějte na paměti, že bude později snazší sloupce přidávat než odebírat.Your requirements may change over time, but bear in mind that it's easier to add columns later than it is to remove them later. Odebírání sloupců může poškodit sestavu nebo strukturu modelu.Removing columns can break reports or the model structure.

Odebrání nepotřebných řádkůRemove unnecessary rows

Do tabulek modelu byste měli načítat co nejmenší počet řádků.Model tables should be loaded with as few rows as possible. Toho lze dosáhnout načtením filtrovaných sad řádků, a to pro filtrování podle entity nebo podle času.It can be achieved by loading filtered rowsets into model tables for two different reasons: to filter by entity or by time. Odebírání řádků se označuje jako horizontální filtrování.Removing rows is referred to as horizontal filtering.

Filtrování podle entit zahrnuje načtení podmnožiny zdrojových dat do modelu.Filtering by entity involves loading a subset of source data into the model. Například místo toho, abyste načetli fakta prodeje pro všechny prodejní oblasti, stačí načíst jen fakta pro jednu oblast.For example, instead of loading sales facts for all sales regions, only load facts for a single region. S tímto přístupem získáte více menších modelů a můžete se také zbavit nutnosti definovat zabezpečení na úrovni řádků (bude ale potřeba udělit specifická oprávnění datových sat ve službě Power BI a vytvořit „duplicitní“ sestavy, které se budou připojovat ke každé datové sadě).This design approach will result in many smaller models, and it can also eliminate the need to define row-level security (but will require granting specific dataset permissions in the Power BI service, and creating "duplicate" reports that connect to each dataset). Ke zjednodušení správy a publikování můžete využít parametry Power Query a soubory šablon Power BI.You can leverage the use of Power Query parameters and Power BI Template files to simplify management and publication. Další informace najdete v blogovém článku Deep Dive into Query Parameters and Power BI Templates (Podrobné informace o parametrech Power Query a šablonách Power BI).For further information, read the Deep Dive into Query Parameters and Power BI Templates blog entry.

Filtrování podle času zahrnuje omezení objemu historie dat načteného do tabulek faktů (a omezení řádků s kalendářními daty načtených do tabulek kalendářních dat modelu).Filtering by time involves limiting the amount of data history loaded into fact-type tables (and limiting the date rows loaded into the model date tables). Doporučujeme vám nenačítat automaticky veškerou dostupnou historii, pokud se nejedná o známý požadavek vytváření sestav.We suggest you don't automatically load all available history, unless it is a known reporting requirement. Je dobré vědět, že filtry Power Query založené na čase lze parametrizovat a dokonce nastavit tak, aby používaly relativní časová období (vztahující se například k posledním pěti rokům).It is helpful to understand that time-based Power Query filters can be parameterized, and even set to use relative time periods (relative to the refresh date, for example, the past five years). Pamatujte také, že zpětně provedené změny v časových filtrech nenaruší sestavy. Výsledkem bude jen menší (nebo větší) objem historie dat v sestavách.Also, bear in mind that retrospective changes to time filters will not break reports; it will just result in less (or more) data history available in reports.

Seskupení podle a shrnutíGroup by and summarize

Asi nejúčinnějším způsobem snížení velikosti modelu je načtení předem shrnutých dat.Perhaps the most effective technique to reduce a model size is to load pre-summarized data. Tuto techniku můžete použít ke snížení úrovně podrobností tabulek faktů.This technique can be used to raise the grain of fact-type tables. Je ale nutné počítat se zásadním kompromisem v podobě ztráty podrobností.There is a distinct trade-off, however, resulting in loss of detail.

Například ve zdrojové tabulce faktů o prodeji se na každém řádku uchovává jeden řádek objednávek.For example, a source sales fact table stores one row per order line. Pokud shrnete všechny prodejní metriky a seskupíte je podle data, zákazníka a produktu, můžete dosáhnout výrazného snížení objemu dat.Significant data reduction could be achieved by summarizing all sales metrics, grouping by date, customer, and product. Následně můžete data redukovat ještě více, a to seskupením podle kalendářního data na úrovni měsíců.Consider, then, that an even more significant data reduction could be achieved by grouping by date at month level. Model se tak může zmenšit i o 99 %, ale už nebude možné vytvářet sestavy na úrovni dnů nebo jednotlivých objednávek.It could achieve a possible 99% reduction in model size, but reporting at day level—or individual order level—is no longer possible. Rozhodnutí shrnout data faktů s sebou vždy nese kompromisy.Deciding to summarize fact-type data always involves tradeoffs. Tento kompromis lze ale zmírnit návrhem smíšeného modelu, který je popsaný v části Přepnutí na smíšený režim.Tradeoff could be mitigated by a Mixed model design, and this option is described in the Switch to Mixed mode technique.

Optimalizace datových typů sloupcůOptimize column data types

Modul úložiště VertiPaq používá pro každý sloupec samostatné datové struktury.The VertiPaq storage engine uses separate data structures for each column. Tyto struktury záměrně dosahují nejlepší optimalizace u dat číselných sloupců, která využívají kódování hodnot.By design, these data structures achieve the highest optimizations for numeric column data, which use value encoding. Textová a jiná nečíselná data ale využívají kódování hodnoty hash.Text and other non-numeric data, however, uses hash encoding. K tomu je potřeba, aby modul úložiště přiřadil ke každé jedinečné textové hodnotě obsažené ve sloupci číselný identifikátor.It requires the storage engine to assign a numeric identifier to each unique text value contained in the column. Právě tento číselný identifikátor se pak uloží ve struktuře dat a během ukládání a dotazování vyžaduje vyhledávání hodnot hash.It is the numeric identifier, then, that is then stored in the data structure, requiring a hash lookup during storage and querying.

V některých specifických případech můžete převést zdrojová textová data na číselné hodnoty.In some specific instances, you can convert source text data into numeric values. Například k číslu prodejní objednávky se může konzistentně přidávat předpona s textovou hodnotou (např. „SO123456“).For example, a sales order number may be consistently prefixed by a text value (e.g. "SO123456"). Předponu lze odebrat a hodnotu objednávky převést na celé číslo.The prefix could be removed, and the order number value converted to whole number. To může u velkých tabulek vést k výraznému snížení objemu dat, zejména pokud sloupec obsahuje jedinečné nebo vysoké hodnoty mohutnosti.For large tables, it can result in significant data reduction, especially when the column contains unique or high cardinality values.

V tomto příkladu doporučujeme nastavit u sloupce vlastnost Výchozí shrnutí na „Nevytvářet souhrn“.In this example, we recommend that you set the column Default Summarization property to "Do Not Summarize". To vám pomůže omezit nevhodná shrnutí hodnot čísel objednávek.It will help to minimize the inappropriate summarization of the order number values.

Upřednostnění vlastních sloupcůPreference for custom columns

Modul úložiště VertiPaq ukládá počítané sloupce modelu (definované v jazyce DAX) stejně jako běžné sloupce z Power Query.The VertiPaq storage engine stores model calculated columns (defined in DAX) just like regular Power Query-sourced columns. Datové struktury se ale ukládají trochu odlišně a obvykle se u nich dosahuje méně efektivní komprese.However, the data structures are stored slightly differently, and typically achieve less efficient compression. Kromě toho se vytváří až po načtení všech tabulek Power Query, což může vést k delším aktualizacím dat.Also, they are built once all Power Query tables are loaded, which can result in extended data refresh times. Proto je přidávání sloupců tabulky jako počítaných sloupců méně efektivní, než kdybyste je přidávali jako vypočítané sloupce z Power Query (definované v jazyce M).It is therefore less efficient to add table columns as calculated columns than Power Query computed columns (defined in M).

Vytváření vlastních sloupců v Power Query by mělo být vaší první volbou.Preference should be creating custom columns in Power Query. Pokud je zdrojem databáze, můžete dosáhnout vyšší efektivity načítání dvěma způsoby.When the source is a database, you can achieve greater load efficiency in two ways. Výpočet lze definovat v příkazu SQL (pomocí nativního dotazovacího jazyka poskytovatele), nebo ho můžete ve zdroji dat materializovat jako sloupec.The calculation can be defined in the SQL statement (using the native query language of the provider), or it can be materialized as a column in the data source.

V některých případech ale mohou být vhodnější počítané sloupce modelu.However, in some instances, model calculated columns may be the better choice. Bývá to například tehdy, když je součástí vzorce vyhodnocování měr, nebo když vyžaduje specifické funkce modelování, které jsou podporované jen funkcemi jazyka DAX.It can be the case when the formula involves evaluating measures, or it requires specific modeling functionality only supported in DAX functions. Informace o jednom takovém příkladu najdete v článku Principy funkcí v hierarchiích nadřazený-podřízený v jazyce DAX.For information on one such example, refer to the Understanding functions for parent-child hierarchies in DAX article.

Zákaz načítání dotazů Power QueryDisable Power Query query load

Dotazy Power Query, které slouží k podpoře integrace dat s dalšími dotazy, by se do modelu neměly načítat.Power Query queries that are intended support data integration with other queries should not be loaded to the model. Aby k načtení dotazu do modelu nedocházelo, ujistěte se, že jste v těchto případech načítání dotazů zakázali.To avoid loading the query to the model, take care to ensure that you disable query load in these instances.

Snímek obrazovky Power Query se zobrazením možnosti Povolit načtení

Zákaz automatického data a časuDisable auto date/time

Power BI Desktop obsahuje možnost s názvem Automatické datum a čas.Power BI Desktop includes an option called Auto date/time. Když je tato možnost povolená, vytvoří se pro sloupce kalendářních dat skrytá tabulka automatického data a času, aby autoři sestav byli podporováni při konfiguraci filtrů, seskupování a přechodu k podrobnostem časových období kalendáře.When enabled, it creates a hidden auto date/time table for date columns to support report authors when configuring filters, grouping, and drill down for calendar time periods. Skryté tabulky jsou ve skutečnosti počítané tabulky, které zvětší velikost modelu.The hidden tables are in fact calculated tables that will increase the size of the model. Pokyny k použití této možnosti najdete v článku Automatické datum a čas v Power BI Desktopu.For guidance about using this option, refer to the Auto date/time guidance in Power BI Desktop article.

Přepnutí na smíšený režimSwitch to Mixed mode

V Power BI Desktopu vede návrh ve smíšeném režimu k vytvoření složeného modelu.In Power BI Desktop, a Mixed mode design produces a Composite model. To vám v podstatě umožní určit režim úložiště pro každou tabulku.Essentially, it allows you to determine storage mode for each table. Tak může být vlastnost Režim úložiště nastavená u každé tabulky jako Import, nebo jako DirectQuery (další možností je pak Duální).Therefore, each table can have its Storage Mode property set as Import or DirectQuery (Dual is another option).

Účinným způsobem snížení velikosti modelu je nastavení vlastnosti Režim úložiště pro větší tabulky faktů na možnost DirectQuery.An effective technique to reduce the model size is to set the Storage Mode property for larger fact-type tables to DirectQuery. Tento přístup může dobře fungovat ve spojení s technikou Seskupení podle a shrnutí popsanou výše.Consider that this design approach could work well in conjunction with the Group by and summarize technique introduced earlier. Například k dosažení výkonného vytváření „souhrnných“ sestav by bylo možné použít souhrnná data o prodejích.For example, summarized sales data could be used to achieve high performance "summary" reporting. Na podrobné stránce by se mohly zobrazovat detailní informace o prodejích pro specifický (a úzký) kontext filtru, čímž by se získaly všechny prodejní objednávky v tomto kontextu.A drill through page could display granular sales for specific (and narrow) filter context, displaying all in-context sales orders. V tomto příkladu by taková stránka obsahovala vizuály založené na tabulce DirectQuery, aby mohla načítat data prodejních objednávek.In this example, the drill through page would include visuals based on a DirectQuery table to retrieve the sales order data.

Složené modely mají ale ve velké míře vliv na zabezpečení a výkon.There are, however, many security and performance implications related to Composite models. Podrobnosti najdete v článku Použití složených modelů v Power BI Desktopu.For further information, read the Use composite models in Power BI Desktop article.

Další krokyNext steps

Další informace o navrhování modelů importu v Power BI najdete v těchto článcích:For more information about Power BI Import model design, see the following articles: