Tabele extinse în LuckyTemplates

Tabele extinse în LuckyTemplates

În acest tutorial, vom arunca o privire asupra unui scenariu foarte specific pe care sunt sigur că toți l-ați întâlnit deja în timp ce lucrați cu DAX - tabelul extins . Tabelele extinse vă pot încurca calculul dacă nu știți cum funcționează de fapt. Puteți viziona videoclipul complet al acestui tutorial în partea de jos a acestui blog.

Pentru acest exemplu, folosim baza de date Contoso, care conține tabelul de vânzări , tabelul de clienți , tabelul de date , tabelul de produse , tabelul de categorii de produse și tabelul de subcategorii de produse .

În partea stângă, avem o relație unu-la-mulți între produse, categorie, subcategorie și tabelele de vânzări. Avem, de asemenea, relații unu-la-mulți între client și vânzări, precum și date și vânzări.

Tabele extinse în LuckyTemplates

Cuprins

Exemplul #1

Să presupunem că vrem să creăm un raport din această coloană de categorii în tabelul de categorii și să folosim o măsură care calculează câți clienți sunt în tabelul cu clienți. Dorim să împărțim numărul pentru tabelul clientului în funcție de categorie.

Tabele extinse în LuckyTemplates

Dacă pun un filtru pe tabelul de categorii, acel filtru va merge în tabelul de subcategorii, apoi va ajunge în tabelul de produse, iar apoi, în final, va ajunge și va filtra tabelul de vânzări. Dar acel filtru nu va putea filtra tabelul clientului decât dacă activăm filtrarea bidirecțională.

Să revenim la raport pentru a remedia acest calcul. Putem include acest calcul în funcția CALCULATE și apoi scrie Sales. Putem vedea că de data aceasta nu repetăm ​​același număr pentru fiecare celulă a vizualului.

Tabele extinse în LuckyTemplates

Pentru a verifica dacă acest calcul este corect, putem aduce cheia de client din tabelul de vânzări pentru a o agrega, apoi facem o Numărătoare (Distinct) peste aceasta.

Tabele extinse în LuckyTemplates

Tabele extinse în LuckyTemplates

Puteți vedea că returnăm aceeași valoare pentru fiecare rând. Folosind tabelul de vânzări din interiorul funcției CALCULATE, am putut remedia calculul.

Tabele extinse în LuckyTemplates

Exemplul #2

Să trecem la următorul exemplu. Pentru aceasta, dorim să identificăm valoarea vânzărilor pentru produsele roșii în 2007, 2008 sau 2009. În funcție de selecția dispozitivului de feliere, vreau să mă întorc și cu un an înapoi.

De exemplu, dacă selectez 2009, vreau să raportez vânzările roșii pentru 2008. Dacă selectez 2008, vreau să raportez și vânzările roșii pentru 2007.

Tabele extinse în LuckyTemplates

Vânzări roșii #1

Calculul vânzărilor noastre totale este practic o sumă a datelor de vânzări. În contextul rândurilor, vom înmulți cantitatea cu prețul net.

Tabele extinse în LuckyTemplates

Să creăm o măsură nouă și să o numim Red Sales. Vom scrie CALCULATE, apoi Total Sales. Vom FILTRARE de Vânzări pentru a arăta că culoarea produselor este egală cu roșu.

Tabele extinse în LuckyTemplates

Apoi vom scrie peste datele din coloana de date.

Tabele extinse în LuckyTemplates

Când aducem acel calcul într-un card vizual, obținem un gol.

Tabele extinse în LuckyTemplates

Vânzări roșii #2

Ce se intampla aici? Să încercăm să rescriem acel calcul și să vedem dacă reușim să obținem un rezultat. Vom crea o măsură nouă și o vom numi Red Sales 2 și vom folosi prima parte a calculului pentru Red Sales 1.

Tabele extinse în LuckyTemplates

Vom iniția un alt CALCUL peste primul CALCUL.

Tabele extinse în LuckyTemplates

Să aducem această măsură în matrice și să vedem rezultatele. Dacă selectăm 2008, obținem 51.947. Dacă selectăm 2009, obținem 24.343. În cele din urmă, dacă selectăm 2010, obținem 39.724.

Tabele extinse în LuckyTemplates

Vânzări roșii #3

Există o altă modalitate de a scrie acest calcul. Vom scrie o nouă măsură și o vom numi Red Sales 3, apoi vom folosi funcția CALCULATE.

Vom calcula vânzările totale și vom scrie că pentru produse, culoarea este egală cu roșu. Apoi utilizați funcția SAMEPERIODLASTYEAR pe date.

