Sdílet prostřednictvím


Pokročilá přírůstková aktualizace a data v reálném čase pomocí koncového bodu XMLA

Sémantické modely v kapacitě Premium s povoleným koncovým bodem XMLA pro operace čtení a zápisu umožňují pokročilejší aktualizace, správu oddílů a pouze nasazení metadat prostřednictvím nástrojů, skriptování a podpory rozhraní API. Kromě toho nejsou operace aktualizace prostřednictvím koncového bodu XMLA omezené na 48 aktualizací za den a časový limit plánované aktualizace se neukládá.

Oddíly

Sémantické oddíly tabulky modelu nejsou viditelné a nejde je spravovat pomocí Power BI Desktopu nebo služba Power BI. U modelů v pracovním prostoru přiřazeného ke kapacitě Premium je možné oddíly spravovat prostřednictvím koncového bodu XMLA pomocí nástrojů, jako je SQL Server Management Studio (SSMS), opensourcového tabulkového editoru, skriptovaného pomocí jazyka TMSL (Tabular Model Scripting Language) a programově pomocí tabulkového objektového modelu (TOM).

Při prvním publikování modelu do služba Power BI má každá tabulka v novém modelu jeden oddíl. U tabulek bez zásad přírůstkové aktualizace obsahuje jeden oddíl všechny řádky dat pro danou tabulku, pokud nebyly použity filtry. U tabulek se zásadami přírůstkové aktualizace existuje pouze jeden počáteční oddíl, protože Power BI ještě zásadu nepoužíla. Počáteční oddíl v Power BI Desktopu nakonfigurujete při definování filtru rozsahu data a času pro tabulku na RangeStart základě parametrů a RangeEnd všech dalších filtrů použitých v Editor Power Query. Tento počáteční oddíl obsahuje pouze řádky dat, které splňují kritéria filtru.

Když provedete první operaci aktualizace, tabulky bez zásad přírůstkové aktualizace aktualizují všechny řádky obsažené ve výchozím jediném oddílu této tabulky. U tabulek se zásadami přírůstkové aktualizace se automaticky vytvoří aktualizace a historické oddíly a řádky se do nich načtou podle data a času pro každý řádek. Pokud zásady přírůstkové aktualizace zahrnují získávání dat v reálném čase, Power BI do tabulky přidá také oddíl DirectQuery.

Tato první operace aktualizace může nějakou dobu trvat v závislosti na množství dat, která je potřeba načíst ze zdroje dat. Složitost modelu může být také významným faktorem, protože operace aktualizace musí provádět více zpracování a přepočítávání. Tuto operaci je možné spustit. Další informace najdete v tématu Zabránění vypršení časových limitů při počáteční úplné aktualizaci.

Oddíly se vytvářejí pro členitost období a jsou pojmenované podle období: Roky, čtvrtletí, měsíce a dny. Nejnovější oddíly, oddíly aktualizace , obsahují řádky v období aktualizace, které zadáte v zásadách. Historické oddíly obsahují řádky po celé období až do období aktualizace. Pokud je povolená možnost v reálném čase, oddíl DirectQuery vybere všechny změny dat, ke kterým došlo po koncovém datu období aktualizace. Členitost aktualizací a historických oddílů závisí na obdobích aktualizace a historických (úložiště), která zvolíte při definování zásady.

Pokud je například dnešní datum 2. února 2021 a naše tabulka FactInternetSales ve zdroji dat obsahuje řádky až do dnešního dne, pokud naše zásady určují, že zahrnují změny v reálném čase, aktualizují řádky za poslední den v období aktualizace a ukládají řádky v historickém období posledních tří let. Potom se při první operaci aktualizace vytvoří oddíl DirectQuery pro změny v budoucnu, vytvoří se nový oddíl importu pro dnešní řádky, historický oddíl se vytvoří pro včerejšek, celé denní období, 1. února 2021. Vytvoří se historický oddíl pro období předchozího měsíce (leden 2021), vytvoří se historický oddíl pro předchozí celé období roku (2020) a vytvoří se historické oddíly pro období 2019 a 2018 po celý rok. Nevytvořili jsme žádné oddíly za celé čtvrtletí, protože jsme ještě nedokončili první celé čtvrtletí 2021.

