Tegnap a LinkedIn profilomon megjelent egy érdekes bejegyzés, ami egy olyan Power BI trükköt tartalmaz, ami egyrészt önmagában is nagyon hasznos tud lenni, de sok további előnyös funkció előtt is megnyitja azokat a bizonyos kapukat…
De egyelőre maradjunk az alap koncepciónál, és lássuk miről is van szó?
Jelenleg a Power BI-ban „gyárilag” nincs arra lehetőségünk, hogy egy tengelyen lévő dimenziókat kedvünkre váltogassuk.
Például, amennyiben az értékesítést szeretnénk megjeleníteni országonként és regiónként, akkor ez nem fog menni egy gombnyomásra ugyanazon a vizualizáción belül. Pedig ez egy igen hasznos tudás lenne, arról nem is beszélve, hogy ezzel elkerülhetővé válna, a fölösleges „vizuális” szemetelés a riportjainkon belül. Elegáns, szép megoldás lenne…ha lenne. Sajnos, mint azt említettem nincs, így keresni kell egy megoldást, amivel az általunk kívánt eredményt kapjuk.
Természetesen van megoldás, -mint szinte mindenre-, bár azt előre bocsátom elsőre nem tűnik majd egyszerűnek (sőt másodjára sem…😊), de megéri az elmélyülést, mert sokat nyerhetünk vele!
Szóval, a kiinduló helyzet a következő:
Van három táblánk (Sales, Currency, és Territory adatok):
Ahhoz, hogy itt a Sales adatokat különböző (Territory, Region, Currency) bontásban tudjuk megjeleníteni szükségünk lesz egy kapcsoló táblára, ahol ezek az adatok szerepelnek, mondjuk két oszlopban egymás mellett. DAX-ban leírva ez valahogy így fog kinézni:
_Table =
var currencyt = CROSSJOIN(ROW("Type","Currency"), VALUES(DimCurrency[CurrencyName]))
var country = CROSSJOIN(ROW("Type","Country"), VALUES(DimSalesTerritory[SalesTerritoryCountry]))
var region = CROSSJOIN(ROW("Type","Region"), VALUES(DimSalesTerritory[SalesTerritoryRegion]))
return UNION(UNION(currencyt,country), region)_
Rövid magyarázat mi is történik itt. Létrehoztunk három táblát, amit végül egy UNION-nal egybe fűztünk, így végül egy két oszlopos táblát kapunk, ennek a második oszlopát most nevezzük át „Values”-ra.
Ezzel meg is kaptuk a „kapcsoló” táblánkat, ami majd azt adja meg, hogy pontosan milyen bontásban is szeretnénk a vizsgált értékeket látni.
Ez egyelőre valahogy így fog kinézni:
Illetve, ha elkezdjük összerakni a vizualizációt belőle, kiegészítve bal oldalt egy slicer-rel , ezt kellene látnunk:
Nincs is más hátra, mint egy measure létrehozása, ami a fenti slicer-rel együttműködve adja majd vissza a sales értékét. Ez a következőképpen nézne ki:
Sales = if(HASONEVALUE('Table'[Type]),
SWITCH(VALUES('Table'[Type])
,"Country",CALCULATE(SUM(FactInternetSales[SalesAmount])
,TREATAS(VALUES('Table'[Values])
,DimSalesTerritory[SalesTerritoryCountry]))
,"Currency",CALCULATE(SUM(FactInternetSales[SalesAmount])
,TREATAS(VALUES('Table'[Values])
,DimCurrency[CurrencyName]))
,"Region",CALCULATE(SUM(FactInternetSales[SalesAmount])
,TREATAS(VALUES('Table'[Values])
,DimSalesTerritory[SalesTerritoryRegion]))
)
)
Ahogy betesszük a kész measure-t a vizualizációnk „Value” mezőjébe, már meg is kapjuk a kívánt eredményt! Íme:
Nos, ennyi lenne, de ezt egy kicsit továbbgondolva, sok más érdekes megoldást is ki lehet hozni a dologból, ajánlom mindenkinek a forrás oldal tanulmányozását is, ahol további ötleteket is találunk még!
Illetve aki maga is ki szeretné próbálni a riportot, vagy jobban a mélyére ásni, az akár a kapcsolódó fájl-t is letöltheti: