MDX Essentials: String Functions: The .Name Function
August 1, 2005
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.
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:
The .Name Function
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.
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.
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:
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.
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.