Diagram shows the partition naming granularity described in the text.

Při každé operaci aktualizace se aktualizují jenom oddíly období aktualizace a filtr kalendářních dat oddílu DirectQuery se aktualizuje tak, aby zahrnoval pouze ty změny, ke kterým dochází po aktuálním období aktualizace. Nový oddíl aktualizace se vytvoří pro nové řádky s novým datem a časem v aktualizovaném období aktualizace a stávající řádky s datem a časem, které už jsou v existujících oddílech v období aktualizace aktualizovány. Řádky se starším datem a časem, než je doba aktualizace, se už neaktualizuje.

Po zavření celých období se oddíly sloučí. Pokud je například v zásadách zadáno jednodenní období aktualizace a tříleté historické období úložiště, při prvním dni v měsíci se všechny oddíly pro předchozí měsíc sloučí do oddílu měsíce. V prvním dni nového čtvrtletí se všechny tři oddíly předchozího měsíce sloučí do čtvrtinového oddílu. V prvním dni nového roku se všechny čtyři předchozí čtvrtletí oddíly sloučí do oddílu roku.

Model vždy uchovává oddíly pro celé období historického úložiště plus celé oddíly období až do aktuálního období aktualizace. V příkladu jsou v oddílech 2018, 2019, 2019, 2020 a také oddíly pro období měsíce 2021Q101, období 2021Q10201 a oddíl aktuálního období aktualizace dne. Vzhledem k tomu, že příklad uchovává historická data po dobu tří let, oddíl 2018 se uchovává až do první aktualizace 1. ledna 2022.

S přírůstkovou aktualizací Power BI a daty v reálném čase zpracovává služba správu oddílů za vás na základě zásad. I když služba dokáže zpracovat veškerou správu oddílů za vás pomocí nástrojů prostřednictvím koncového bodu XMLA, můžete selektivně aktualizovat oddíly jednotlivě, postupně nebo paralelně.

Správa aktualizací pomocí aplikace SQL Server Management Studio

SQL Server Management Studio (SSMS) lze použít k zobrazení a správě oddílů vytvořených pomocí zásad přírůstkové aktualizace. Pomocí aplikace SSMS můžete například aktualizovat konkrétní historický oddíl, který není v období přírůstkové aktualizace, aby provedl back-datovanou aktualizaci, aniž by bylo nutné aktualizovat všechna historická data. SSMS lze také použít při spouštění a načítání historických dat pro velké modely přírůstkovým přidáním nebo aktualizací historických oddílů v dávkách.

Screenshot shows the Partitions window in SSMS.

Přepsání chování přírůstkové aktualizace

S SSMS máte také větší kontrolu nad tím, jak vyvolat aktualizace pomocí jazyka skriptování tabulkového modelu a tabulkového objektového modelu. Například v nástroji SSMS v Průzkumník objektů klikněte pravým tlačítkem myši na tabulku a pak vyberte možnost nabídky Zpracovat tabulku a potom vyberte tlačítko Skript pro vygenerování příkazu aktualizace TMSL.

Screenshot shows the Script button in Process Table dialog.

Tyto parametry lze použít s příkazem aktualizace TMSL k přepsání výchozího chování přírůstkové aktualizace:

  • applyRefreshPolicy. Pokud má tabulka definovanou zásadu přírůstkové aktualizace, určuje, applyRefreshPolicy jestli se zásada používá nebo ne. Pokud se zásada nepoužije, úplná operace procesu ponechá definice oddílů beze změny a všechny oddíly v tabulce se plně aktualizují. Výchozí hodnota je true.

  • effectiveDate. Pokud se používá zásada přírůstkové aktualizace, musí znát aktuální datum, aby bylo možné určit rozsahy posuvných oken pro přírůstkovou aktualizaci a historická období. Parametr effectiveDate umožňuje přepsat aktuální datum. Tento parametr je užitečný pro testování, ukázky a obchodní scénáře, kdy se data postupně aktualizují v minulosti nebo budoucnosti, například rozpočty v budoucnu. Výchozí hodnotou je aktuální datum.

