Power Pivot (6) – Exemple de Functii DAX. Functia SWITCH

Cursuri_gratuite_ExcelIncepand din 11 iulie 2016, vom publica in fiecare zi de luni si de joi cate un articol din seria de zece cursuri gratuite dedicate Power Pivot pentru Excel 2013.

ENJOY THE POWER! 🙂

 

Exemplul 1

Se da un model de date, format din mai multe tabele relationate astfel:

Power Pivot - Relatii intre tabele - Microsoft Excel 2013

Power Pivot – Relatii intre tabele – Microsoft Excel 2013

In tabela tblOrders, avem nevoie de introducerea unei coloane calculate care sa arate luna efectuarii comenzii, in baza datei comenzii, asa cum apare ea in coloana Data comanda.

Incarcam modelul de date (PowerPivot – Manage) si, in tabela tblOrders inseram o noua coloana (ea va fi denumita automat CalculatedColumn1), intre coloanele Data comanda si Status.

Power Pivot - Inserare coloana calculata - Microsoft Excel 2013

Power Pivot – Inserare coloana calculata – Microsoft Excel 2013

Pentru a afla luna efectuarii comenzii, utilizam functia MONTH, cu o sintaxa asemanatoare functiei clasice de tip Date&Time.

=MONTH([Data comanda])

Aceasta functie va intoarce extrage luna din data calendaristica si va intoarce un rezultat numeric, de la 1 la 12.

Ceea ce vrem sa obtinem, insa, este un rezultat de tip text, adica denumirea lunii in limba romana (Ianuarie, Februarie, etc.).

Utilizand optiunile clasice furnizate de Excel 2013, avem doua variante:

  • Utilizarea unei formule complexe, continand mai multe functii IF, de genul: =IF(MONTH([Data comanda])=1,”Ianuarie”,IF(MONTH([Data comanda])=2,”Februarie”,…….)))..
  • Utilizarea functiei VLOOKUP, cu conditia sa existe in fisierul Excel o tabela de corespondenta intre numar si denumire.

Utilizand optiunile specifice furnizate de Power BI, vom alege functia SWITCH pentru a calcula denumirea lunii, in functie de indicativul de luna (1,2,…..12).

Remember! Coloanele calculate NU exista in tabelele originale, ele vor putea fi utilizate in Pivot Table de tip Power Pivot.

Functia SWITCH este o functie DAX de tip Logic, cu urmatoarea sintaxa:

=SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])

Unde:

<expression> semnifica o interogare logica, asemanatoare cu logical_test al functiei clasice IF.

In exemplul de mai sus, trebuie sa evaluam rezultatul functiei MONTH, aceasta putand avea valori de la 1 la 12.

Daca <value> este 1, atunci <result> este textul “Ianuarie”, daca <value> este 2, atunci <result> este textul “Februarie”, ….etc.

Vom inscrie, prin urmare, formula:

=SWITCH(MONTH([Data comanda]),1,”Ianuarie”,2,”Februarie”,3,”Martie”,4,”Aprilie”,5,”Mai”,6,”Iunie”,7,”Iulie”,8,”August”,9,”Septembrie”,10,”Octombrie”,11,”Noiembrie”,”Decembrie”)

Observati ca “Decembrie” corespunde argumentului <else>, pentru ca este ultima varianta posibila.

Evident, pentru ca functia sa intoarca rezultatul corect, toate datele inscrise in coloana [Data comanda] trebuie sa fie de tip data calendaristica.

Power Pivot - Functia SWITCH - Microsoft Excel 2013

Power Pivot – Functia SWITCH – Microsoft Excel 2013

Este o formula mult mai simpla si mai intuitiva decat utilizarea mai multor functii IF si inlocuieste cu succes functia VLOOKUP.

 

Exemplul 2

In articolul anterior, am invatat cum se utilizeaza functia RELATED (functie DAX de tip Filter) ca argument al functiei IF, pentru a calcula statusul unei facturi, intr-un model de date complex, care continea atat tabela facturi, cat si tabela FACT_RESTANTE, relationate prin coloana InvoiceID.

Sa incercam sa obtinem acelasi rezultat, utilizand functia SWITCH, in loc de functia IF.

Toate facturile restante se regasesc in tabela FACT_RESTANTE. In tabela facturi, vrem sa introducem o coloana calculata, denumita Status factura, care sa aiba valoarea platit, respectiv valoarea neplatit.

Vom utiliza functia SWITCH, unde functia RELATED va fi parte a argumentului <expression>.

ID-ul facturii este un numar. Daca interogarea cu functia RELATED intoarce un rezultat in tabela FACT_RESTANTE, acesta va fi chiar numarul facturii, prin urmare expresia RELATED(FACT_RESTANTE[InvoiceID]) va fi mai mare ca 0.

In cazul in care rezultatul expresiei este pozitiv, inseamna ca este vorba despre o factura neplatita, in caz contrar (argumentul <else> al functiei SWITCH), este vorba despre o factura platita.

Expresia RELATED(FACT_RESTANTE[InvoiceID])>0 intoarce un rezultat de tip logic, prin urmare argumentul <value> al functiei SWITCH trebuie sa fie tot o valoare logica.

Formula

=SWITCH(RELATED(FACT_RESTANTE[InvoiceID])>0,”TRUE”,”neplatit”,”platit”)

Intoarce eroare, pentru ca <value> este textul TRUE.

Utilizam functia TRUE(), care intoarce pur si simplu valoarea logica de adevar TRUE.

Formula corecta va fi:

=SWITCH(RELATED(FACT_RESTANTE[InvoiceID])>0,TRUE(),”neplatit”,”platit”)

Am obtinut acelasi rezultat ca atunci cand am utilizat functia IF (coloana Status factura).

Power Pivot - Variante de calcul SWITCH vs. IF - Microsoft Excel 2013

Power Pivot – Variante de calcul SWITCH vs. IF – Microsoft Excel 2013

In coloana CalculatedColumn1, am obtinut acelasi rezultat, utilizand o varianta a formulei de mai sus, prin introducerea functiei ISNUMBER.

=SWITCH(ISNUMBER(RELATED(FACT_RESTANTE[InvoiceID])),true(),”neplatit”,”platit”)

Posted in Power Pivot Tagged with: , , , , ,

Leave a Reply

Categorii

Like us on Facebook