Egytengelyes (1 dimenziós) lekérdezések MDX-ben

Az MDX a "többdimenziós" MSOLAP adatbázis lekérdező nyelve. Azért hívjuk többdimenziósnak, mert könnyen felcserélhetjük a sor oszlop és lapozó dimenziókat, azaz bármit ki tudunk rakni sorra és oszlopra. Ez két vagy több (maximum 128) dimenzió esetén igaz is, viszont egyetlenegy dimenzió esetén csak korlátozottan.

Persze gondolhatnánk, hogy minek egydimenziós lekérdezés, hiszen mindig csak táblázatokat jelenítünk meg a felhasználóknak és a táblázatoknak két dimenziójuk van. (például cikkek vannak a sorokon és hónapok az oszlopokon)

De vannak speciális esetek, amikor szükség van egytengelyes (egy dimenziós) lekérdezésre. (Én már kétszer is belefutottam ebbe a problémába. Először akkor, amikor egyetlenegy szumma összeget akartam lekérdezni az OLAP-ból, másodszor amikor egy dimenzió (hierarchia) összes elemét ki akartam írni egy relációs táblába. Mindkét esetben MSSQL-ből akartam lekérdezni az OLAP adatbázist (Linked server segítségével))

Egytengelyes lekérdezést háromféleképpen is készíthetünk

Select {[Idöszak].members} on columns

from [Fix költség terv 2006]

 

Select {[Idöszak].members} on axis(0)

from [Fix költség terv 2006]

 

Select {[Idöszak].members} on 0

from [Fix költség terv 2006]

 

Egytengelyes (1 dimenziós) lekérdezések MDX-ben

Ahol az axis(0) jelenti az oszlopot, axis(1) a sort, .. Ha az axis(0)-át átírjuk axis(1)-re, vagy row-ra, ami teljesen logikus lenne, akkor hibaüzenet kapunk: Unable to open cellset. Axis name is unrecognized or duplicated, or it creates a sequence gap, '1'. VAGY SQL 2005-ben Axis numbers specified in a query must be sequentially specified, and cannot contain gaps.

SQL 2000-ben nem találtam megoldást arra, hogy a másik tengelyen jelenítsem meg az időszak dimenzió elemeit. (illetve félig sikerült az MDX Sample application-ben: kiírta az eredményt az alábbi formában, de hibaüzenetet adott: Unable to display opened cellset.. Linked server-ből pedig már nem is futott le)

Egydimenziós MDX lekérdezés

De most, a Reporting services 2005 tanulmányozása közben észrevettem, hogy az RS2005 fel tudja tölteni a combo box-ot dimenzióból. Megnéztem, hát hogy milyen MDX lekérdezést generál és ezt most közreadom:

Select

{} ON COLUMNS,

{[Idöszak].members} ON ROWS

from [Fix költség terv 2006]

És ez tényleg működik, igaz csak Analysis Services 2005-ben. AS2000-re a probléma nyitott maradt.

És zárásul egy csemege: Az Analysis Services 2005-ben le lehet kérdezni MDX-ből egy dimenziót úgy, mint egy adatkockát:

SELECT [Fiscal Time].[YHQM].MEMBERS ON 0 FROM [$Fiscal Time]

Egytengelyes (1 dimenziós) lekérdezések MDX-ben

Igaz, ezt a lehetőséget csak az adatbázis adminisztrátorok használhatják, egyszerű felhasználóknak nincs jogosultságuk hozzá. (Erről bővebben itt olvashatnak)

Kővári Attila - BI projekt

Új hozzászólás