{ 
  "refresh": {
    "type": "full",

    "applyRefreshPolicy": true,
    "effectiveDate": "12/31/2013",

    "objects": [
      {
        "database": "IR_AdventureWorks", 
        "table": "FactInternetSales" 
      }
    ]
  }
}

Další informace o přepsání výchozího chování přírůstkové aktualizace pomocí TMSL najdete v tématu Příkaz Aktualizovat.

Zajištění optimálního výkonu

Při každé operaci aktualizace může služba Power BI odesílat inicializační dotazy do zdroje dat pro každý oddíl přírůstkové aktualizace. Výkon přírůstkové aktualizace můžete zlepšit snížením počtu inicializačních dotazů tím, že zajistíte následující konfiguraci:

  • Tabulka, pro kterou konfigurujete přírůstkovou aktualizaci, by měla získat data z jednoho zdroje dat. Pokud tabulka získává data z více zdrojů dat, počet dotazů odeslaných službou pro každou operaci aktualizace se vynásobí počtem zdrojů dat, což může snížit výkon aktualizace. Ujistěte se, že dotaz na tabulku přírůstkové aktualizace je určený pro jeden zdroj dat.
  • U řešení s přírůstkovou aktualizací oddílů importu i dat v reálném čase pomocí Direct Query musí všechny oddíly dotazovat data z jednoho zdroje dat.
  • Pokud vaše požadavky na zabezpečení povolují, nastavte nastavení úrovně ochrany osobních údajů zdroje dat na organizační nebo veřejné. Ve výchozím nastavení je úroveň ochrany osobních údajů soukromá, ale tato úroveň může zabránit výměně dat s jinými cloudovými zdroji. Pokud chcete nastavit úroveň ochrany osobních údajů, vyberte nabídku Další možnosti a pak zvolte Nastavení> Data source credentials>Edit credentials>Privacy level setting for this data source. Pokud je úroveň ochrany osobních údajů nastavená v modelu Power BI Desktopu před publikováním do služby, nepřenese se při publikování do služby. Musíte ho přesto nastavit v nastavení sémantického modelu ve službě. Další informace najdete v tématu Úrovně ochrany osobních údajů.
  • Pokud používáte místní bránu dat, ujistěte se, že používáte verzi 3000.77.3 nebo vyšší.

Zabránění vypršení časových limitů při počáteční úplné aktualizaci

Po publikování do služba Power BI vytvoří počáteční operace úplné aktualizace modelu oddíly pro tabulku přírůstkové aktualizace, načte a zpracuje historická data po celou dobu definovanou v zásadách přírůstkové aktualizace. U některých modelů, které načítají a zpracovávají velké objemy dat, může doba, po kterou operace počáteční aktualizace trvá, překročit časový limit aktualizace uložený službou nebo časový limit dotazu uložený zdrojem dat.

Spuštění operace počáteční aktualizace umožňuje službě vytvářet objekty oddílů pro tabulku přírůstkové aktualizace, ale nenačítat a zpracovávat historická data do žádného oddílu. SSMS se pak používá k selektivnímu zpracování oddílů. V závislosti na množství dat, která se mají načíst pro každý oddíl, můžete jednotlivé oddíly zpracovat postupně nebo v malých dávkách, abyste snížili potenciál jednoho nebo více těchto oddílů, aby způsobilo vypršení časového limitu. Následující metody fungují pro jakýkoli zdroj dat.

Použít zásadu aktualizace

Opensourcový nástroj Tabular Editor 2 poskytuje snadný způsob, jak spustit počáteční operaci aktualizace. Po publikování modelu s definovanými zásadami přírůstkové aktualizace z Power BI Desktopu do služby se připojte k modelu pomocí koncového bodu XMLA v režimu čtení a zápisu. V tabulce přírůstkové aktualizace spusťte příkaz Použít zásadu aktualizace. Pouze s použitými zásadami se vytvoří oddíly, ale do nich se nenačtou žádná data. Pak se připojte pomocí aplikace SSMS a aktualizujte oddíly postupně nebo v dávkách, aby se načetla a zpracovávala data. Další informace naleznete v části Přírůstková aktualizace v dokumentaci k tabulkovému editoru.

