Se aplică la: SQL Server 2019 și mai târziu Analysis Services Azure Analysis Services Power BI Premium

modelele

Grupurile de calcul pot reduce semnificativ numărul de măsuri redundante prin gruparea expresiilor de măsură comune ca elemente de calcul. Grupurile de calcul sunt acceptate în modele tabulare la nivelul de compatibilitate 1500 și superior.

Acest articol descrie:

  • Beneficii
  • Cum funcționează grupurile de calcul
  • Șiruri de format dinamic
  • Precedenta
  • Recursivitate laterală
  • Comanda
  • Cum se creează
  • Limitări

Beneficii

Grupurile de calcul abordează o problemă în modele complexe în care poate exista o proliferare a măsurilor redundante folosind aceleași calcule - cel mai frecvent cu calculele de inteligență temporală. De exemplu, un analist de vânzări dorește să vizualizeze totalele vânzărilor și comenzile în funcție de lună până în prezent (MTD), trimestrial până în prezent (QTD), de la an la zi (YTD), comenzile de la an la an pentru precedent anul (PY) și așa mai departe. Modelatorul de date trebuie să creeze măsuri separate pentru fiecare calcul, ceea ce poate duce la zeci de măsuri. Pentru utilizator, acest lucru poate însemna să fie nevoie să sorteze la fel de multe măsuri și să le aplice individual la raportul lor.

Să analizăm mai întâi cum apar grupurile de calcul utilizatorilor într-un instrument de raportare precum Power BI. Vom arunca apoi o privire la ceea ce alcătuiește un grup de calcul și la modul în care sunt create într-un model.

Grupurile de calcul sunt afișate în raportarea clienților ca un tabel cu o singură coloană. Coloana nu este ca o coloană sau o dimensiune tipică, ci reprezintă unul sau mai multe calcule reutilizabile sau elemente de calcul care pot fi aplicate oricărei măsuri adăugate deja la filtrul Valori pentru o vizualizare.

În animația următoare, un utilizator analizează datele de vânzări pentru anii 2012 și 2013. Înainte de a aplica un grup de calcul, măsura de bază comună Vânzări calculează o sumă a vânzărilor totale pentru fiecare lună. Utilizatorul dorește apoi să aplice calcule de informații temporale pentru a obține totaluri de vânzări pentru luna până în prezent, trimestrial până în prezent, an până în prezent, etc. Fără grupuri de calcul, utilizatorul ar trebui să selecteze măsuri individuale de inteligență temporală.

Cu un grup de calcul, în acest exemplu numit Inteligența timpului, când utilizatorul trage fișierul Calculul timpului element la Coloane zona de filtrare, fiecare element de calcul apare ca o coloană separată. Valorile pentru fiecare rând sunt calculate din măsura de bază, Vânzări.

Grupurile de calcul lucrează cu explicit Măsuri DAX. În acest exemplu, Vânzări este o măsură explicită deja creată în model. Grupurile de calcul nu funcționează cu măsuri DAX implicite. De exemplu, în Power BI măsurile implicite sunt create atunci când un utilizator trage coloane pe imagini pentru a vizualiza valorile agregate, fără a crea o măsură explicită. În acest moment, Power BI generează DAX pentru măsuri implicite scrise ca calcule DAX în linie - ceea ce înseamnă că măsurile implicite nu pot funcționa cu grupuri de calcul. A fost introdusă o nouă proprietate de model vizibilă în Modelul de obiect tabular (TOM), Descurajează Măsuri implicite. În prezent, pentru a crea grupuri de calcul, această proprietate trebuie setată la Adevărat. Când este setat la adevărat, Power BI Desktop în modul Live Connect dezactivează crearea de măsuri implicite.

Grupurile de calcul acceptă, de asemenea, interogări cu expresii de date multidimensionale (MDX). Acest lucru înseamnă că utilizatorii Microsoft Excel, care interogă modele de date tabulare utilizând MDX, pot profita din plin de grupurile de calcul din tabele pivot și diagrame ale foii de lucru.

Cum funcționează

