Additional Considerations

This section discusses additional considerations specific to this release of Microsoft® PivotTable® Service.

Unambiguous Names

This implementation uses two concepts for names and their use: either names are unique within the scope of their "parent" (for example, a level is unique within its parent hierarchy) or names are unique within some "global" scope. OLE DB for OLAP currently uses both naming methods. Microsoft PivotTable Service allows duplicate member, level, and hierarchy names. Cube names must be unique within a database. Dimension names must be unique within a cube (and within a database if the dimension is public). To avoid costly checks for uniqueness, Microsoft PivotTable Service delivers unambiguous names that contain delimited elements and are fully qualified within the scope of some known cube. For example:

[Geography Dimension].[Region Hierarchy].[USA].[NY].[New York]

Although Microsoft PivotTable Service strives to be consistent in this approach, such consistency is not required by the OLE DB for OLAP specification, according to which names need not contain delimited elements and need not be fully qualified.

Empty Axes

An "empty" axis is an axis with no members. It is equivalent to an empty rowset or cursor in a SQL statement. For example, the SQL query

SELECT * FROM Sales WHERE Amount >1000000 AND Salesperson = 'Jacobsen'

may not return any rows. However, an empty axis is not the same as an absent axis; an empty axis is present, but it contains no members.

You can obtain MDAXISINFO and the AXIS rowset for an empty axis. It is not possible to obtain a cell value because cell values are defined at the intersection of each dimension member from each axis (including the filter axis) and one axis has no such intersection. Another way to explain this is that the set of p axes defines a p-dimensional result, and the cells comprise the volume of the p-dimensional space. When an axis is empty, the length along that dimension is 0, and therefore the volume of the p-dimensional space is 0.

Axis members in Microsoft PivotTable Service correspond to rows in SQL queries. The result of an axis expression is a set of tuples that are dimension/level members, in the same way that a SQL query results in a set of tuples that are column members.

Using this analogy, it is legal to have no rows from an SQL query, and no dimension/level members on an axis. However, it is illegal to ask for no columns in a SQL query, and legal to ask for no dimensions in an axis expression. (Although legal, the request is probably useless.)

It is legal, however, to have an axis with no dimensions. MDX supports the notion of an empty axis, which is different from an illegal axis. One can easily create an empty axis by specifying {}. Empty axes are frequently encountered when using the "NON-EMPTY" clause, since it removes axis tuples containing only empty values.

No Axes

A query with no axes has one cell. Each dimension is accounted for and is present in the filter axis. The single cell coordinate is zero. You might expect that the p-dimensional space occupied by the result set has zero volume, but that is not true because there are no displayed axes to define the space other than the filter axis, which has only one tuple.

Recursive Formulas and Sets

In general, formulas and sets can be defined in terms of other formulas and sets.

Threading Issues

Microsoft PivotTable Service is thread safe. Its OLE COM threading model is "Both" (no thread marshalling for "Apartment-threaded" or "Free-threaded" clients).

Microsoft PivotTable Service establishes a single connection to the server for each DataSource object. The communication protocol is serialized, with the granularity of the DataSource (this is subject to change in the future).

Rowsets are not thread safe. This includes axis rowsets, schema rowsets, and flattened datasets.