Members, Tuples, and Sets
Before proceeding on the creation of a Multidimensional Expressions (MDX) query, you should understand the definitions of members, tuples and sets, as well as the MDX syntax used to construct and refer to these elements.
Members
A member is an item in a dimension representing one or more occurrences of data. Think of a member in a dimension as one or more records in the underlying database whose value in this column falls under this category. A member is the lowest level of reference when describing cell data in a cube.
For example, the following diagram is shaded to represent the Time.[2nd half].[3rd quarter]
member.
The bracket characters, [ and ], are used if the name of a member has a space or a number in it. Although the Time dimension is one word, bracket characters can also be used around it as well; the member shown in the previous diagram could also be represented as:
[Time].[2nd half].[4th quarter]
Member Names and Member Keys
A member can be referenced by either its member name or by its member key. The previous example referenced the member by its member name, 4th quarter, in the Time dimension. However, the member name can be duplicated in the case of dimensions with nonunique member names, or it can be changed in the case of changing dimensions.
An alternate method to reference members is by referencing the member key. The member key is used by the dimension to specifically identify a given member. The ampersand (&) character is used in MDX to differentiate a member key from a member name, as shown in the following example:
[Time].[2nd half].&[Q4]
In this case, the member key of the 4th quarter member, Q4, is used. Referencing the member key ensures proper member identification in changing dimensions and in dimensions with nonunique member names.
The ampersand character can be used to indicate a member key reference in any MDX expression.
Calculated Members
Members can also be created, as part of an MDX query, to return data based on evaluated expressions instead of stored data in a cube to be queried. These members are called calculated members, and they provide a great deal of the power and flexibility of MDX. The WITH keyword is used in an MDX query to define a calculated member. For example, if you want to provide a forecast estimate all of the packages by adding 10% of the existing value of the Packages measure, you can simply create a calculated member that provides the information and use it just like any other member in the cube, as demonstrated in the following example.
WITH MEMBER [Measures].[PackagesForecast] AS
'[Measures].[Packages] * 1.1'
For more information, see Calculated Members.
Member Functions
MDX supplies a number of functions for retrieving members from other MDX entities, such as dimensions and levels, so that explicit references to a member are not always necessary. For example, the FirstChild function allows the retrieval of all the members from a given dimension or level; to get the first child member of the Time dimension, you can explicitly state it, as demonstrated in the following example:
Time.[1st half]
You can also use the FirstChild function to return the same member, demonstrated in the next example.
Time.FirstChild
For more information about MDX member functions, see MDX Function List.
Tuples
A tuple is used to define a slice of data from a cube; it is composed of an ordered collection of one member from one or more dimensions. A tuple is used to identify specific sections of multidimensional data from a cube; a tuple composed of one member from each dimension in a cube completely describes a cell value. Put another way, a tuple is a vector of members; think of a tuple as one or more records in the underlying database whose value in these columns falls under these categories. A series of diagrams presents different types of tuples.
The shaded area of the cube represents the (Time.[2nd half])
tuple. Note that this tuple encompasses half of the cube, because it does not rule out any information in the Source or Route dimensions.
The following diagram is shaded to represent the (Time.[2nd half], Route.nonground.air)
tuple.
This tuple represents the cells at the intersection of these members.
In MDX, tuples are syntactically constructed depending upon their complexity. If a tuple is composed of only one member from a single dimension, often referred to as a simple tuple, the following syntax is acceptable.
Time.[2nd half]
If a tuple is composed of members from more than one dimension, the members represented by the tuple must be enclosed in parentheses, as demonstrated in the following example.
(Time.[2nd half], Route.nonground.air)
A tuple composed of a single member can also be enclosed in parentheses, but this is not required. Tuples are often grouped together in sets for use in MDX queries.
Tuple Functions
There are a few MDX functions that return tuples, and they can be used anywhere that a tuple is accepted.
For more information about tuple functions, see MDX Function List.
Tuples and Dimensionality
A tuple can encompass members in multiple dimensions, as well as multiple members from the same dimension. The term dimensionality is used to indicate the dimensions described by the members in a tuple. Order plays a factor in the dimensionality of a tuple, and can affect the use of a tuple within a set.
Sets
A set is an ordered collection of zero, one or more tuples. A set is most commonly used to define axis and slicer dimensions in an MDX query, and as such may have only a single tuple or may be, in certain cases, empty. The following example shows a set of two tuples:
{ (Time.[1st half], Route.nonground.air), (Time.[2nd half], Route.nonground.sea) }
A set can contain more than one occurrence of the same tuple. The following set is acceptable:
{ Time.[2nd half], Time.[2nd half] }
A set refers to either a set of member combinations, represented as tuples, or to the values in the cells that the tuples in the set represent, depending on the context of usage for the set.
In MDX syntax, tuples are enclosed in braces to construct a set.
Important Sets composed of a single tuple are not tuples; they are interpreted as sets by MDX. Certain MDX functions accept tuples as parameters, and will raise an error if a single tuple set is passed. Tuples and single-tuple sets are not interchangeable.
Set Functions
Explicitly typing tuples and enclosing them in braces is not the only way to retrieve a set. MDX supports a wide variety of functions that return sets.
The colon operator allows you to use the natural order of members to create a set. For example, the following set:
{[1st quarter]:[4th quarter]}
retrieves the same set of members as the following set:
{[1st quarter], [2nd quarter], [3rd quarter], [4th quarter]}
The colon operator is an inclusive function; the members on both sides of the colon operator are included in the resulting set.
Other MDX functions that return sets can be used either by themselves or as part of a comma-delimited list of members. For example, all of the following MDX expressions are valid:
{Time.Children}
{Time.Children, Route.nonground.air}
{Time.Children, Route.nonground.air, Source.Children}
For more information about set functions, see MDX Function List.
Sets and Dimensionality
Like tuples, sets also have dimensionality. As a set is composed of tuples, so the dimensionality of a set is expressed by the dimensionality of each tuple within it. Because of this, tuples within a set must have the same dimensionality. In other words, this example would not work as a set:
{ (Time.[2nd half], Route.nonground.air), (Route.nonground.air, Time.[2nd half]) }
The order of tuples in a set is important; it affects, for example, the nesting order in an axis dimension. The first tuple represents the first, or outermost, dimension, the second tuple represents the next outermost dimension, and so on.
Named Sets
A named set is a set for which an alias has been created. A named set is most commonly used in complex MDX queries to make these queries easier to read and to increase the ease of maintenance.
For more information about named sets, see Building Named Sets in MDX.