Néhány érdekes dimenzióelem tulajdonság
Egy óriási hibát követtem el a nemrég. Véletlenül kitöröltem az éles dimenziótábla tartalmát. No nem baj. Elő a mentéssel. Visszaállítottam egy korábbi mentést, kiszedtem belőle a törölt dimenziótáblát és összehasonlítottam a ténytáblával. B meg. 3 új dimenzióelem került be az utolsó mentés óta.
Miért baj ez? Mert arra a 3 új dimenzióelemre már van hivatkozás a ténytáblában...
Visszavonhatnám az utolsó betöltéseket, és újratölthetném a hiányzó napokat. Ezzel törölném a ténytáblából is és a dimenzió táblából is az utolsó betöltéskor bekerült adatokat, és újra betölthetném őket. Jó gondolat, mert így visszakapnánk a konzisztenciát a tény és dimenziótáblák között, csakhogy erre nincs idő. Most nincs. Mit tehetnék még? Feltölthetném csak a törölt dimenziótáblát. Csakhogy ebben az esetben egyáltalán nem biztos, hogy ugyanazokat a mesterséges kulcsokat kapják meg az új dimenzióelemek, mint amelyeket már korábban megkaptak. Bár ennek kicsi a valószínűsége, de ha bekövetkezne, akkor előállhatna pl. az, hogy a korábban Gipsz Jakabhoz tartozó forgalom most észrevétlenül átkerülne Mekk Elekhez és viszont. (Olyan ez, mint ráfeküdni az iparvágányra: Kicsi a valószínűsége, hogy arra jön egy vonat, de ha arra jön, akkor a következmények katasztrofálisak)
Megnézhetném az OLAP adatbázisban, hogy milyen mesterséges kulcsokat kapott a három új dimenzióelem (hiszen onnan nem töröltem), és ha azok egyeznek a dimenziótábla betöltése után kapottakkal, akkor minden OK. Minden szám a helyére kerül és nem kell újrahúznom a teljes napot. S hogy hogyan kérdezhetem le hogy milyen mesterséges kulcsokat kapott a 3 kitörölt dimenzióelem? Erről fog szólni a cikk.
Member_Key tulajdonság
Az Analysis Services a dimenzióelemek Member_Key tulajdonságában tárolja az adott dimenzióelem kulcsát, ami vagy a dimenzióelem mesterséges kulcsa, vagy a dimenzióelem természetes kulcsa. (Ha a dimenzióelem a hierarchia elemi szintjén helyezkedik el, akkor jellemzően a mesterséges kulcsa, ha nem, akkor jellemzően a dimenzióelem természetes kulcsát tároljuk itt.)
A dimenzióelem kulcsát - amire nekünk első körben szükségünk lesz - a dimenzióelem Member_Key tulajdonságában tárolja az Analysis Services. Ezt így kérdezhetünk le:
With
member measures.[Mest. kulcs] as [Date].[Day].CurrentMember.Member_Key
Select
Measures.[Mest. kulcs] on 0,
[Date].[Day].members on 1
From [$Date]
Member_Name és Member_Value tulajdonság
A mesterséges kulcs mellé szükségem van a dimenzióelem természetes kulcsára is vagy a dimenzióelem megnevezésére. A természetes kulcsnak nincs külön erre a célra fenntartott tulajdonsága, de azt opcionálisan tárolhatjuk a Member_Value tulajdonságban. A megnevezésnek viszont van: A Member_Name tulajdonság. Ezeket a fentiek analógiájára így kérdezhetjük le:
With
member measures.[Mest. kulcs] as [Date].[Day].CurrentMember.Member_Key
member measures.[Term. kulcs] as [Date].[Day].CurrentMember.Member_Value
member measures.[Megnevezés] as [Date].[Day].CurrentMember.Member_Name
member measures.[UniqueName] as [Date].[Day].CurrentMember.Member_Unique_Name
Select
{Measures.[Mest. kulcs], Measures.[Term. kulcs], Measures.[Megnevezés], Measures.[UniqueName]} on 0,
[Date].[Day].members on 1
From [$Date]
A lekérdezés eredménye a dátum dimenzió esetén:
A Member_Key, a Member_Value és a Member_Name tulajdonságok lekérdezése
Innentől kezdve a kapott eredményt már csak össze kellett hasonlítanom az újratöltött dimenziótáblával és ha egyeznek a mesterséges kulcsok az OLAP és a relációs adatbázisban, akkor a probléma megoldva.
Egyeztek. Verejték letöröl. Jó lenne hazamenni mielőtt újabb kárt okozok...
De térjünk még vissza egy kicsit erre a Member_Value tulajdonságra, mert ezzel kapcsolatban érdemes egy-két dolgot észben tartania.
Ahogy fent említettem a dimenzióelemek Member_Value tulajdonságában tárolhatjuk a dimenzióelemek természetes kulcsát. Azt azonban tudnunk kell, hogy a front-endek, mint például az Excel, vagy a ProClarity nem támogatják a Member_Value tulajdonság megjelenítését. Azaz hiába tároljuk itt a természetes kulcsokat, arra a front-endekkel keresni, szűrni nem fogunk tudni, azokat a riporton nem fogjuk tudni megjeleníteni.
Kivéve egy esetet. Az Excel 2007 az idő dimenzió esetén figyeli, hogy van-e a Member_Value tulajdonságban dátum tárolva, és ha igen, akkor az idő dimenzió felett megjelenik az alábbi dátum szűréseket támogató menü: (Erről bővebben itt)
Az Excel 2007 dátum szűréseket támogató szolgáltatása
Ezért az idő dimenzió esetén midig érdemes feltölteni a Member_Value tulajdonságot az adott dátum természetes kulcsával. A 2009. február 15 dimenzióelemnek pl a
- kulcsa (Member_Key): 20090215
- Értéke (Member_Value): 2009-02-15
- Neve (Member_Name): február 15, 2009
Ha egy nem dátum típusú dimenziónak is meg akarjuk jeleníteni a természetes kulcsát a riportokon, akkor a természetes kulcsra létre kell hozunk egy külön attribútumot. Azaz a cikk dimenziónak a cikkek mellett lesz majd egy cikkszám attribútuma is.
Vége.
Kővári Attila - BI projekt
Új hozzászólás