Screenshot show the Tabular Editor with Apply Refresh Policy selected.

Filtr Power Query pro prázdné oddíly

Před publikováním modelu do služby v Editor Power Query přidejte do ProductKey sloupce další filtr, který vyfiltruje jakoukoli jinou hodnotu než 0, a to efektivně nebo vyfiltruje všechna data z tabulky FactInternetSales.

Screenshot shows the Power Query Editor with code that filters out the product key.

Po výběru možnosti Zavřít a použít v Editor Power Query, definování zásad přírůstkové aktualizace a uložení modelu se model publikuje do služby. Ze služby se na modelu spustí operace počáteční aktualizace. Oddíly pro tabulku FactInternetSales se vytvářejí podle zásad, ale žádná data se nenačtou a zpracovávají, protože všechna data se odfiltrují.

Po dokončení počáteční operace aktualizace se druhý filtr ProductKey ve sloupci odebere zpět v Editor Power Query. Po výběru možnosti Zavřít a použít v Editor Power Query a uložení modelu se model znovu nepublikuje. Pokud je model znovu publikovaný, přepíše nastavení zásad přírůstkové aktualizace a při následné operaci aktualizace ze služby vynutí úplnou aktualizaci modelu. Místo toho proveďte nasazení pouze metadat pomocí sady nástrojů ALM (Application Lifecycle Management), která odebere filtr sloupce ProductKey z modelu. SSMS se pak dá použít k selektivnímu zpracování oddílů. Pokud byly všechny oddíly plně zpracovány, které musí zahrnovat přepočítání procesu ve všech oddílech ze služby SSMS, následné operace aktualizace modelu z aktualizace služby pouze oddíly přírůstkové aktualizace.

Tip

Nezapomeňte se podívat na videa, blogy a další informace, které poskytuje komunita odborníků na BI v Power BI.

Další informace o zpracování tabulek a oddílů ze služby SSMS najdete v tématu Zpracování databáze, tabulky nebo oddílů (Analysis Services). Další informace o zpracování modelů, tabulek a oddílů pomocí TMSL najdete v tématu Příkaz Aktualizovat (TMSL).

Vlastní dotazy pro zjišťování změn dat

TMSL a TOM je možné použít k přepsání chování zjištěných změn dat. Tuto metodu lze použít nejen k tomu, aby se zabránilo zachování sloupce poslední aktualizace v mezipaměti v paměti, ale může to umožnit scénáře, kdy je konfigurace nebo tabulka instrukcí připravená procesy extrakce, transformace a načítání (ETL) pro označení pouze oddílů, které je potřeba aktualizovat. Tato metoda může vytvořit efektivnější proces přírůstkové aktualizace, kdy se aktualizují pouze požadovaná období bez ohledu na to, jak dlouho proběhly aktualizace dat.

pollingExpression být jednoduchým výrazem M nebo názvem jiného dotazu M. Musí vrátit skalární hodnotu a spustí se pro každý oddíl. Pokud se vrácená hodnota liší od hodnoty, ke které došlo při posledním přírůstkové aktualizaci, oddíl se označí příznakem pro úplné zpracování.

Následující příklad zahrnuje všech 120 měsíců v historickém období pro zastaralé změny. Určení 120 měsíců místo 10 let znamená, že komprese dat nemusí být tak efektivní, ale nemusí se aktualizovat celý historický rok, což by bylo dražší, když by měsíc stačil pro zastaralou změnu.

"refreshPolicy": {
    "policyType": "basic",
    "rollingWindowGranularity": "month",
    "rollingWindowPeriods": 120,
    "incrementalGranularity": "month",
    "incrementalPeriods": 120,
    "pollingExpression": "<M expression or name of custom polling query>",
    "sourceExpression": [
    "let ..."
    ]
}

