Zdieľať cez


Rozšírené prírastkové obnovenie a údaje v reálnom čase s koncovým bodom XMLA

Sémantické modely v kapacite Premium s povoleným koncovým bodom XMLA pre operácie čítania a zapisovania umožňujú pokročilejšie obnovovanie, správu oblasti a nasadenia metaúdajov iba prostredníctvom nástrojov, skriptovania a podpory rozhrania API. Okrem toho nie sú operácie obnovenia cez koncový bod XMLA obmedzené na 48 obnovení na deň a nie je stanovené obmedzenie plánovaného obnovenia.

Oblasti

Oblasti tabuľky sémantických modelov nie sú viditeľné a nemožno ich spravovať pomocou aplikácie Power BI Desktop alebo služba Power BI. V prípade modelov v pracovnom priestore priradenom ku kapacite Premium možno oblasti spravovať prostredníctvom koncového bodu XMLA pomocou nástrojov, ako je SQL Server Management Studio (SSMS), opensourceový tabuľkový editor, skriptovaný pomocou jazyka na skriptovanie tabuľkového modelu (TMSL) a programovo s tabuľkovým objektovým modelom (TOM).

Pri prvom publikovaní modelu do služba Power BI má každá tabuľka v novom modeli jednu oblasť. V prípade tabuliek bez politiky prírastkového obnovenia obsahuje táto jedna oblasť všetky riadky údajov pre danú tabuľku, pokiaľ neboli použité filtre. V prípade tabuliek s politikou prírastkového obnovenia existuje iba jedna počiatočná oblasť, pretože služba Power BI ešte nepoužila politiku. Počiatočnú oblasť môžete nakonfigurovať v aplikácii Power BI Desktop pri definovaní filtra rozsahu dátumu a času pre tabuľku RangeStart na základe parametrov a RangeEnd a všetkých ďalších filtrov použitých v Editor Power Query. Táto počiatočná oblasť obsahuje iba tie riadky s údajmi, ktoré spĺňajú vaše kritériá filtra.

Keď vykonáte prvú operáciu obnovenia, tabuľky bez politiky prírastkového obnovenia obnovia všetky riadky obsiahnuté v predvolenom jedinom oblastí danej tabuľky. V prípade tabuliek s politikou prírastkového obnovenia sa obnova a historické oblasti vytvoria automaticky a riadky sa do nich načítajú podľa dátumu a času pre každý riadok. Ak politika prírastkového obnovenia zahŕňa získavanie údajov v reálnom čase, Power BI tiež pridá do tabuľky oblasť DirectQuery.

Táto prvá operácia obnovenia môže trvať pomerne dlho v závislosti od množstva údajov, ktoré je potrebné načítať zo zdroja údajov. Zložitosť modelu môže byť tiež dôležitým faktorom, pretože operácie obnovenia musia vykonať viac spracovania a prepočítania. Túto operáciu je možné spustiť. Ďalšie informácie nájdete v téme Zabránenie časovým limitom pri počiatočnom úplnom obnovení.

Oblasti sa vytvárajú pre a pomenované podľa granularity obdobia: Roky, štvrťroky, mesiace a dni. Posledné oblasti, oblasti obnovenia , obsahujú riadky v období obnovenia, ktoré zadáte v politike. Historické oblasti obsahujú riadky podľa dokončeného obdobia až do obdobia obnovenia. Ak je v reálnom čase povolená, oblasť DirectQuery vyberie všetky zmeny údajov, ktoré boli vykonané po dátume ukončenia obdobia obnovenia. Granularita pre obnovenie a historické oblasti závisí od období obnovenia a historických období (obchodu), ktoré si vyberiete pri definovaní politiky.

Ak je napríklad dnešný dátum 2. februára 2021 a naša tabuľka FactInternetSales v zdroji údajov obsahuje riadky až do dnes, ak naša politika určí zahrnutie zmien v reálnom čase, obnovenie riadkov v poslednom jednodňovom období obnovenia a uloženie riadkov za posledné tri roky historického obdobia. Pri prvej operácii obnovenia sa potom vytvorí oblasť DirectQuery pre zmeny v budúcnosti, pre dnešné riadky sa vytvorí nová oblasť importu, historická oblasť sa vytvorí na včera, celé obdobie dňa, 1. februára 2021. Vytvorí sa historická oblasť za obdobie predchádzajúceho celého mesiaca (január 2021), vytvorí sa historická oblasť za predchádzajúce obdobie celého roka (2020) a vytvoria sa historické oblasti za roky 2019 a 2018. Nevytvorili sa žiadne oblasti celého štvrťroka, pretože sme ešte nedokončili prvý celý štvrťrok 2021.

