a FILTER függvény

2019-09-20    Excel 2019
Ha a DAX-képlettel nem a teljes táblát kívánjuk feldolgozni, akkor szűrő-függvényekkel kell meghatároznunk a művelet hatókörét. Magyarul, a szűrő-függvénnyel válogathatjuk ki azokat a rekordokat, amelyeket a bővítménynek a gazda-képlet kiértékelésekor figyelembe kell vennie. A szelektálás a felhasználó által szerkesztett feltétel-rendszeren alapul. A szűrő-kifejezéseket az alkalmazott függvény feltétel-argumentumaival kell deklarálnunk.
A két-argumentumos FILTER a függvény-család reprezentása. Első argumentumával a feldolgozandó táblát kell deklarálnunk, amely nem csak valós hanem virtuális tábla is lehet. A szűrő-kifejezést a függvény második argumentumában kell összeállítanunk. Példánk egy két-táblás adatbázis legyen: „munkahelyek” és „munkatársak”. Kimutatással vizsgálni szeretném a vállalatnál dolgozó, fiatal nők helyzetét.
DAX, FILTER függvény, példa
Mivel a munkatársak táblában nincs rögzítve sem a munkatársak neme, sem születési dátuma, ezért a kollégák nemét és életkort a „személyi szám” mező segítségével állapíthatjuk meg. Az „fnők” egyéni összesítés képlete két beágyazott FILTER függvényt tartalmaz: a külső leválogatja az 1979 után születetteket, azokból a női rekordokból, amelyeket az első argumentumában álló, belső FILTER függvény választ ki a munkatársak táblából. Az így kapott rekordokat a COUNTROWS függvénynyel számoltatjuk meg.
DAX, több feltétel egymásba ágyazott FILTER függvényekkel
A TRUNC függvény funkciója és működése azonos a program CSONK függvényével: az első argumentumával meghatározott számot, a második argumentumával meghatározott számjegyre alakítja át, a számegyenesen a nulla felé „mozdulva” el! A MOD függvény pedig a program MARADÉK függvényének megfelelője: az első argumentumával meghatározott számot elosztja a második argumentumával deklarált számmal és az osztási maradékot adja eredményül!
Ezzel a két FILTER-rel kicsit bonyolult ez a képlet Tanító bácsi! Miért nem használunk logikai operátort? Igazad van Pistike! Csináljuk meg úgy is!
DAX, FILTER függvény, több feltétel logikai operátorokkal összekötve
A képen az ÉS logikai operátort kék betűszínnel emeltem ki. A fenti módszerrel egyetlen FILTER függvénnyel is eredményre jutottunk. Most vegyünk egy összetett feltétel-rendszert tartalmazó feladatot! Állapítsuk meg a bajai és a váci telephely dolgozóinak számát, de csak azokat a kollégákat vegyük számba, akinek legalább kilenc bónusz-pontjuk van!
DAX, FILTER függvény, több feltétel logikai operátorokkal összekötve
A RELATED függvénynek nincs a programban megfelelője: segítségével kérdezhetjük le a kapcsolódó rekord adott mezőjében álló bejegyzést. Egyetlen argumentuma a mezőnév.
Adatnézetben a teljes táblára vonatkozóan az egyéni összesítés eredménye száznegyvennyolc. Ahhoz képest, hogy a munkatársak táblában összesen tíz rekordban találunk kilences vagy tízes bejegyzést, ez kissé soknak tűnik. A jelenség magyarázata: a DAX-ban a két logikai operátor nem egyenrangú, tehát a kiértékelés nem balról jobbra halad, hanem először az ÉS azután a VAGY kifejezések lesznek kiértékelve. Természetesen zárójelek vagy az IN operátor használatával már a helyes eredményre jutunk.
DAX, FILTER függvény, több feltétel kiértékelésének sorrendje
A felső képletben zárójelekkel, az alsóban az IN operatorral kényszerítettük ki a helyes kiértékelési sorrendet. Ha az IN operátor listája a szokásos, és nem kapcsos zárójelek között áll, akkor a #HIBA karakterláncot kapjuk eredményül. A hiba okaként ezt az üzenetet olvashatjuk: «Szemantikai hiba: A következő operátor vagy kifejezés ebben a környezetben nem támogatott: „()”.» Természetesen ez nem szemantikai, hanem szintaktikai hiba.
Ne felejtsük el, hogy a DAX-nak nincs NOT IN operátora, tehát az IN tagadása közvetve történik. Például, hányan dolgoznak a vállalatnál a bajai és a váci telephely munkatársai kivételével?
DAX, FILTER függvény, az IN szócska tagadása
A feltétel deklarálása a CONTAINSROW függvénnyel is történhet. Hányan dolgoznak az „előkészítés”-ben illetve a „gyártás”-ban. Ez a két terület a munkahelyek tábla részleg mezőjének egy-egy tétele.
DAX, FILTER függvény, feltétel a CONTAINSROW függvénnyel
A függvény első argumentuma kapcsos zárójelek között, pontosvesszővel elválasztva tartalmazza a második argumentumában álló mező számításba veendő tételeit. A kapcsos zárójelek itt is a VAGY logikai viszony alkalmazását jelentik. De a függvény kezelni tudja a logikai ÉS viszonyt is. Lássunk erre is egy példát.
DAX, CONTAINSROW függvény
Ezzel a képlettel a hét bónusz-pontos bajai előkészítők és a hatpontos váci gyártók létszámát kapjuk meg. A CONTAINSROW függvény első argumentuma ebben a képletben is a számításba veendő tételeket tartalmazza kapcsos zárójelek között, de most két zárójeles csoportban. A két zárójeles egység és a zárójelek között álló tételek is pontosvesszővel vannak elválasztva. A két zárójeles egység VAGY, a zárójeleken belül álló tételek ÉS logikai viszonyban vannak egymással. A függvény további argumentumai a szűrt mezők, a zárójelek között álló tételekkel azonos sorrendben. Valahogy így:
DAX, CONTAINSROW függvény argumentum-listája
A CONTAINSROW függvényről, a névkiegészítős bevítel során megjelenített leírás valamint a szerkesztés közben látható argumentumlista hibás! Sőt a szerkesztést követő hibaüzenet szövege sem igaz. De legalább működik Tanító bácsi! Ez Igaz Pistike!
margitfalvi.arpad@gmail.com