Tip

Nezapomeňte se podívat na videa, blogy a další informace, které poskytuje komunita odborníků na BI v Power BI.

Nasazení pouze metadat

Při publikování nové verze souboru .pbix z Power BI Desktopu do pracovního prostoru, pokud už existuje model se stejným názvem, zobrazí se výzva k nahrazení existujícího modelu.

Screenshot shows the Replace model dialog.

V některých případech možná nebudete chtít model nahradit, zejména přírůstkovou aktualizací. Model v Power BI Desktopu může být mnohem menší než model v služba Power BI. Pokud má model v služba Power BI použitou zásadu přírůstkové aktualizace, může mít několik let historických dat, která budou ztracena, pokud je model nahrazen. Aktualizace všech historických dat může trvat hodiny a způsobit výpadky systému pro uživatele.

Místo toho je lepší provést pouze nasazení metadat, které umožňuje nasazení nových objektů bez ztráty historických dat. Pokud jste například přidali několik měr, můžete nasadit pouze nové míry, aniž byste museli aktualizovat data, což šetří čas.

U pracovních prostorů přiřazených ke kapacitě Premium nakonfigurované pro čtení a zápis koncového bodu XMLA umožňují kompatibilní nástroje pouze nasazení metadat. Alm Toolkit je například nástroj pro rozdíl schématu pro modely Power BI a dá se použít pouze k nasazení metadat.

Stáhněte a nainstalujte nejnovější verzi sady ALM Toolkit z úložiště Git služby Analysis Services. Podrobné pokyny k používání sady ALM Toolkit nejsou součástí dokumentace Microsoftu. Odkazy na dokumentaci k sadě ALM Toolkit a informace o možnostech podpory jsou k dispozici na pásu karet nápovědy . Pokud chcete provést pouze nasazení metadat, proveďte porovnání a vyberte spuštěnou instanci Power BI Desktopu jako zdroj a existující model v služba Power BI jako cíl. Zvažte zobrazené rozdíly a přeskočte aktualizaci tabulky s oddíly přírůstkové aktualizace nebo pomocí dialogového okna Možnosti zachovejte oddíly pro aktualizace tabulek. Ověřte výběr, abyste zajistili integritu cílového modelu, a pak aktualizujte.

Screenshot shows the ALM Toolkit window.

Programové přidání zásad přírůstkové aktualizace a dat v reálném čase

Pomocí TMSL a TOM můžete také přidat zásadu přírůstkové aktualizace do existujícího modelu prostřednictvím koncového bodu XMLA.

Poznámka:

Abyste se vyhnuli problémům s kompatibilitou, ujistěte se, že používáte nejnovější verzi klientských knihoven služby Analysis Services. Pokud například chcete pracovat se zásadami hybridního nasazení, musí být verze 19.27.1.8 nebo vyšší.

Tento proces zahrnuje následující kroky:

  1. Ujistěte se, že cílový model má požadovanou minimální úroveň kompatibility. V nástroji SSMS klikněte pravým tlačítkem na úroveň kompatibility [název modelu]>Vlastnosti>. Pokud chcete zvýšit úroveň kompatibility, použijte buď skript createOrReplace TMSL, nebo si projděte následující ukázkový kód TOM.

    a. Import policy - 1550
    b. Hybrid policy - 1565
    
  2. Přidejte parametry RangeStartRangeEnd do výrazů modelu. V případě potřeby přidejte také funkci pro převod hodnot data a času na klíče kalendářních dat.

  3. RefreshPolicy Definujte objekt s požadovaným archivačním (posuvným oknem) a obdobími přírůstkové aktualizace a zdrojovým výrazem, který filtruje cílovou tabulku na RangeStart základě parametrů a RangeEnd parametrů. V závislosti na požadavcích na data v reálném čase nastavte režim zásad aktualizace na import nebo hybridní režim. Hybrid způsobí, že Power BI přidá do tabulky oddíl DirectQuery, aby načítá nejnovější změny ze zdroje dat, ke kterému došlo po poslední aktualizaci.

  4. Přidejte do tabulky zásady aktualizace a proveďte úplnou aktualizaci, aby Power BI rozdělil tabulku podle vašich požadavků.