Tabele extinse în LuckyTemplates

Dacă tragem măsura #3 în vizualizarea cardului, puteți vedea că aceste două valori ale cardului returnează aceeași valoare, ceea ce este corect.

Dar este ceva în neregulă cu primul nostru calcul, deoarece returnăm un gol și nu valoarea corectă.

Tabele extinse în LuckyTemplates

Să vedem ce se întâmplă de fapt aici. Acum că am văzut câteva calcule pe tabele extinse, să înțelegem teoria din spatele lor.

Înainte de a înțelege ce este un tabel extins, trebuie să înțelegeți că toate tabelele pe care le avem aici se numesc tabele de bază .

Tabele extinse în LuckyTemplates

Deci, când aceste tabele devin tabele extinse? Odată ce creați o relație multi-la-unu între un tabel și un alt tabel, tabelul de bază devine tabelul extins.

Verificarea tabelelor extinse

Dar cum putem verifica dacă o expansiune a tabelului are loc de fapt? Ei bine, puteți folosi cuvântul cheie aferent pe orice tabel. Dacă puteți accesa coloana dintr-o parte, atunci veți ști că se poate întâmpla o extindere a tabelului.

Să mergem la tabelul de vânzări și să creăm o nouă coloană calculată.

Tabele extinse în LuckyTemplates

Să presupunem că vrem să recuperăm culoarea produsului din tabelul de produse pentru această cheie de produs anume. Vom folosi RELATED, care va oferi doar lista coloanelor din IntelliSense care pot fi de fapt extinse din tabelul de vânzări.

Putem vedea că tabelul de clienți și tabelul de vânzări au o relație multi-la-unu. De asemenea, putem vedea lista coloanelor din tabelul clienților, coloanele din tabelul cu date și coloanele cu produse.

Tabele extinse în LuckyTemplates

Când selectăm Produse[Culoare], putem crea o nouă coloană în tabelul de vânzări cu ajutorul cuvântului cheie RELATED. RELATED ne oferă acces doar la coloanele tabelului la care tabelul de bază se poate extinde efectiv.

Dacă schimbăm natura acelei relații de la mulți la unu la mulți la mulți, calculul respectiv nu va mai funcționa.

Să schimbăm natura acestei relații în multi-la-mulți. Putem vedea în partea de jos că primim un simbol de avertizare.

Tabele extinse în LuckyTemplates

Când ne întoarcem la tabelul de vânzări, vedem mesajul de eroare care spune că coloana Products[Color] fie nu există, fie nu are o relație cu niciun tabel.

Tabele extinse în LuckyTemplates

În contextul actual, avertismentul pe care îl primim nu este foarte ușor de utilizat. Practic, înseamnă că tabelul de vânzări nu se poate extinde în tabelul de produse, deoarece nu putem accesa doar o singură valoare pentru acel articol de rând.

Și din moment ce folosim relația multi-la-mulți, extinderea tabelului nu are loc și RELATED nu funcționează.

Să revenim la vizualizarea diagramă și să reparăm acest calcul. Vom schimba natura relației în multi-la-unu și vom activa acea relație pentru ca calculul să funcționeze.

Tabele extinse în LuckyTemplates

Definirea tabelelor extinse

Înainte de a începe să ne uităm la calculele pe care le-am făcut deja în raport, să reiterăm definiția tabelului extins.

Dacă aveți un model de date cu o schemă stea , tabelul de fapte se va extinde la toate tabelele din modelul de date dacă există o relație multi-la-unu între dimensiuni și tabelul de fapte.

Dacă aveți o schemă fulg de zăpadă , atunci tabelul de subcategorii de produse și tabelul de categorii se vor extinde la tabelul de bază, care în acest caz este tabelul de produse. Tabelul de vânzări este tabelul de bază, care se extinde la toate celelalte tabele.

În spatele scenei, tabelul de vânzări va avea toate coloanele într-un singur tabel. Rețineți că extinderea tabelului este doar un concept logic, deci nu se va extinde și nu va crește dimensiunea modelului dvs. de date.

Tabelul extins intră în imagine doar atunci când vă referiți la un tabel (care este tabelul de bază) și când aveți o relație multi-la-unu cu alte tabele.

Tăierea coloanei de categorii și utilizarea tabelelor extinse

Să încercăm să reparăm calculele pe care le-am făcut deja în vizualizarea raportului. În acest exemplu, tăiem după coloana categorie din tabelul de categorii de produse și încercăm să numărăm câți clienți sunt.

Tabele extinse în LuckyTemplates

Deci ce facem de fapt aici? Folosim tabelul de vânzări extins ca referință. Odată ce contextul filtrului conține o valoare din tabelul de categorii, acel filtru va ajunge în tabelul de vânzări din subcategoria de produse și direct la vânzări.

Deoarece vânzările sunt un tabel extins și folosim acea referință în cadrul funcției CALCULATE, atunci tabelul de vânzări va conține și coloana tabelului clienți. Când aplicăm un filtru peste tabelul de vânzări, indirect, filtram și tabelul clienți.

Să ne întoarcem la calculele noastre roșii de vânzări și să încercăm să înțelegem ce se întâmplă de fapt. Vom începe cu calculul gol. Dacă selectăm măsura respectivă, puteți vedea că scriem un cod imbricat. Avem CALCULATE, apoi Total Sales, FILTER peste vânzări și SAMEPERIODLASTYEAR.

Tabele extinse în LuckyTemplates

Să spargem acel calcul pas cu pas. În primul rând, trebuie să identificăm contextul de filtru extern care există în afara calculului.

Am selectat anul 2008 în secțiunea Număr de an calendaristic.

Tabele extinse în LuckyTemplates

Din acest context de filtru, va fi evaluat tabelul de vânzări. Tabelul de vânzări va conține doar rândul pentru numărul anului calendaristic 2008, iar culoarea produsului va fi roșie. Avem două filtre aici: unul care este creat de contextul filtrului și unul care este creat de filtru .

SAMEPERIODLASTYEAR este evaluat în contextul filtrului în care anul este 2008. Va primi o listă de date în 2008 și va muta acele date în 2008 în 2007. Tabelul care va fi returnat de acesta va conține doar datele pentru 2007.

Odată ce aceste două operații sunt finalizate, funcția CALCULATE pregătește contextul filtrului și aplică aceste două filtre în contextul filtrului. Când aplicăm asta, avem un context de filtru în care culoarea produsului este egală cu roșu, iar pe coloana anului, avem un filtru peste 2007 și 2008.

Deci, pentru acest model de date, nu există o singură tranzacție care să existe în doi ani diferiți. Când CALCULATE încearcă să îmbine aceste două filtre într-o stare și , va spune că anul ar trebui să fie 2008 și 2007 și că culoarea produsului ar trebui să fie roșie.

Când filtrăm tabelul de vânzări cu contextul de filtrare al anului 2008, de asemenea, filtrăm indirect și tabelul de date. Stabilul de vânzări are o relație de mai multe la unu cu stabilul de date.

Să creăm un nou calcul pentru a identifica câte rânduri există în tabelul de date pentru datele aferente. Vom scrie CALCULATE, apoi din tabelul de date. Apoi vom FILTRA TOATE tabelul de vânzări și vom spune că datele RELATE din numărul anului calendaristic ar trebui să fie egale cu 2008.

Tabele extinse în LuckyTemplates

În CALCULATE, nu am referit niciun filtru peste tabelul de date. Pur și simplu verificăm ca datele din numărul anului calendaristic să fie din 2008. În mod ideal, acest filtru ar trebui să nu poată filtra tabelul de date. De asemenea, folosim funcția , care va ignora contextul de filtru care va veni din slicer.

Să creăm un card nou pentru acest calcul. puteți vedea că returnăm 348 de rânduri.

Tabele extinse în LuckyTemplates

Deci, cum este posibil ca dintr-un tabel de date de 2500 de rânduri, să returnăm doar 348 de rânduri? Dacă vom folosi un tabel extins, atunci vom filtra indirect și celălalt tabel, care este conectat printr-o relație multi-la-unu.

Deși nu avem niciun filtru pentru anul curent, încă limităm numărul de rânduri care sunt vizibile pentru tabelul de dimensiuni pe care îl avem pe o parte.

Când returnăm tabelul de vânzări, returnăm și o versiune filtrată a tabelului de date, a tabelului clienți, a tabelului de produse, a tabelului de categorii de produse și a tabelului de subcategorii de produse.

Explicarea vânzărilor roșii 2

Să trecem la următorul calcul, care este Red Sales 2. Vom începe cu CALCULATE exterior, deoarece dacă imbricam această funcție în orice scenariu, CALCULATE exterior ar trebui să pregătească contextul de filtru pentru CALCULARE interior.

Tabele extinse în LuckyTemplates

Pe slicer, selectăm anul calendaristic 2008. Când funcția SAMEPERIODLASTYEAR primește data pentru 2008, va schimba acele date în 2007 și va fi contextul FILTER pentru calculul interior. Acest CALCUL interior va evalua anul 2007.