Diagram shows the partition naming granularity described in the text.

Pri každej operácii obnovenia sa obnovia iba oblasti obdobia obnovenia a aktualizuje sa filter dátumov oblasti DirectQuery tak, aby zahŕňal iba tie zmeny, ktoré sa vyskytujú po aktuálnom období obnovenia. Pre nové riadky s novým dátumom a časom v rámci aktualizovaného obdobia obnovenia sa vytvorí nová oblasť obnovenia a existujúce riadky s dátumom a časom, ktoré už sú v rámci existujúcich oblastí v období obnovenia, sa obnovia aktualizáciami. Riadky s dátumom a časom starším ako obdobie obnovenia sa už neobnovujú.

Keď sa celé obdobia zatvoria, oblasti sa zlúčia. Ak je napríklad v politike zadané jednodňové obdobie obnovenia a trojročné historické obdobie úložiska, v prvý deň v mesiaci sa oblasti všetkých dní pre predchádzajúci mesiac zlúčia do oblasti mesiaca. V prvý deň nového štvrťroka sa všetky tri oblasti predchádzajúceho mesiaca zlúčia do oblasti štvrťroka. V prvý deň nového roka sa všetky štyri oblasti predchádzajúceho štvrťroka zlúčia do oblasti roka.

Model vždy zachová oblasti pre celé obdobie historického obchodu plus oblasti celého obdobia až do aktuálneho obdobia obnovenia. V príklade sa v oblasti za rok 2018, 2019, 2020 a tiež oblasti za obdobie 2021Q101 (2021Q101) uchovávajú celé tri roky historických údajov, a tiež oblasti pre obdobie 2021Q101 (mesiac), obdobie 2021Q10201 a oblasť aktuálneho dňa obdobia obnovenia. Keďže v príklade sa zachovajú historické údaje za tri roky, oblasť 2018 sa zachová až do prvého obnovenia 1. januára 2022.

Pomocou prírastkového obnovenia služby Power BI a údajov v reálnom čase služba spracováva správu oblasti za vás na základe politiky. Zatiaľ čo služba dokáže spracovať všetky oblasti spravovania za vás, pomocou nástrojov prostredníctvom koncového bodu XMLA, môžete selektívne obnoviť oblasti jednotlivo, v príslušnom poradí alebo paralelne.

Správa obnovovania pomocou nástroja SQL Server Management Studio

SQL Server Management Studio (SSMS) možno použiť na zobrazenie a spravovanie oblastí vytvorených použitím politík prírastkového obnovenia. Pomocou nástroja SSMS môžete napríklad obnoviť konkrétnu historickú oblasť, ktorá nie je v období prírastkového obnovenia, a vykonať spätnú aktualizáciu bez potreby obnovenia všetkých historických údajov. SSMS možno použiť aj pri spúšťaní spustenia s cieľom načítať historické údaje pre veľké modely prírastkovým pridávaním/obnovením historických oblastí v dávkach.

Screenshot shows the Partitions window in SSMS.

Prepísanie správania prírastkového obnovenia

S nástrojom SSMS máte tiež väčšiu kontrolu nad tým, ako vyvolať obnovenia pomocou jazyka na skriptovanie tabuľkového modelu a tabuľkového objektového modelu. V nástroji SSMS môžete napríklad v Časti Object Explorer kliknúť pravým tlačidlom myši na tabuľku, vybrať možnosť ponuky Spracovať tabuľku a potom vybrať tlačidlo Skript a vygenerovať príkaz na obnovenie TMSL.

Screenshot shows the Script button in Process Table dialog.

Tieto parametre možno použiť s príkazom na obnovenie TMSL na prepísanie predvoleného správania prírastkového obnovenia:

  • applyRefreshPolicy. Ak má tabuľka definovanú politiku prírastkového obnovenia, určí, applyRefreshPolicy či sa politika použije alebo nie. Ak sa politika nepoužije, proces v rámci úplnej operácie ponechá definície oblastí nezmenené a všetky oblasti v tabuľke sa úplne obnovia. Predvolená hodnota je True.

  • effectiveDate. Ak sa používa politika prírastkového obnovenia, potrebuje poznať aktuálny dátum a určiť rozsahy posuvného okna pre prírastkové obnovenie a historické obdobia. Tento effectiveDate parameter vám umožňuje prepísať aktuálny dátum. Tento parameter je užitočný pri testovaní, ukážkach a obchodných scenároch, keď sa údaje prírastkovo obnovujú k dátumu v minulosti alebo budúcnosti, napríklad v prípade budúcich rozpočtov. Predvolená hodnota je aktuálny dátum.

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

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

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

