Hogyan tehető egy számított mező "default member"-ré

Az Analysis Services 2005 (AS2005) a következő hibaüzenetet adja, ha számított mezőt, (Calculated member-t) akarunk default member-ré tenni:

DefaultMember(Measures,Measures) (1, 1) The member '[Profit]' was not found in the cube when the string, [Measures].[Profit], was parsed.

Már az is furcsa, hogy a számított mezők meghatározásánál miért nem jelennek meg a választható dimenzió elemek között a számított mezők.

Ezekből persze arra következtethetnénk, hogy ez egy bug, hiszen már az előző Analysis Services-ben (AS2000) is lehetőségünk volt számított mezőt default member-ré tenni.

Nos. Ez nem hiba, és természetesen lehet a 2005-ös OLAP adatkockákban is számított mező a default member. Mielőtt azonban megvizsgálnánk, hogy mi okozza a hibaüzenetet, illetve hogyan lehet default member-ré tenni egy számított mezőt, ismerkedjünk meg azokkal a lépésekkel, amelyeket az Analysis Services 2005 az adatkocka feltöltése után elvégez.

Az Analysis Services felösszegzés utáni teendői:

  1. Meghatározza és rögzíti az általunk NEM meghatározott default member-eket
    • Ha az attribútum aggregálható (IsAggregatable=true) akkor az All member lesz a default member.
    • Ha az attribútum nem aggregálható (nincs All Level) akkor az Analysis Services véletlenszerűen dönti el, hogy melyik elem lesz a default. (Rendszerint az első elem).
    • Measure-ök közül az első nem rejtett elem lesz a default member.
  2. Meghatározza és rögzíti az általunk meghatározott default member-eket
  3. ...
  4. ...
  5. Lefuttatja az MDX scriptet (elkészíti a calculated membereket (számított mezőket))
  6. ...

Tehát a felösszegzés utáni első lépésben az AS meghatározza default member-eket, és csak később készülnek el a számított mezők. Azaz, az Analysis Services akkor akarja a calculated member-t default member-ré tenni, amikor az még nem is létezik.

A fentiekből következik, hogy default member-t azután kéne meghatároznunk, miután elkészültek a számított mezők. De ezt nem tehetjük meg, mert a default member-ekre szüksége van az Analysis Services-nek, méghozzá a kocka feltöltése után azonnal.

ALTER CUBE

Szerencsére a kocka elkészülte után van lehetőségünk a kocka módosítására az ALTER CUBE MDX utasítás segítségével. Nem határozunk meg default member-t (hagyjuk, hogy ezt a rendszer maga megtegye (1-es pontban leírt módon)), majd a számított mezők elkészülte után lefuttatunk egy, a következőhöz hasonló ALTER CUBE utasítást:

ALTER CUBE CURRENTCUBE

UPDATE DIMENSION [Measures],

DEFAULT_MEMBER = [Measures].[Profit];

 

A fenti utasítást beírva az MDX Script-be, (értelemszerűen a számított mező definiálása után) az SSAS módosítja a rendszer által meghatározott default member-t a [Profit] számított mezőre.

Megjegyzés: Az Analysis Services 2000 is ALTER CUBE-bal hozta létre default member-eket.

Felhasznált irodalom:

Kővári Attila - BI projekt

hozzászólás

A "felhasznált irodalom" rovatban szereplő link már nem él, helyette ahjánlható a http://sqlblog.com/blogs/mosha/archive/2005/12/31/default-members-mdx-scripts-security-kpis-and-perspectives.aspx.

Köszönöm szépen! Javítottam. Üdv, Attila

Új hozzászólás