Utilizați IsInScope pentru a obține nivelul ierarhic corect în DAX - Kasper On BI

În lansarea din noiembrie a desktopului Power BI, am introdus o nouă expresie DAX, care este cu adevărat grozavă. Lucrul cu ierarhiile din DAX a fost întotdeauna un pic dureros, mai ales în scenariile în care trebuie să vă schimbați calculul în funcție de nivelul în care vă aflați.

Scenariul

Să luăm un scenariu în care compania are câteva reguli speciale pentru calcularea totalelor. Pentru fiecare total din ierarhie rezultatele sunt pre-calculate (o sumă simplă ar fi incorectă), nu spre deosebire de operatorii unari sau rolurile personalizate, așa cum le avem în AS Multi Dimensional.

Începem cu o ierarhie ca aceasta. După cum sa menționat anterior, totalurile sunt deja calculate, așa că vom avea nevoie de un rând în tabel pentru fiecare dintre ele. Pentru a putea face calculul corect, avem nevoie de o modalitate de a ști care rând este total sau nu, așa că am adăugat o coloană IsTotal.

obține

Pentru fiecare nivel din ierarhie avem o valoare în tabelul de date:

Apoi creez o relație și creez o ierarhie .

În cele din urmă, trag în coloana Valori și ierarhia într-o matrice (am activat și pictogramele +/-, astfel încât să putem extinde colapsul, care este o altă caracteristică din noiembrie). Primul lucru pe care îl vedem este că matricea arată ciudat cu goluri și tot.

Motivul pentru care vedem acest lucru este modul în care sunt configurate datele, am stocat totaluri și totaluri mari la cel mai scăzut nivel din ierarhie. În schimb, vrem să le arătăm la nivelul în care sunt corecți. De asemenea, nu vrem să afișăm agregarea creată de SUM.

DAX

Pentru a face acest lucru, trebuie să folosim DAX pentru a determina nivelul la care ne aflăm, pe baza căruia se determină calculul de făcut. Putem folosi funcția DAX ISFILTERED pentru a verifica dacă ne aflăm la un anumit nivel, dar această funcție are ca problemă și ascultă „filtre” setate în raport, precum slicere, astfel încât s-ar putea să vă dea fals pozitiv la niveluri greșite, deci nu este minunat fie.

Alternativ, putem verifica dacă vă aflați la un nivel, numărând numărul de valori pentru o anumită coloană. Dacă este 1, știi că ești la acel nivel. DAX ar arăta astfel:

Măsura 2 =
DACĂ (
CALCULATI (
COUNTROWS (VALORI (Vânzători [Vânzător])),