Acum că ați văzut cum beneficiază grupurile de calcul utilizatori, să aruncăm o privire asupra modului în care este creat exemplul grupului de calcul Time Intelligence prezentat.

Înainte de a intra în detalii, să introducem câteva funcții noi DAX special pentru grupurile de calcul:

SELECTEDMEASURE - Folosit de expresiile pentru elemente de calcul pentru a face referire la măsura care se află în prezent în context. În acest exemplu, măsura Vânzări.

SELECTEDMEASURENAME - Folosit de expresiile pentru elementele de calcul pentru a determina măsura care se află în context după nume.

ISSELECTEDMEASURE - Folosit de expresiile pentru elementele de calcul pentru a determina măsura care este în context este specificată într-o listă de măsuri.

SELECTEDMEASUREFORMATSTRING - Folosit de expresiile pentru elementele de calcul pentru a prelua șirul de format al măsurii care se află în context.

Exemplu de inteligență temporală

Numele tabelului - Inteligența timpului
Numele coloanei - Calculul timpului
Precedenta - 20

Elementele de calcul Time Intelligence

Actual

MTD

QTD

YTD

PY

PY MTD

PY QTD

PY YTD

BINE

YOY%

Pentru a testa acest grup de calcul, executați o interogare DAX în SSMS sau open-source DAX Studio. Notă: YOY și YOY% sunt omise din acest exemplu de interogare.

Interogare Time Intelligence

Revenirea interogării Time Intelligence

Tabelul de returnare arată calculele pentru fiecare element de calcul aplicat. De exemplu, a se vedea QTD pentru martie 2012 este suma din ianuarie, februarie și martie 2012.

Șiruri de format dinamic

Șirurile de format dinamic cu grupuri de calcul permit aplicarea condiționată a șirurilor de format la măsuri fără a le forța să returneze șirurile.

Modelele tabulare acceptă formatarea dinamică a măsurilor folosind funcția FORMAT a DAX. Cu toate acestea, funcția FORMAT are dezavantajul de a returna un șir, forțând măsurile care altfel ar fi numerice să fie returnate și ca șir. Acest lucru poate avea unele limitări, cum ar fi faptul că nu funcționează cu majoritatea vizualelor Power BI în funcție de valorile numerice, cum ar fi diagramele.

Șiruri de format dinamic pentru inteligență temporală

Dacă ne uităm la exemplul Time Intelligence prezentat mai sus, toate elementele de calcul, cu excepția YOY% ar trebui să utilizeze formatul măsurii actuale în context. De exemplu, YTD calculat pe baza măsurii de vânzări ar trebui să fie valută. Dacă acesta ar fi un grup de calcul pentru ceva de genul unei măsuri de bază pentru comenzi, formatul ar fi numeric. YOY%, cu toate acestea, ar trebui să fie un procent indiferent de formatul măsurii de bază.

Pentru YOY%, putem suprascrie șirul de format setând proprietatea expresiei de șir de format la 0,00%; - 0,00%; 0,00%. Pentru a afla mai multe despre proprietățile expresiei șirurilor de format, consultați Proprietățile celulei MDX - FORMAT STRING Conținut.

În această matrice vizuală din Power BI, vedeți Curent de vânzări/YOY și Comenzi curente/YOY păstrează șirurile de format de măsurare de bază respective. Vânzări YOY% și Comenzi YOY%, cu toate acestea, suprascrie șirul de format pentru a utiliza formatul procentual.

Șiruri de format dinamic pentru conversia valutară

Șirurile de format dinamic oferă conversie ușoară a monedei. Luați în considerare următorul model de date Adventure Works. Este modelat pentru conversia monedei între mai multe, așa cum este definit de tipurile de conversie.

A FormatString coloana este adăugată la DimCurrency tabel și populat cu șiruri de format pentru monedele respective.

Pentru acest exemplu, următorul grup de calcul este apoi definit ca:

Exemplu de conversie valutară

Numele tabelului - conversie valutara
Numele coloanei - Calculul conversiei
Precedenta - 5