Funcția FILTER va filtra tabelul de vânzări, iar tabelul de vânzări va fi limitat doar pentru rândul în care anul este 2007. Odată ce avem rândurile pentru 2007, vom verifica dacă produsele aferente sunt egale cu roșu.

Spre deosebire de primul calcul, nu returnăm două niveluri diferite. Aceste două niveluri diferite nu sunt aplicate în contextul FILTER, așa că tabelul returnat de funcția FILTER va conține tot rândul tabelului de vânzări.

Odată aplicat acest filtru, vom obține valoarea vânzărilor pentru anul 2007, precum și produsele care sunt egale cu roșu, în timp ce la primul calcul, returnam anul 2008 și 2007.

De data aceasta, am pregătit contextul de filtru pentru tabelul de vânzări folosind funcția SAMEPERIODLASTYEAR și prin imbricarea funcției CALCULATE într-un alt CALCULATE.

Explicarea vânzărilor roșii 3

Pentru al treilea exemplu, avem o funcție CALCULATE foarte simplă cu două instrucțiuni: una este culoarea produsului este egală cu roșu și apoi SAMEPERIODLASTYEAR pe date.

Tabele extinse în LuckyTemplates

Funcția SAMEPERIODLASTYEAR va fi evaluată într-un context de filtru, care va conține doar datele anului 2007. Culoarea produselor va aplica un context de filtru de roșu peste tabelul de produse, care la rândul său va filtra tabelul de vânzări și va conține doar rândurile pentru produsele roșii.

Când aceste două valori sunt aplicate în contextul de filtrare, ele vor filtra tabelul de vânzări, dar nu și tabelul de vânzări extins. puteți vedea că nicăieri în cod nu am făcut referire la tabelul de vânzări extins.

Acesta este scenariul ideal pe care ar trebui să-l utilizați dacă încercați să faceți referire la tabelul extins. Când utilizați tabelul extins, calculele pot deveni într-adevăr complicate și, uneori, nu puteți identifica de ce calculele dvs. returnează un rezultat incorect.

Dacă nu înțelegeți conceptul de tabele extinse, puteți dezvolta acest cod special ca măsură de model și apoi îl implementați în producție. Alți utilizatori ar putea începe să creeze alte măsuri peste această măsură și s-ar putea să nu-și dea seama de ce calculele nu funcționează, deoarece pur și simplu nu au acel nivel de înțelegere a limbajului DAX.

Dacă lucrați cu DAX, încercați întotdeauna să puneți filtrul pe o singură coloană, deoarece atunci când utilizați o singură coloană, conceptul de tabele extinse nu este aplicat. De exemplu, când utilizați PRODUSE [Culoare] = „Roșu” , filtrul ajunge în tabelul de vânzări, dar acel filtru nu poate ajunge în tabelul clientului, deoarece nu folosim tabelul de vânzări extins.

Când folosim o singură coloană, nu ne referim la conceptul de tabele extinse. Pur și simplu aplicăm un filtru de bază peste tabelul de vânzări, care nu se propagă la celelalte tabele.

Utilizarea DAX Studio pentru a verifica tabelele extinse

Înainte de a încheia, vom folosi studioul DAX pentru a verifica codul nostru pentru Red Sales 3. Să mergem la fila Vizualizare, să facem clic pe Analizor de performanță și apoi să începem înregistrarea. Vom reîmprospăta acea imagine și vom selecta un card gol.

Tabele extinse în LuckyTemplates

Din instrumentele externe, vom lansa DAX studio

Tabele extinse în LuckyTemplates

Putem vedea că în ecranul cu rezultate din partea de jos, obținem un gol.

Tabele extinse în LuckyTemplates

Vom activa Orarul serverului pentru a înțelege interogările care sunt generate în spatele scenei. Vom accesa fila Orare server și o vom extinde pentru a vedea totul.

Efectuăm un JOIN pe tabelul de vânzări din partea stângă. De asemenea, efectuăm un JOIN pe cheia de produs din tabelul de produse.

Tabele extinse în LuckyTemplates

În clauza WHERE, scrie că datele din numărul anului calendaristic ar trebui să fie egale cu 2008 și că culoarea produsului ar trebui să fie roșie.

Tabele extinse în LuckyTemplates

Apoi avem o altă condiție care spune Date[Date], apoi urmată de un interval de date. Deci care sunt aceste date? În mod ideal, aceste date trebuie să aparțină anului 2008, dar sunt din 2007 când modificăm formatarea acestor numere în Excel.