Následující ukázka kódu ukazuje, jak provést předchozí kroky pomocí TOM. Pokud chcete použít tuto ukázku tak, jak je, musíte mít kopii pro databázi AdventureWorksDW a importovat tabulku FactInternetSales do modelu. Ukázka kódu předpokládá, že RangeStart v modelu neexistují parametry a RangeEndDateKey funkce. Stačí naimportovat tabulku FactInternetSales a publikovat model do pracovního prostoru v Power BI Premium. Potom aktualizujte workspaceUrl vzorový kód, aby se mohl připojit k vašemu modelu. Podle potřeby aktualizujte další řádky kódu.

using System;
using TOM = Microsoft.AnalysisServices.Tabular;
namespace Hybrid_Tables
{
    class Program
    {
        static string workspaceUrl = "<Enter your Workspace URL here>";
        static string databaseName = "AdventureWorks";
        static string tableName = "FactInternetSales";
        static void Main(string[] args)
        {
            using (var server = new TOM.Server())
            {
                // Connect to the dataset.
                server.Connect(workspaceUrl);
                TOM.Database database = server.Databases.FindByName(databaseName);
                if (database == null)
                {
                    throw new ApplicationException("Database cannot be found!");
                }
                if(database.CompatibilityLevel < 1565)
                {
                    database.CompatibilityLevel = 1565;
                    database.Update();
                }
                TOM.Model model = database.Model;
                // Add RangeStart, RangeEnd, and DateKey function.
                model.Expressions.Add(new TOM.NamedExpression {
                    Name = "RangeStart",
                    Kind = TOM.ExpressionKind.M,
                    Expression = "#datetime(2021, 12, 30, 0, 0, 0) meta [IsParameterQuery=true, Type=\"DateTime\", IsParameterQueryRequired=true]"
                });
                model.Expressions.Add(new TOM.NamedExpression
                {
                    Name = "RangeEnd",
                    Kind = TOM.ExpressionKind.M,
                    Expression = "#datetime(2021, 12, 31, 0, 0, 0) meta [IsParameterQuery=true, Type=\"DateTime\", IsParameterQueryRequired=true]"
                });
                model.Expressions.Add(new TOM.NamedExpression
                {
                    Name = "DateKey",
                    Kind = TOM.ExpressionKind.M,
                    Expression =
                        "let\n" +
                        "    Source = (x as datetime) => Date.Year(x)*10000 + Date.Month(x)*100 + Date.Day(x)\n" +
                        "in\n" +
                        "    Source"
                });
                // Apply a RefreshPolicy with Real-Time to the target table.
                TOM.Table salesTable = model.Tables[tableName];
                TOM.RefreshPolicy hybridPolicy = new TOM.BasicRefreshPolicy
                {
                    Mode = TOM.RefreshPolicyMode.Hybrid,
                    IncrementalPeriodsOffset = -1,
                    RollingWindowPeriods = 1,
                    RollingWindowGranularity = TOM.RefreshGranularityType.Year,
                    IncrementalPeriods = 1,
                    IncrementalGranularity = TOM.RefreshGranularityType.Day,
                    SourceExpression =
                        "let\n" +
                        "    Source = Sql.Database(\"demopm.database.windows.net\", \"AdventureWorksDW\"),\n" +
                        "    dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data],\n" +
                        "    #\"Filtered Rows\" = Table.SelectRows(dbo_FactInternetSales, each [OrderDateKey] >= DateKey(RangeStart) and [OrderDateKey] < DateKey(RangeEnd))\n" +
                        "in\n" +
                        "    #\"Filtered Rows\""
                };
                salesTable.RefreshPolicy = hybridPolicy;
                model.RequestRefresh(TOM.RefreshType.Full);
                model.SaveChanges();
            }
            Console.WriteLine("{0}{1}", Environment.NewLine, "Press [Enter] to exit...");
            Console.ReadLine();
        }
    }
}