Ďalšie informácie o prepísaní predvoleného správania prírastkového obnovenia pomocou TMSL nájdete v téme Príkaz na obnovenie.

Zabezpečenie optimálneho výkonu

Pri každej operácii obnovenia môže služba Power BI odoslať inicializačné dotazy do zdroja údajov pre každú oblasť prírastkového obnovenia. Výkon prírastkového obnovenia môžete zvýšiť znížením počtu inicializačných dotazov zabezpečením nasledujúcej konfigurácie:

  • Tabuľka, pre ktorú nakonfigurujete prírastkové obnovenie, by mala získavať údaje z jedného zdroja údajov. Ak tabuľka získa údaje z viac ako jedného zdroja údajov, počet dotazov odoslaných službou pre každú operáciu obnovenia sa vynásobí počtom zdrojov údajov, čo môže znížiť výkon obnovenia. Uistite sa, že dotaz na tabuľku prírastkového obnovenia je pre jeden zdroj údajov.
  • V prípade riešení s prírastkovým obnovením oblastí importu a údajov v reálnom čase pomocou priameho dotazu musia všetky oblasti dotazovať údaje z jedného zdroja údajov.
  • Ak to umožňujú vaše požiadavky zabezpečenia, nastavte úroveň ochrany osobných údajov zdroja údajov na možnosť Organizačné alebo Verejné. Úroveň ochrany osobných údajov je predvolene súkromná, ale táto úroveň môže zabrániť výmene údajov s inými cloudovými zdrojmi. Ak chcete nastaviť úroveň ochrany osobných údajov, vyberte ponuku Ďalšie možnosti a potom vyberte Nastavenia> P>poverenia zdroja údajov Upraviť poverenia>Nastavenie úrovne ochrany osobných údajov pre tento zdroj údajov. Ak je úroveň ochrany osobných údajov nastavená v modeli aplikácie Power BI Desktop pred publikovaním do služby, po publikovaní sa do služby neprenesie. Stále ho musíte nastaviť v sémantických nastaveniach modelu v službe. Ďalšie informácie nájdete v téme Úrovne ochrany osobných údajov.
  • Ak používate lokálnu bránu údajov, uistite sa, že používate verziu 3000.77.3 alebo vyššiu.

Zabránenie časovým limitom pri úplnom obnovení počiatočného obnovenia

Po publikovaní do služba Power BI vytvorí počiatočná operácia úplného obnovenia pre model oblasti pre tabuľku prírastkového obnovenia, načíta a spracuje historické údaje za celé obdobie definované v politike prírastkového obnovenia. V prípade niektorých modelov, ktoré načítavajú a spracovávaujú veľké množstvo údajov, môže čas, ktorý trvá počiatočná operácia obnovenia, prekročiť limit času obnovenia stanovený službou alebo časový limit dotazu stanovený zdrojom údajov.

Spustenie počiatočnej operácie obnovenia umožňuje službe vytvoriť objekty oblasti pre tabuľku prírastkového obnovenia, ale nenačítavať a spracovávať historické údaje do žiadnej z oblastí. SSMS sa potom použije na selektívne spracovanie oblastí. V závislosti od množstva údajov, ktoré sa majú načítať pre každú oblasť, môžete spracovať každú oblasť postupne alebo v malých dávkach, čím sa zníži potenciál pre jednu alebo viacero z týchto oblastí, čo spôsobí časový limit. Pre akýkoľvek zdroj údajov fungujú nasledujúce metódy.

Použitie politiky obnovenia

Nástroj Tabular Editor 2 typu open-source poskytuje jednoduchý spôsob, ako spustiť počiatočnú operáciu obnovenia. Po publikovaní modelu s politikou prírastkového obnovenia, ktorá je preň definovaná z aplikácie Power BI Desktop do služby, sa pripojte k modelu pomocou koncového bodu XMLA v režime čítania a zapisovania. V tabuľke prírastkového obnovenia spustite položku Použiť politiku obnovenia. Keď je použitá len politika, oblasti sa vytvoria, ale žiadne údaje sa do nich nenačítajú. Potom sa pripojte pomocou nástroja SSMS a obnovte oblasti postupne alebo v dávkach, aby sa načítali a spracovali údaje. Ďalšie informácie nájdete v téme Prírastkové obnovenie v dokumentácii nástroja Tabular Editor.

Screenshot show the Tabular Editor with Apply Refresh Policy selected.

