Limiteaza cantitatea de date cu care lucrezi in Power BI Desktop.

  1. Problema
  2. Soluția
  3. Ghid pas cu pas pentru soluție
  4. Concluzie

Problema

Atunci când folosești Power BI în modul Import, datele sunt încărcate în motorul VertiPaq, care le stochează în memorie pentru a permite interogări rapide și performanță eficientă.

În Power BI Desktop, motorul VertiPaq încarcă structurile de date în memoria RAM a computerului pe care rulează instanța Power BI Desktop. Acest lucru înseamnă că dimensiunea maximă a unui model care poate fi deschis și procesat pe un computer este limitată de cantitatea de memorie RAM disponibilă pe acel dispozitiv.

Când modelele sunt publicate în Power BI Service, constrângerile de resurse depind de nivelul de capacitate al workspace-ului (de exemplu, capacitate partajată sau capacitate Premium dedicată), permițând seturi de date mai mari decât cele posibile pe un desktop.


Soluția

O soluție pentru a aborda constrângerile de memorie în timpul lucrului în Power BI Desktop este operarea pe un subset de date. Această abordare oferă un echilibru între performanță bună și o înțelegere eficientă a distribuției datelor.

Beneficii:

  • Performanță îmbunătățită: Încărcarea unei părți mai mici de date asigură că motorul VertiPaq nu depășește memoria RAM disponibilă, ducând la o operare mai fluidă.
  • Dezvoltare mai rapidă: Seturile de date mai mici reduc timpii de reîmprospătare a modelului și permit iterări rapide în timpul dezvoltării.
  • Informații suficiente: Un subset bine ales este, de obicei, suficient de mare pentru a reflecta distribuția datelor, modelele și relațiile din întregul set de date.

Este necesar să stabilim o metodă de filtrare a numărului de rânduri în Power BI Desktop, astfel încât limita să poată fi eliminată cu ușurință odată ce raportul este publicat în serviciu.


Ghid pas cu pas pentru soluție

În Power Query, poți limita numărul de rânduri la un anumit număr utilizând butonul Keep Top Rows din interfață sau funcția Table.FirstN în cod.

Avem următorul tabel, care conține 7,2 milioane de rânduri.

Lucrul cu tabele mari în Power BI Desktop poate cauza probleme de performanță, cum ar fi răspuns lent și timpi extinși de reîmprospătare.

Pasul 1. Aplică Keep Top Rows
Pentru a atenua aceste probleme, poți utiliza funcția Keep Top Rows din Power Query pentru a limita datele importate în Power BI Desktop la un subset gestionabil, de exemplu, 10.000 de rânduri.

Aceasta actiune va încărca doar 10.000 de rânduri în model, așa cum se poate vedea în captura de ecran de mai jos.

Limitarea rândurilor în Power BI Desktop introduce o nouă provocare: odată ce setul de date este publicat în Power BI Service, întregul set de date ar trebui încărcat, nu doar subsetul (de exemplu, 10.000 de rânduri). În interogarea M actuală, limita de rânduri este hard-codata:

let
        Source = Sql.Databases("xcskumxz64ou7k5zoh7otlstku-pqoifnorulsuxk4dleru4rmufm.datamart.fabric.microsoft.com"),
        db_powerbiprodemea_20230426_08410224_0266 = Source{[Name="db_powerbiprodemea_20230426_08410224_0266"]}[Data],
        model_Sales = db_powerbiprodemea_20230426_08410224_0266{[Schema="model",Item="Sales"]}[Data],
        #"Kept_First Rows" = Table.FirstN(model_Sales, 10000)
    in
        #"Kept First Rows"

Actualizarea interogării M în Power BI Service este dificil de realizat, iar modificările folosind endpoint-ul XMLA fac ca modelul semantic să nu mai poată fi apoi descărcat de pe Power Bi Service.

Pentru a rezolva această problemă, ar trebui să parametrizăm numărul de rânduri, oferind flexibilitate atat in Power BI Desktop cat și Service. Un parametru poate fi setat pentru a limita rândurile în timpul dezvoltării în Desktop, permițând în același timp încărcarea completă a datelor în Service.

Pasul 2. Creează parametrul TopN pentru interogare

Pasul 3. Utilizează parametrul TopN în interogarea M
În editorul avansat sau bara de formule, înlocuiește valoarea codificată direct din Table.FirstN() cu parametrul de interogare creat la pasul 2.

    let
        Source = Sql.Databases("xcskumxz64ou7k5zoh7otlstku-pqoifnorulsuxk4dleru4rmufm.datamart.fabric.microsoft.com"),
        db_powerbiprodemea_20230426_08410224_0266 = Source{[Name="db_powerbiprodemea_20230426_08410224_0266"]}[Data],
        model_Sales = db_powerbiprodemea_20230426_08410224_0266{[Schema="model",Item="Sales"]}[Data],
        #"Kept_First Rows" = Table.FirstN(model_Sales, TopN)
    in
        #"Kept First Rows"

Acum, putem schimba cu ușurință valoarea numărului de rânduri pe care dorim să le încărcăm, atât în Power BI Desktop, cât și în Power BI Service.

și în Power BI Service, după publicare.

Pasul 4. Configurarea „tuturor rândurilor”
Soluția încă nu este completă. Provocarea rămasă este determinarea valorii care trebuie utilizată în Power BI Service pentru a afișa toate rândurile, având în vedere că numărul total de rânduri din tabel poate varia în timp.

Pentru a rezolva acest lucru, putem stabili o convenție pentru un număr de utilizat atunci când încărcăm toate rândurile, înfășurat într-o instrucțiune IF. Acest lucru ne va permite să ajustăm dinamic limita de rânduri în funcție de dimensiunea datelor.

În ultimul pas pentru filtrarea numărului de rânduri, adăugăm instrucțiunea IF: if TopN = -1 then model_Sales else Table.FirstN(model_Sales, TopN)

let
       Source = Sql.Databases("xcskumxz64ou7k5zoh7otlstku-pqoifnorulsuxk4dleru4rmufm.datamart.fabric.microsoft.com"),
       db_powerbiprodemea_20230426_08410224_0266 = Source{[Name="db_powerbiprodemea_20230426_08410224_0266"]}[Data],
       model_Sales = db_powerbiprodemea_20230426_08410224_0266{[Schema="model",Item="Sales"]}[Data],
       #"Kept_First Rows" = if TopN = -1 then model_Sales else Table.FirstN(model_Sales,TopN)
   in
       #"Kept First Rows"

Odată ce schimbăm valoarea parametrului TopN la -1, putem observa că toate cele 7,2 milioane de rânduri sunt încărcate.


Concluzie

Urmează acest proces:

  1. Creează parametrul și încorporează-l în toate interogările M.
  2. În Power BI Desktop, folosește o limită corespunzătoare a rândurilor pentru parametrul TopN în timpul dezvoltării.
  3. Odată ce modelul este gata, publică-l în Power BI Service.
  4. În Power BI Service, schimbă valoarea parametrului la -1 pentru a permite încărcarea completă a datelor.
  5. Reîmprospătează modelul în Power BI Service pentru a încărca toate rândurile.

Lasă un comentariu

Power BI Garage,

by Farima Denis

Conținutul acestui blog este rezultatul unei experiențe practice cu Power BI de peste 10 ani si a unei experiente didactice de peste 3 ani, în cadrul căreia am instruit peste 700 de cursanți, fiecare având un nivel diferit de înțelegere a modelării datelor și a conceptelor de Business Intelligence.

Let’s connect