MDX Essentials: Set and String Functions: The GENERATE() Function
March 7, 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: Service Pack 3 updates are assumed for MSSQL Server 2000, MSSQL Server 2000 Analysis Services, and the related Books Online and Samples.
In this lesson, we will introduce a function that provides us the ability to derive a set by systematically applying a set expression to each of the members of a set we define. GENERATE() is a potent function in our MDX toolset, in that it enables us to select precisely only certain members of a dimension level. It effectively operates upon two sets to create a new set, based upon the members of a second set that are also in a primary set.
We will consider elementary uses of the GENERATE() function in this article, and then explore more sophisticated uses in subsequent articles. As with the Basic Functions articles within this series, our objective is to build a foundation in the rudiments of the function, from which we can expand to more sophisticated exploitation in subsequent articles.
As we have noted the case to be with many other MDX functions, the GENERATE() function can be leveraged to perform tasks that range from the simple to the sophisticated. For that matter, in the limited body of knowledge that is commonly available surrounding MDX in general, at this writing, hands-on references to GENERATE() remain elusive, with the few documents that discuss the function describing it as "complex." We will introduce the function, commenting upon its operation and touching upon uses at a general level, and then we will: