Előző év azonos időszaka: Tippek a mutató kiszámításához
Az előző cikkben bemutattam, milyen szempontokat kell figyelembe vennie ha adatkockáiban az aktuális időszak teljesítménye mellett ki akarja mutatni az előző év azonos időszakának teljesítményét is. Ezt megteheti egyrészt egy új attribútum kialakításával, amely az év hónapjait tartalmazza, másrészt egy új minidimenzió bevezetésével amely tartalmazza az [előző év azonos időszaka] számított mezőt. (Bővebben lásd az előző cikkben)
Jelen cikk a megvalósítási kérdéseket járja körül. Meg fogom mutatni Önnek, a lekérdezés alapját képező ParallelPeriod MDX függvényt és annak viselkedését, hogy ne a felhasználói figyelmeztessék: Rosszak az előző évek adatai
A ParallelPeriod MDX függvény
A ParallelPeriod MDX függvény az a függvény, amely visszaadja idén februárra az előző év februárját. kicsit szakszerűbben fogalmazva a ParallelPeriod MDX függvény visszaadja az előző periódus azon dimenzióelemét, amelynek az adott dimenzió elemhez viszonyított pozíciója azonos. Ezt mindjárt megpróbálom elmagyarázni, mert ez a definíció megértése fontos lesz ahhoz, hogy megértse: miért működik néha „rosszul” a ParallelPeriod MDX függvény.
Tegyük fel, hogy idén februárt akar összehasonlítani tavaly februárral. Ebben az esetben készítenie kell egy számított mezőt, amely egy
CREATEMEMBER CURRENTCUBE. [Idősor kalkulációk].[Előző év azonos időszaka]
AS (ParallelPeriod ([Date].[FY].[Fiscal Year], 1), [Idősor kalkulációk].[Aktuális időszak]),
VISIBLE = 1 ;
képlethez hasonló függvényt hív meg, és ez a függvény idén februárban vissza fog térni Önnek a tavaly februári értékekkel. Hiszen a ParallelPeriod MDX függvény:
- Veszi az aktuális (2007 február) elem év szinten elhelyezkedő elemét (megkapja 2007-et)
- Év szinten visszalép egyet (megkapja 2006-ot)
- És veszi annak hónap szinten elhelyezkedő, azonos sorszámú, azaz a 2. elemét (így megkapja 2006 februárt)
Mutatom:
A ParallelPeriod MDX függvény működése
Mikor kerülhet bajba?
Ha idő hierarchiája nem teljes évet tartalmaz. Például ha a naptári hierarchiája nem január 1-vel indul. S habár ez főbenjáró vétség, mégis léteznek olyan esetek, amikor ez elkerülhetetlen. Mondok majd példát, hogy mikor, de először nézzük meg a problémát. Tegyük fel, hogy cége 2006. júliusában indult, ezért nem vette fel 2006 I. félévét az mondván, hogy nem is működött a cég akkor minek vegye fel. (Mondom, hogy főbenjáró vétség, de a példa kedvéért tegyük fel, hogy most ilyen a hierarchiája). Mit fog csinálni a ParallelPeriod MDX függvény?
- Veszi az aktuális (2007 február) elem év szinten elhelyezkedő elemét (megkapjuk 2007-et)
- Év szinten visszalép egyet (megkapjuk 2006-ot)
- És veszi annak hónap szinten elhelyezkedő, azonos sorszámú, azaz a 2. elemét (így kapjuk meg 2006 augusztust!)
A ParallelPeriod MDX függvény működése csonka idődimenzió esetén
Azaz a ParallelPeriod MDX függvény 2007 február előző év azonos időszakának 2006 augusztust adja vissza!
Mutatom ugyanezt táblázatos formában (és negyedév szinten):
Persze mondhatná, hogy éppen ezért nem vesz fel csonka idődimenziót. De sajnos vannak esetek, amikor ezt nem teheti meg.
Naptári és pénzügyi év szerinti hierarchiák az idő dimenzión
Képzeljen el egy vállalata a pénzügyi évnek megfelelő hierarchia szerint is, és a naptári hierarchia szerint is ki akarja mutatni bevételeit. És képzelje el azt, hogy a pénzügyi év júliusban kezdődik. Mikortól indítja az idő dimenziót? januártól, vagy júliustól? Sajnos akár honnan indítja, egyik hierarchiája biztos, hogy csonka lesz.
Apropó. Tudja miért választanak a cégek a naptári évtől eltérő hierarchiát? Képzelje el, hogy Ön egy pezsgőgyártó céget alapít. (A pezsgőgyárakról tudni kell hogy éves forgalmuk több mint 90%-át december hónap utolsó két hetében realizálják). Mi történik, ha januárral kezdi a pénzügyi évet? egy egész éven át izgulhat, hogy vajon eléri ez az éves tervet. És mi történik, ha decemberben indítja a pénzügyi évet? Az év első hónapjában elérte az éves terv 95%-át, s ettől minden befektető boldog lesz.
Még egy másik érdekesség, amit Radó István mesélt egy IFUÁs előadáson a pénzügyi évek kezdőpontjáról. Annak idején azt hitték, hogy azért decemberben realizálódik az éves árbevétel jelentős része, mert az ügyfelek decemberben szívesebben költenek. Aztán amikor áttették a pénzügyi év zárását márciusra, meglepődve tapasztalták, hogy a bevételek jelentős része március hónap környékén realizálódik...
No de kanyarodjunk vissza eredeti problémánkhoz: Hogyan oldjuk meg, hogy mindkét hierarchia mentén a helyes parallelperiod értékeket lássuk?
Az áthidaló megoldás (Workaround)
Talán a legjobb megoldás, ha csak egy hierarchiát épít, és a másik hierarchia szintjeit meghagyja attribútumként. (úgy is ritka azon esetek száma amikor mindkét hierarchiára szükség van). Ha azonban az Ön vállalata köti az ebet a karóhoz, és azt mondja, hogy mindkét hierarchiára szüksége van, akkor Önnek ki kell találnia valamit. Szerencsére van megoldás: használja a a ParallelPeriod helyett a LAG() MDX függvényt.
A Lag() MDX függvény a paraméterben megkapott számú elemet lép vissza (vagy előre) az adott elem szintjén. A [2007 február].Lag(12) MDX függvény [2006 február] -t ad vissza, ha létezik tavaly február. Ha nem akkor semmit. És nekünk pont ezt kell kihasználnunk, ha valamelyik hierarchiánk csonka!
Ebben az esetben az előző év azonos időszakát visszaadó számított mezőt szintenként kell számítani: Év szinten 1-et, negyedév szinten 4-et, hónap szinten 12-őt kell visszalépni. De ha naptári és pénzügyi év szerint is ki akarja mutatni vállalata teljesítményét, akkor nincs mit tenni: a ParallelPeriod() függvény helyett a Lag() MDX függvényt kell választania!
CREATEMEMBER CURRENTCUBE.[Idősor kalkulációk].[Előző év azonos időszaka] as NULL;
Scope ([Date].[FY].[Fiscal Year].members);
([Idősor kalkulációk].[Előző év azonos időszaka] = ([Idősor kalkulációk].[Aktuális időszak], [Date].[FY].currentmember.lag(1)));
EndScope;
Scope ([Date].[FY].[Fiscal Quarter].members);
([Idősor kalkulációk].[Előző év azonos időszaka] = ([Idősor kalkulációk].[Aktuális időszak], [Date].[FY].currentmember.lag(4)));
EndScope;
…
Felhasznált irodalom:
Kővári Attila - BI projekt
Új hozzászólás