Tabele extinse în LuckyTemplates

Acesta este motivul pentru care returnăm o valoare goală. Spunem că anul calendaristic ar trebui să fie 2008 și aplicăm o condiție AND ca datele să fie în 2007. Acest 2007 se datorează funcției SAMEPERIODLASTYEAR pe care am folosit-o în calcul.

Să modificăm măsura și referința la Red Sales 2. Odată ce executăm codul, puteți vedea că primim datele din tabelul de date, apoi filtram coloana de date pentru numărul anului calendaristic 2008.

De data aceasta, putem returna un rezultat deoarece nu aplicăm un filtru pentru clauza WHERE și spunem că datele din numărul anului calendaristic ar trebui să fie egale cu 2008.

Tabele extinse în LuckyTemplates


Unde să găsiți capcana DAX ascunsă
Numărarea clienților de-a lungul timpului folosind DISTINCTCOUNT în LuckyTemplates
Analiza clienților noi folosind DAX avansat

Concluzie

Sperăm că acest tutorial a fost util pentru a înțelege ce este un tabel extins și cum vă poate da peste cap calculele. Tabelele extinse nu sunt cu adevărat intuitive și nici nu sunt ușor de înțeles.

Pentru mai multe informații despre tabelele extinse, nu uitați să vă abonați la canalul TV LuckyTemplates. Avem o cantitate imensă de conținut care iese tot timpul de la mine și de la o serie de creatori de conținut, toți dedicați îmbunătățirii modului în care utilizați LuckyTemplates și Power Platform.


Ce este Sinele în Python: Exemple din lumea reală

Ce este Sinele în Python: Exemple din lumea reală

Ce este Sinele în Python: Exemple din lumea reală

Cum să salvați și să încărcați un fișier RDS în R

Cum să salvați și să încărcați un fișier RDS în R

Veți învăța cum să salvați și să încărcați obiecte dintr-un fișier .rds în R. Acest blog va trata, de asemenea, cum să importați obiecte din R în LuckyTemplates.

Primele N zile lucrătoare revizuite – O soluție de limbaj de codare DAX

Primele N zile lucrătoare revizuite – O soluție de limbaj de codare DAX

În acest tutorial despre limbajul de codare DAX, aflați cum să utilizați funcția GENERATE și cum să schimbați în mod dinamic titlul unei măsuri.

Prezentați perspective utilizând tehnica vizuală dinamică cu mai multe fire în LuckyTemplates

Prezentați perspective utilizând tehnica vizuală dinamică cu mai multe fire în LuckyTemplates

Acest tutorial va acoperi cum să utilizați tehnica Multi Threaded Dynamic Visuals pentru a crea informații din vizualizările dinamice de date din rapoartele dvs.

Introducere la filtrarea contextului în LuckyTemplates

Introducere la filtrarea contextului în LuckyTemplates

În acest articol, voi trece prin contextul filtrului. Contextul de filtrare este unul dintre subiectele majore despre care orice utilizator LuckyTemplates ar trebui să învețe inițial.

Cele mai bune sfaturi pentru utilizarea aplicațiilor din serviciul online LuckyTemplates

Cele mai bune sfaturi pentru utilizarea aplicațiilor din serviciul online LuckyTemplates

Vreau să arăt cum serviciul online LuckyTemplates Apps poate ajuta la gestionarea diferitelor rapoarte și informații generate din diverse surse.

Analizați modificările marjei de profit ore suplimentare – Analytics cu LuckyTemplates și DAX

Analizați modificările marjei de profit ore suplimentare – Analytics cu LuckyTemplates și DAX

Aflați cum să vă calculați modificările marjei de profit folosind tehnici precum măsurarea ramificării și combinarea formulelor DAX în LuckyTemplates.

Idei de materializare pentru cache-urile de date în DAX Studio

Idei de materializare pentru cache-urile de date în DAX Studio

Acest tutorial va discuta despre ideile de materializare a cache-urilor de date și despre modul în care acestea afectează performanța DAX-ului în furnizarea de rezultate.

Raportare de afaceri folosind LuckyTemplates

Raportare de afaceri folosind LuckyTemplates

Dacă încă utilizați Excel până acum, atunci acesta este cel mai bun moment pentru a începe să utilizați LuckyTemplates pentru nevoile dvs. de raportare a afacerii.

Ce este LuckyTemplates Gateway? Tot ce trebuie să știți

Ce este LuckyTemplates Gateway? Tot ce trebuie să știți

Ce este LuckyTemplates Gateway? Tot ce trebuie să știți