Elemente de calcul pentru conversia valutară

Fără conversie

Monedă convertită

Format de expresie șir

Expresia șirului de format trebuie să returneze un șir scalar. Folosește noua funcție SELECTEDMEASUREFORMATSTRING pentru a reveni la șirul de format de măsurare de bază dacă există mai multe valute în contextul filtrului.

Următoarea animație arată conversia valutară în format dinamic a Vânzări măsură într-un raport.

Precedenta

Precedența este o proprietate definită pentru un grup de calcul. Specifică ordinea evaluării atunci când există mai multe grupuri de calcul. Un număr mai mare indică o prioritate mai mare, ceea ce înseamnă că va fi evaluat înainte de grupurile de calcul cu prioritate mai mică.

Pentru acest exemplu, vom folosi același model ca exemplul de inteligență temporală de mai sus, dar vom adăuga și un Medii grup de calcul. Grupul de calculații medii conține calcule medii care sunt independente de informațiile tradiționale de timp, în sensul că nu modifică contextul filtrului de date - aplică doar calcule medii în cadrul acestuia.

În acest exemplu, este definit un calcul mediu zilnic. Calculele, cum ar fi barilele medii de petrol pe zi, sunt frecvente în aplicațiile de petrol și gaze. Alte exemple obișnuite de afaceri includ media vânzărilor în magazin cu amănuntul.

În timp ce astfel de calcule sunt calculate independent de calculele de inteligență temporală, ar putea exista o cerință de a le combina. De exemplu, un utilizator ar putea dori să vadă barili de petrol pe zi YTD pentru a vizualiza rata zilnică a petrolului de la începutul anului până la data curentă. În acest scenariu, ar trebui stabilită prioritatea pentru elementele de calcul.

Exemplu de medii

Numele tabelului este Medii.
Numele coloanei este Calculul mediu.
Precedenta este 10.

Elemente de calcul pentru medii

Fără medie

Media zilnică

Iată un exemplu de tabel de interogare și returnare DAX:

Interogare medie

Returnarea interogării medii

Tabelul următor arată cum sunt calculate valorile din martie 2012.

Calculul numelui coloanei
YTD Suma vânzărilor pentru ianuarie, februarie, martie 2012
= 495.364 + 506.994 + 373.483
Media zilnică Vânzări pentru martie 2012 împărțite la # de zile din martie
= 373.483/31
Media zilnică YTD YTD pentru martie 2012 împărțit la numărul de zile în ianuarie, februarie și mar
= 1.375.841/(31 + 29 + 31)

Iată definiția elementului de calcul YTD, aplicată cu prioritate de 20.

Iată Daily Daily, aplicată cu o prioritate de 10.

Deoarece precedența grupului de calcul Time Intelligence este mai mare decât cea a grupului de calcul Medii, se aplică cât mai larg posibil. Calculul mediu zilnic YTD se aplică YTD atât numărătorului, cât și numitorului (număr de zile) al calculului mediu zilnic.

Aceasta este echivalentă cu următoarea expresie:

Nu această expresie:

Recursivitate laterală

În exemplul Time Intelligence de mai sus, unele dintre elementele de calcul se referă la altele din același grup de calcul. Aceasta se numește recursivitate laterală. De exemplu, YOY% referințe atât BINE și PY.

În acest caz, ambele expresii sunt evaluate separat deoarece folosesc instrucțiuni de calcul diferite. Alte tipuri de recursivitate nu sunt acceptate.

Element de calcul unic în contextul filtrului

În exemplul nostru de Time Intelligence, PY YTD elementul de calcul are o singură expresie de calcul:

Argumentul YTD pentru funcția CALCULATE () suprascrie contextul filtrului pentru a reutiliza logica deja definită în elementul de calcul YTD. Nu este posibil să se aplice atât PY, cât și YTD într-o singură evaluare. Grupurile de calcul se aplică numai dacă un singur element de calcul din grupul de calcul se află în contextul filtrului.

Comanda