Filter Power Query pre prázdne oblasti

Pred publikovaním modelu do služby v Editor Power Query pridajte ďalší filter do ProductKey stĺpca, ktorý filtruje ľubovoľnú hodnotu inú ako 0 alebo odfiltruje všetky údaje z tabuľky FactInternetSales.

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

Po výbere možnosti Zavrieť a použiť v Editor Power Query, definovaní politiky prírastkového obnovenia a uložení modelu sa model publikuje v službe. V službe sa v modeli spustí počiatočná operácia obnovenia. Oblasti pre tabuľku FactInternetSales sa vytvárajú podľa politiky, ale žiadne údaje sa nenačítajú a nespracujú, pretože sa odfiltrujú všetky údaje.

Po dokončení počiatočnej operácie obnovenia sa znova do Editor Power Query odstráni ďalší filter v ProductKey stĺpci. Po výbere možnosti Zavrieť a použiť v Editor Power Query a uložení modelu sa model už nepublikuje. Ak sa model znova publikuje, prepíšu sa nastavenia politiky prírastkového obnovenia a vynúti úplné obnovenie modelu pri následnej operácii obnovenia zo služby. Namiesto toho vykonajte nasadenie iba metaúdajov pomocou súpravy nástrojov správy životného cyklu aplikácie (ALM), ktorá odstráni filter v ProductKey stĺpci z modelu. SSMS sa potom môže použiť na selektívne spracovanie oblastí. Keď sú všetky oblasti úplne spracované, ktoré musia obsahovať prepočítanie procesu pre všetky oblasti z SSMS, následné operácie obnovenia modelu z obnovenia služby iba oblastí prírastkového obnovenia.

Prepitné

Nezabudnite si pozrieť videá, blogy a ďalšie informácie, ktoré poskytuje komunita odborníkov služby Power BI venujúcou sa službe BI.

Ďalšie informácie o spracovaní tabuliek a oblastí z nástroja SSMS nájdete v téme Databáza procesov, Tabuľka alebo Oblasti (Analysis Services). Ďalšie informácie o spracovaní modelov, tabuliek a oblastí pomocou TMSL nájdete v téme Príkaz na obnovenie (TMSL).

Vlastné dotazy na zisťovanie zmien údajov

Funkcie TMSL a TOM možno použiť na prepísanie správania pri zisťovaní zmien údajov. Táto metóda sa dá použiť nielen na to, aby sa zabránilo trvalému stĺpcu poslednej aktualizácie vo vyrovnávacej pamäti, ale tiež umožňuje scenáre, v ktorých je tabuľka konfigurácie alebo inštrukcií pripravená procesmi extrahovania, transformácie a načítania (ETL), aby sa označovali iba oblasti, ktoré je potrebné obnoviť. Táto metóda môže vytvoriť efektívnejší proces prírastkového obnovenia, v ktorom sa obnovujú iba požadované obdobia bez ohľadu na to, ako dávno sa vykonali aktualizácie údajov.

pollingExpression Má ísť o ľahký výraz M alebo názov iného dotazu M. Musí vrátiť skalárnu hodnotu a bude sa vykonávať pre každú oblasť. Ak sa vrátená hodnota líši od poslednej hodnoty prírastkového obnovenia, oblasť sa označí na úplné spracovanie.

Nasledujúci príklad zahŕňa všetkých 120 mesiacov v historickom období pre spätné zmeny. Ak zadáte 120 mesiacov namiesto 10 rokov, kompresia údajov nemusí byť tak efektívna, ale vyhnete sa tým obnoveniu celého historického roka, čo by bolo nákladnejšie v prípade, že by na spätnú zmenu stačil mesiac.

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

Prepitné

Nezabudnite si pozrieť videá, blogy a ďalšie informácie, ktoré poskytuje komunita odborníkov služby Power BI venujúcou sa službe BI.

Nasadenie iba metaúdajov

Pri publikovaní novej verzie súboru .pbix z aplikácie Power BI Desktop do pracovného priestoru, ak už existuje model s rovnakým názvom, zobrazí sa výzva na nahradenie existujúceho modelu.

Screenshot shows the Replace model dialog.

V niektorých prípadoch možno nebudete chcieť nahradiť model, a to najmä prírastkovým obnovením. Model v aplikácii Power BI Desktop môže byť oveľa menší ako model v služba Power BI. Ak má model v služba Power BI použitú politiku prírastkového obnovenia, môže mať niekoľko rokov historických údajov, ktoré sa po nahradení modelu stratia. Obnovenie všetkých historických údajov môže trvať hodiny a spôsobiť výpadok systému pre používateľov.

Namiesto toho je lepšie nasadiť iba metaúdaje, čo umožňuje nasadenie nových objektov bez straty historických údajov. Ak ste napríklad pridali niekoľko mierok, môžete nasadiť iba nové mierky bez potreby obnovenia údajov, čím ušetríte čas.

V prípade pracovných priestorov priradených ku kapacite Premium nakonfigurovanej pre koncový bod XMLA na čítanie a zapisovanie umožňujú kompatibilné nástroje nasadenie iba metaúdajov. Napríklad nástroj ALM Toolkit je určený na rozdiel od schém v modeloch Power BI a je možné ho použiť na nasadenie iba metaúdajov.

Najnovšiu verziu nástroja ALM Toolkit si môžete stiahnuť a nainštalovať z odkladacieho priestoru Git Analysis Services. Podrobné pokyny na používanie nástroja ALM Toolkit nie sú súčasťou dokumentácie spoločnosti Microsoft. Prepojenia na dokumentáciu k nástroju ALM Toolkit a informácie o podpore sú k dispozícii na páse s nástrojmi Pomocníka . Ak chcete nasadiť iba metaúdaje, vykonajte porovnanie a vyberte spustenú inštanciu aplikácie Power BI Desktop ako zdroj a existujúci model v služba Power BI ako cieľ. Zvážte zobrazené rozdiely a vynechajte aktualizáciu tabuľky s oblasťami prírastkového obnovenia alebo použite dialógové okno Možnosti na zachovanie oblastí pre aktualizácie tabuľky. Overte výber, aby sa zaistila integrita cieľového modelu a potom ho aktualizujte.

Screenshot shows the ALM Toolkit window.

Pridanie politiky prírastkového obnovenia a údajov v reálnom čase pomocou programovania

Môžete tiež použiť TMSL a TOM na pridanie politiky prírastkového obnovenia do existujúceho modelu prostredníctvom koncového bodu XMLA.

Poznámka

Ak sa chcete vyhnúť problémom s kompatibilitou, uistite sa, že používate najnovšiu verziu klientskych knižníc služby Analysis Services. Ak chcete napríklad pracovať s politikami hybridných verzií, verzia musí byť vo verzii 19.27.1.8 alebo novšej.

Proces zahŕňa nasledujúce kroky:

  1. Skontrolujte, či cieľový model má požadovanú minimálnu úroveň kompatibility. V nástroji SSMS kliknite pravým tlačidlom myši na položku [názov modelu]>Úroveň kompatibility vlastností.> Ak chcete zvýšiť úroveň kompatibility, použite napríklad skript createOrReplace TMSL alebo skontrolujte nasledujúci vzorový kód TOM.

    a. Import policy - 1550
    b. Hybrid policy - 1565
    
  2. RangeStart Pridajte parametre a RangeEnd do modelových výrazov. Ak je to potrebné, pridajte tiež funkciu na konverziu hodnôt dátumu a času na kľúče dátumov.

  3. RefreshPolicy Definujte objekt s požadovanou archivovanou tabuľkou (posuvné okno) a obdobiami prírastkového obnovenia, ako aj zdrojový výraz, ktorý filtruje cieľovú tabuľku RangeStart na základe parametrov a RangeEnd . Nastavte režim politiky obnovovania na režim Import alebo Hybridné v závislosti od požiadaviek na údaje v reálnom čase. Hybridné prostredie spôsobí, že Power BI pridá do tabuľky oblasť DirectQuery, čím sa načítanie najnovších zmien zo zdroja údajov, ku ktorým došlo po poslednom čase obnovenia.

  4. Pridajte politiku obnovenia do tabuľky a vykonajte úplné obnovenie tak, aby služba Power BI rozdelila tabuľku podľa vašich požiadaviek.

Nasledujúca ukážka kódu ukazuje, ako vykonať predchádzajúce kroky pomocou modelu TOM. Ak chcete túto ukážku použiť tak, ako je, musíte mať kópiu pre databázu AdventureWorksDW a importovať tabuľku FactInternetSales do modelu. Ukážka kódu predpokladá, že RangeStart parametre a RangeEnd a funkcia v modeli DateKey neexistujú. Stačí importovať tabuľku FactInternetSales a publikovať model do pracovného priestoru v službe Power BI Premium. Potom aktualizujte vzorku workspaceUrl kódu, aby sa mohla pripojiť k vášmu modelu. Podľa potreby aktualizujte všetky ďalšie riadky 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();
        }
    }
}