Professional Documents
Culture Documents
Microsofts proposal for a multidimensional query and presentation language for OLE DB for OLAP
Robert Fenk March 11, 1999
Page 1
Robert Fenk
Contents
MDX Overview
Data Cube MDX Syntax Data Set
MDX and Range Queries MDX Summary Implementing MDX Processing of two Example Queries
Page 2 Robert Fenk February 17, 2000, mdx-vortrag.tex
MDX Overview
MDX query
Page 3
Robert Fenk
Page 4
Robert Fenk
Salespersondim:
Page 5
Robert Fenk
Hierarchy: Weeks Level: All Level: Year Level: Weeks Level: Days
Level: Year
...
1985
...
1998.Qtr1
1998
Level: Quarter
1998.Qtr2 1998.Qtr3 1998.Qtr4 Level: Month
1998.Qtr1.Jan 1998.Qtr1.Feb 1998.Qtr1.Mar 1998.Qtr4.Oct 1998.Qtr4.Nov 1998.Qtr4.Dec
Level: Day
1998.Qtr1.Jan.1 1998.Qtr1.Jan.31 1998.Qtr1.Dec.1 1998.Qtr1.Dec.31
Page 7
Robert Fenk
measures
Sales 10023 90023 ... Turnover 190000 100000 ...
Page 8
Robert Fenk
one datacell
Value 50000 10023 190000 56789 90023 100000 ...
February 17, 2000, mdx-vortrag.tex
Product TV TV TV TV TV TV ...
Robert Fenk
DIMENSIONS Rowset
CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_NAME DIMENSION_UNIQUE_NAME DIMENSION_GUID DIMENSION_CAPTION DIMENSION_ORDINAL DIMENSION_TYPE DIMENSION_CARDINALITY DEFAULT_HIERARCHY DESCRIPTION
HIERACHIES Rowset
CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_UNIQUE_NAME HIERARCHY_NAME HIERARCHY_UNIQUE_NAME HIERACHY_GUID HIERACHY_CAPTION DIMENSION_NAME HIERACHY_CARINALITY DEFAULT_MEMBER ALL_MEMBER DESCRIPTION
LEVELS Rowset
CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_UNIQUE_NAME HIERARCHY_NAME HIERARCHY_UNIQUE_NAME LEVEL_NAME LEVEL_UNIQUE_NAME LEVEL_GUID LEVEL_CAPTION LEVEL_NUMBER LEVEL_CARDINALITY LEVEL_TYPE DESCRIPTION
MEASURES Rowset
CATALOG_NAME SCHEMA_NAME CUBE_NAME MEASURE_NAME MEASURE_UNIQUE_NAME MEASURE_CAPTION MEASURE_GUID MEASURE_AGGREGATOR DATA_TYPE NUMERIC_PRECISION NUMERIC_SCALE NUMERIC_UNITS DESCRIPTION
MEMBERS Rowset
CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_UNIQUE_NAME HIERACHY_UNIQUE_NAME LEVEL_UNIQUE_NAME LEVEL_NUMBER MEMBER_ORDINAL MEMBER_NAME MEMBER_UNIQUE_NAME MEMBER_TYPE MEMBER_GUID MEMBER_CAPTION CHILDREN_CARDINALITY PARENT_LEVEL PARENT_UNIQUE_NAME PARENT_COUNT DESCRIPTION
PROPERTIES Rowset
CATALOG_NAME SCHEMA_NAME CUBE_NAME DIMENSION_UNIQUE_NAME HIERACHY_UNIQUE_NAME LEVEL_UNIQUE_NAME MEMBER_UNIQUE_NAME PROPERTY_TYPE PROPERTY_NAME PROPERTY_CAPTION DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DESCRIPTION
Page 10
Robert Fenk
MDX Syntax
[WITH
Page 11
Robert Fenk
axis spec: maps dimensions to axes and gives restrictions. e.g.: 1998, 1999 ON COLUMNS cube spec: determines the data cube (usually a single data
cube)
slicer spec: restricts to dimensions not given in the axis spec (meaning of the cell contents)
Page 12 Robert Fenk February 17, 2000, mdx-vortrag.tex
MDXQuery Example
SELECT CROSSJOIN({Venkatrao, Netz}, {USA_North.CHILDREN, USA_South, Japan}) ON COLUMNS {Qtr1.CHILDREN, Qtr2, Qtr3, Qtr4.CHILDREN} ON ROWS FROM SalesCube WHERE (Sales, [1998], Products.All)
Page 13
Robert Fenk
Page 14
Robert Fenk
Japan Seattle
Page 15
Robert Fenk
MDX Summary
Projection:
members given in the axis
member : member
(range)
DESCENDANTS( member ,
Page 17
Robert Fenk
Page 18
Robert Fenk
Implementing MDX
1. Get an MDXParser 2. Map the data cube in a useful way to a DBMS e.g. a star schema of a RDBMS or a UBTree 3. Transform the MDXs to the querylanguage of the used DBMS e.g. MDX SQLs
4. Build up a data set with the results of the DBMSquery e.g. aggregations, reordering, folding 5. Provide the data set to the application
Page 19
Robert Fenk
Page 20
Robert Fenk
extract the restrictions on dimensions given in the axis spec and slicer spec determine by the slicer spec over which dimensions we
aggregate and get the aggregation type from the meta date Query Execution:
recognize ranges in the restrictions on the dimensions execute the transformed query
Transformation of the Result Relation to a Data Set:
reordering of the result relation according to the axis spec folding of the result relation according to the axis spec
Page 21 Robert Fenk February 17, 2000, mdx-vortrag.tex
SELECT { Salesperson.All.Venkatrao, Salesperson.All.Netz } ON AXIS(0) { Time.All.1998, Time.All.1999 } ON AXIS(1) FROM SalesCube WHERE { Product.All.TV, Measures.All.Sales }
Page 22
Robert Fenk
Page 23
Robert Fenk
TV Measures Sales
Product
Sales
Page 24
Salesperson Year
Robert Fenk
Data Set: By folding the result relation according to the axis specication we get the following data set: Sum of the TV Sales
Venkatrao 1998 1999 88 142 Netz 243 154
Page 25
Robert Fenk
SELECT CROSSJOIN({Venkatrao, Netz}, {1998.Jan, 1998.Feb, 1998.Mar, 1998}) ON AXIS(0) {TV, Computer, Product.ALL} ON AXIS(1) FROM SalesCube WHERE {Sales}
Page 26
Robert Fenk
Venkatrao Netz Product TV Computer Sales
Salesperson Year
Measures
Salesperson Year Month Product Salesperson Year Product Salesperson Year Month Salesperson Year
Month
Sales
ALL
Page 27
Page 28
Robert Fenk
TV Computer ALL
Page 29
Robert Fenk