There is one rowset for every axis. This rowset has at least 5n+1 columns where n is the number of dimensions projected along the axis (because there are five default properties that are available for each axis, and one more column for the TUPLE_ORDINAL). In addition to this, there may be provider-specific default properties, or the application may have selected additional properties by using the DIMENSION PROPERTIES clause. Because of this, it is possible that the number of columns corresponding to a dimension is more than five. The field rgcColumns in the MDAXISINFO structure for this axis points to an array containing the number of columns in the axis rowset for this dimension.
The axis rowset has columns in the following order:
The five default properties for each dimension, in order of their occurrence in the axis rowset, are:
Note the following rules about DISPLAY_INFO:
To distinguish these column names, they are prefixed by dimension_name. For example, the column names for the SalesRep dimension are: “[SalesRep].[MEMBER_UNIQUE_NAME]”, “[SalesRep].[MEMBER_CAPTION]”, “[SalesRep].[LEVEL_UNIQUE_NAME]”, “[SalesRep].[LEVEL_NUMBER]”, “[SalesRep].[DISPLAY_INFO]”.
The data types for TUPLE_ORDINAL and the five mandatory properties are:
The data types of provider-specific properties and properties selected by using the DIMENSION PROPERTIES clause are available in the PROPERTIES schema rowset. This information is also available by calling IColumnsInfo on the Rowset object corresponding to an axis rowset.
Consider a dataset that looks like this:
This dataset has two axes, x and y (0 and 1).
The x-axis has the following elements:
Note that the country JAPAN has no regions defined in this database. Note also that USA_North has its cities expanded while USA_South does not have its cities expanded.
The y-axis has the following elements:
Qtr1 and Qtr4 have their months expanded while Qtr2 and Qtr3 do not.
The MDAXISINFO structure for the x-axis has:
The MDAXISINFO structure for the y-axis has:
The axis rowset for the x-axis is shown in the table below. (The value of DISPLAY_INFO is shown in the form “x, y, z” where z = number of children, y = MDDISPINFO_DRILLED_DOWN and x = MDDISPINFO_SAME_PARENT_AS_PREV.)
TUPLE_ ORDINAL |
[SalesRep]. [MEMBER_ UNIQUE_ NAME] |
[SalesRep]. [MEMBER_ CAPTION] |
[SalesRep]. [LEVEL_ UNIQUE_ NAME] |
[SalesRep]. [LEVEL_ NUMBER] |
[SalesRep]. [DISPLAY_ INFO] |
0 | [SalesRep]. [Venkatrao] |
Venkatrao | RepName | 1 | 0, 0, 0 |
1 | [SalesRep]. [Venkatrao] |
Venkatrao | RepName | 1 | 0, 0, 0 |
2 | [SalesRep]. [Venkatrao] |
Venkatrao | RepName | 1 | 0, 0, 0 |
3 | [SalesRep]. [Venkatrao] |
Venkatrao | RepName | 1 | 0, 0, 0 |
4 | [SalesRep]. [Netz] |
Netz | RepName | 1 | 0, 0, 0 |
5 | [SalesRep]. [Netz] |
Netz | RepName | 1 | 0, 0, 0 |
6 | [SalesRep]. [Netz] |
Netz | RepName | 1 | 0, 0, 0 |
7 | [SalesRep]. [Netz] |
Netz | RepName | 1 | 0, 0, 0 |
(This is the same table continued.)
[Geography]. [MEMBER_ UNIQUE_ NAME] |
[Geography]. [MEMBER_ CAPTION] |
[Geography]. [LEVEL_ UNIQUE_ NAME] |
[Geography]. [LEVEL_ NUMBER] |
[Geography]. [DISPLAY_ INFO] |
[The World]. [North America]. [USA]. [USA_North]. [Seattle] |
Seattle | City | 5 | 0, 0, 0 |
[The World]. [North America]. [USA]. [USA_North]. [Boston] |
Boston | City | 5 | 1, 0, 0 |
[The World]. [North America]. [USA]. [USA_South] |
Southern Region, USA | Region | 3 | 0, 0, 25 |
[The World]. [Asia]. [Japan] |
Japan | Country | 2 | 0, 0, 12 |
[The World]. [North America]. [USA]. [USA_North]. [Seattle] |
Seattle | City | 5 | 0, 0, 0 |
[The World]. [North America]. [USA]. [USA_North]. [Boston] |
Boston | City | 5 | 1, 0, 0 |
[The World]. [North America]. [USA]. [USA_South] |
Southern Region, USA | Region | 3 | 0, 0, 25 |
[The World]. [Asia]. [Japan] |
Japan | Country | 2 | 0, 0, 12 |
The axis rowset for the y-axis is as shown below. (The value of DISPLAY_INFO is shown in the form “x, y, z” where z = number of children, y = MDDISPINFO_DRILLED_DOWN, and x = MDDISPINFO_ SAME_PARENT_AS_PREV.)
TUPLE_ ORDINAL |
[Quarters]. [MEMBER_ UNIQUE_ NAME] |
[Quarters]. [MEMBER_ CAPTION] |
[Quarters]. [LEVEL_ UNIQUE_ NAME] |
[Quarters]. [LEVEL_ NUMBER] |
[Quarters]. [DISPLAY_ INFO] |
0 | Jan | January | Month | 2 | 0, 0, 31 |
1 | Feb | February | Month | 2 | 1, 0, 29 |
2 | Mar | March | Month | 2 | 1, 0, 31 |
3 | Qtr2 | Quarter 2 | Quarter | 1 | 0, 0, 3 |
4 | Qtr3 | Quarter 3 | Quarter | 1 | 1, 0, 3 |
5 | Oct | October | Month | 2 | 0, 0, 31 |
6 | Nov | November | Month | 2 | 1, 0, 30 |
7 | Dec | December | Month | 2 | 1, 0, 31 |
Note In this example, it is assumed that the members of the SalesRep and Geography dimensions need to be qualified and members from all other dimensions need not be qualified (for ensuring uniqueness). It is also assumed that all level names are unique without qualification.
If the MDX expression contains a DIMENSION PROPERTIES clause that selects properties of members, these properties are available in the axis rowset. Each property appears as a column in the axis rowset, whose name is <level_name>.<property_name>, where <level_name> is the unique name of the level to which the property belogs. The property columns (if any) come after the mandatory columns (MEMBER_UNIQUE_NAME, MEMBER_CAPTION, LEVEL_UNIQUE_NAME, LEVEL_NUMBER, and DISPLAY_INFO) for each dimension.
Note As mentioned before, MEMBER_UNIQUE_NAME, MEMBER_CAPTION, LEVEL_UNIQUE_NAME, LEVEL_NUMBER, and DISPLAY_INFO are always available in the axis rowset. If these properties are specified in the DIMENSION PROPERTIES clause, they are ignored. The effect is as if they were not in the DIMENSION PROPERTIES clause.
All providers are required to support the following mandatory properties for each member:
The meanings of these properties are the same as the respective columns of the MEMBERS rowset. (See “MEMBERS Rowset” in this chapter.)
The consumer can include any of these properties in the axis rowset by specifying them on the DIMENSION PROPERTIES clause.
Calculated members have well-defined values for all the mandatory member properties. They have a name, a unique name (which can be the qualified name or a different unique name generated by the provider), and so on. Most of these are derived from the member definition in the WITH clause or in the CREATE clause.
The following properties need special mention:
The values of the nonmandatory member properties, if any, are provider-defined.