Modelul de numărare distinctă înrudit este util ori de câte ori aveți unul sau mai multe tabele de date legate de o dimensiune și trebuie să efectuați numărul distinct de valori ale coloanelor într-un tabel de dimensiuni, luând în considerare numai elementele legate de tranzacțiile din tabelul de date. În scopuri demonstrative, utilizăm numărul distinct al denumirii produsului într-un model cu două tabele de date: Vânzări și Chitanțe.

modele

Deoarece numele produsului nu este unic - am introdus în mod artificial nume duplicate eliminând descrierea culorii din numele produsului - nu funcționează un număr simplu distinct al cheii produsului în tabelul Vânzări sau Chitanțe. În cele din urmă, arătăm cum să calculăm numărul distinct de nume de produse care apar în ambele tabele și în cel puțin unul dintre cele două.

Coloana Produs [Nume produs] nu este unică în tabelul Produs și avem nevoie de un număr distinct de nume de produse care au tranzacții de vânzare aferente. Modelul conține două tabele cu tranzacții legate de produse: Vânzări și Chitanțe. Figura 1 prezintă acest model de date.

figura 1 Modelul de date conține două tabele de fapt: Vânzări și Chitanțe.

Pe baza acestui model, dorim să calculăm numărul distinct de nume de produse care apar:

  • În vânzări.
  • În chitanțe.
  • Atât în ​​vânzări, cât și în chitanțe
  • În cel puțin una dintre vânzări și chitanțe

Raportul este vizibil în Figura 2.

Figura 2 Raportul prezintă cele patru măsuri prezentate în model.

Codul pentru primele două măsuri este următorul:

Folosind SUMARIZARE, măsurile # Produse din vânzări și # Produse din încasări recuperează numele distincte ale produselor la care se face referire în tabelul relevant. SUMX numără doar numărul acestor produse și este utilizat în loc de COUNTROWS sau DISTINCTCOUNT din motive de performanță - mai multe detalii în articolul Analiza performanței DISTINCTCOUNT în DAX.

Deși este mai lungă decât o soluție care utilizează DISTINCTCOUNT și filtrare încrucișată bidirecțională, această versiune a codului este mai rapidă în cel mai frecvent caz - în care numărul de produse este semnificativ mai mic decât numărul de tranzacții.

NOTĂ Sintaxa naturală pentru calcularea variabilei Rezultat în măsurile # Produs din vânzări și # Produs din încasări ar trebui să utilizeze COUNTROWS. Versiunea SUMX este sugerată numai din motive de performanță în măsurile simple. Următoarele măsuri ale acestui model utilizează COUNTROWS deoarece nu ar exista niciun avantaj în utilizarea SUMX în expresii mai complexe.

Formularea utilizând SUMMARIZE și COUNTROWS poate fi ușor extinsă pentru a se potrivi următoarelor formule care produc intersecția (# Produse din ambele) sau unirea (# Produse din oricare) a denumirilor produselor:

Am furnizat exemple pentru INTERSECT și UNION. Dar modelul poate fi ușor adaptat pentru a efectua calcule mai complexe. Ca un exemplu suplimentar, măsura # Produs în vânzări și nu în încasări calculează numărul de nume de produse care există în vânzări, dar nu și în încasări, utilizând funcția set EXCEPT în loc de funcțiile INTERSECT sau UNION utilizate în măsurile anterioare:

Rezultatul măsurii # Produs în vânzări și nu în încasări este vizibil în Figura 3.

Figura 3 Măsura # Produs în vânzări și nu în încasări contează produsele prezente în vânzări, dar nu și în încasări.

Modelul poate fi extins pentru a calcula numărul distinct al oricărei coloane dintr-un tabel care poate fi atins printr-un lanț de relații mai multe la unu din tabelele de fapte. Acest lucru se datorează faptului că SUMMARIZE poate grupa după oricare dintre acele coloane.

Creează un rezumat al tabelului de intrare grupat după coloanele specificate.

REZUMAT (

[, [, [] [, [] [, [, [] [, [] [,…]]]]]]]] SUMX

Returnează suma unei expresii evaluate pentru fiecare rând dintr-un tabel.

SUMX (

, ) NUMĂRURI

Numără numărul de rânduri dintr-un tabel.

COUNTROWS (

) DISTINCTCOUNT

Numără numărul de valori distincte dintr-o coloană.

DISTINCTCOUNT () INTERSECT

Returnează rândurile tabelului din stânga care apar în tabelul din dreapta.

INTERSECT (,) UNION

Returnează uniunea tabelelor ale căror coloane se potrivesc.

UNIUNEA (

,
[,
[,…]]) CU EXCEPTIA

Returnează rândurile tabelului din stânga care nu apar în tabelul din dreapta.

Acest model este conceput pentru Power BI/Excel 2016-2019. Este disponibilă și o versiune alternativă pentru Excel 2010-2013.

Acest model este inclus în cartea DAX Patterns, Ediția a doua.

© iro.waykun.com 2024.