About the Series …
This article is a member of the series, MDX Essentials.
The series is designed to provide hands-on application of the fundamentals of
the Multidimensional Expressions (MDX) language, with each tutorial
progressively adding features designed to meet specific real-world needs.
For more information about the series in general, as well as
the software and systems requirements for getting the most out of the lessons
included, please see my first article, MDX at First Glance: Introduction to MDX Essentials.
Note: Current updates are assumed for MSSQL
Server, MSSQL Server Analysis Services, and the related Books
Online and Samples.
Overview
In
this lesson, we will expose another popular function in the MDX toolset, the .Name
function. The general purpose of the .Name function is,
unsurprisingly, to return the name of the object to which it is
appended. It can be used with hierarchies, dimensions, levels,
and members, so it is easy to see that .Name offers a great deal
of flexibility. For that matter, I have found in working with MDX in Analysis
Services, as well as in Reporting Services and various other
reporting applications, that the .Name function allows us to exercise a
great deal of presentation sleight of hand, at times.
The .Name
function can be leveraged in activities that range from generating simple lists
to supporting sophisticated presentations. We will introduce the function,
commenting upon its operation and touching upon the creative sorts of effects
that we can employ it to deliver. As a part of our discussion, we will:
- Examine the syntax surrounding the function;
-
Undertake illustrative examples of the uses of the function in
practice exercises; -
Briefly discuss the results datasets we obtain in the practice
examples.
The .Name Function
Introduction
According to the Analysis Services
Books Online, the .Name function "returns the name of a level, dimension, member, or hierarchy." .Name
has many applications, including its use with these Analysis Services objects, as well as its pairing with other MDX
functions to leverage its power even further. As an illustration, I use it
constantly with the .CurrentMember function; we will see an example of
this combination within our practice exercises later.
We will examine the syntax for the .Name
function after a brief discussion in the next section. We will then explore some
of the "presentation leverage" it offers the knowledgeable user using
practice examples for a couple of scenarios, constructed to support
hypothetical business needs that illustrate uses for the function. This will
allow us to activate what we explore in the Discussion and Syntax
sections, where we will get some hands-on exposure in creating expressions that
leverage the .Name function.
Discussion
To restate our initial explanation of its operation, the .Name
function, when acting upon a level, dimension, member,
or hierarchy, returns the name of the object to which it is appended
with the period (".") delimiter. .Name can be used for a great
deal more than the support of simple lists of object names, as we have
intimated. When coupled with other functions, as we shall see, we can leverage
.Name to deliver a wide range of analysis and reporting utility.
The Name function returns the name of the object, not
the unique name (the "fully qualified" name in MDX), which is
returned via the .UniqueName function. (We will examine the .UniqueName
function in the next article of this series, where we will continue an example
we begin at the end of our practice session here as a prelude to an exercise
where we use .Name and .UniqueName together to produce a dataset
for a specific objective.)
Let’s look at some syntax illustrations to further clarify
the operation of .Name.
Syntax
Syntactically, in using the .Name
function to return the associated name, the object upon which we seek to
apply the .Name function is specified to the left of .Name. The
function takes the object to which it is appended as its argument, and
returns within a string the name of the object specified.
The general syntax is shown in the following string:
<<Object >>.Name
Using .Name could not be easier.
When using the function to return the name of one of the several objects
with which it works, we simply append it to the right of the object under
consideration. We can see a syntax example, for each of the objects for which .Name
can return a name, in Table 1 below.
Object |
Example of Use: |
Hierarchy |
[Date].[Calendar |
Dimension |
[Warehouse].Name |
Level |
[Warehouse].[Warehouse City].Name |
Member |
[Warehouse].[Warehouse City].[Seattle]. Name |
Table 1: Examples Showing the .Name Function Employed with
Different Objects
As an example, the following
snippet:
[Warehouse].[Warehouse City]. Name
returns City, the name
of the Warehouse City level. As another
example, the following:
[Warehouse].[Warehouse City]. [Seattle]
returns Seattle, the name
of the Warehouse City level member Seattle. As is probably
obvious, the .Name function can be best leveraged by combining it with
other functions, particularly "relative" functions, to generate lists
of names, and so forth, as we will see in short order.
NOTE: For more information on several of the "relative"
functions, see my article MDX
Member Functions: "Relative" Member Functions,
within the Database Journal MDX Essentials series.
We will practice some uses of the .Name function in
the section that follows.