În mod implicit, atunci când o coloană dintr-un grup de calcul este plasată într-un raport, elementele de calcul sunt ordonate alfabetic după nume în raport. Ordinea în care apar elementele de calcul într-un raport poate fi modificată prin specificarea proprietății Ordinal. Specificarea ordinii articolelor de calcul cu proprietatea Ordinal nu modifică prioritatea, ordinea în care sunt evaluate elementele de calcul. De asemenea, nu modifică ordinea în care apar elementele de calcul în Exploratorul de modele tabulare.

Pentru a specifica proprietatea ordinală pentru elementele de calcul, trebuie să adăugați o a doua coloană la grupul de calcul. Spre deosebire de coloana implicită în care tipul de date este text, a doua coloană utilizată pentru ordonarea articolelor de calcul are un tip de date cu număr întreg. Singurul scop pentru această coloană este de a specifica ordinea numerică în care apar elementele de calcul din grupul de calcul. Deoarece această coloană nu oferă nicio valoare într-un raport, cel mai bine este să setați Ascuns proprietate pentru True.

După ce o a doua coloană este adăugată la grupul de calcul, puteți specifica valoarea proprietății ordinale pentru elementele de calcul pe care doriți să le comandați.

Creați un grup de calcul

Grupurile de calcul sunt acceptate în Visual Studio cu Analysis Services Projects VSIX actualizare 2.9.2 și versiuni ulterioare. Grupurile de calcul pot fi create, de asemenea, utilizând Tabular Model Scripting Language (TMSL) sau editorul tabular open source.

Pentru a crea un grup de calcul utilizând Visual Studio

În Tabular Model Explorer, faceți clic dreapta Grupuri de calcul, și apoi faceți clic pe Grup de calcul nou. În mod implicit, un nou grup de calcul va avea o singură coloană și un singur element de calcul.

Utilizare Proprietăți pentru a schimba numele și a introduce o descriere pentru grupul de calcul, coloană și elementul de calcul implicit.

Pentru a introduce o expresie de formulă DAX pentru elementul de calcul implicit, faceți clic dreapta, apoi faceți clic pe Editați formula pentru a deschide Editorul DAX. Introduceți o expresie validă.

Pentru a adăuga elemente de calcul suplimentare, faceți clic dreapta Elemente de calcul, și apoi faceți clic pe Element de calcul nou.

Pentru a comanda elemente de calcul

În Tabular Model Explorer, faceți clic dreapta pe un grup de calcul, apoi faceți clic pe Adăugați coloană.

Denumiți coloana Ordinal (sau ceva similar), introduceți o descriere și apoi setați Ascuns proprietate pentru True.

Pentru fiecare element de calcul pe care doriți să îl comandați, setați Ordinal proprietate la un număr pozitiv. Fiecare număr este secvențial, de exemplu, un element de calcul cu o proprietate ordinală de 1 va apărea mai întâi, o proprietate de 2 va apărea în al doilea rând și așa mai departe. Articolele de calcul cu valoarea implicită -1 nu sunt incluse în comandă, dar vor apărea înainte de articolele comandate într-un raport.

Limitări

Securitatea la nivel de obiect (OLS) definită pe tabelele grupului de calcul nu este acceptată. Cu toate acestea, OLS poate fi definit pe alte tabele din același model. Dacă un element de calcul se referă la un obiect securizat OLS, se returnează o eroare generică.

Securitatea la nivel de rând (RLS) nu este acceptată. Definiți RLS pe ​​tabele din același model, dar nu pe grupurile de calcul în sine (direct sau indirect).

Detaliile rândurilor Expresiile nu sunt acceptate la grupurile de calcul.

Vizualele narative inteligente din Power BI nu sunt acceptate cu grupurile de calcul.

Agregările de coloane implicite în Power BI nu sunt acceptate pentru modelele cu grupuri de calcul. În prezent, dacă Descurajează Măsuri implicite proprietatea este setată la fals (implicit), apar opțiuni de agregare, totuși nu pot fi aplicate. Dacă Descurajează Măsuri implicite este setat sa Adevărat, opțiunile de agregare nu apar.