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

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

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