<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'MDX' and 'SSAS'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=MDX,SSAS&amp;orTags=0</link><description>Search results matching tags 'MDX' and 'SSAS'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Learn more about MDX every day</title><link>http://sqlblog.com/blogs/marco_russo/archive/2011/11/16/learn-more-about-mdx-every-day.aspx</link><pubDate>Wed, 16 Nov 2011 08:05:37 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:39832</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;I started learning MDX in 1999 and after so many years of using it and teaching it to other people, I still discover something new every day. Not only because I use it in strange ways (well, this doesn’t happen every day, at least!) but because there are other interesting information to read. Jeffrey Wang &lt;a href="http://mdxdax.blogspot.com/2011/11/avoid-pitfalls-of-fact-data-prefetching.html"&gt;just published&lt;/a&gt; another interesting blog about data prefetching in MDX, which explains very well some strange behavior that sometime I observed in some customer cube. I never had a clear explanation about &lt;em&gt;why &lt;/em&gt;this happen like in his &lt;a href="http://mdxdax.blogspot.com/2011/11/avoid-pitfalls-of-fact-data-prefetching.html"&gt;excellent blog post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Jeffrey explains how the Formula Engine makes a decision about pre-fetching data from Storage Engine and why this request might slower the query (especially in large cubes) instead of improving performances. Reading this post, I feel always more the need of a tool like Plan Explorer in order to better understand what happens in a query. Yes, I know it’s hard just to imagine how to graphically represents a query plan for MDX, but a tool that let you navigate in Profiler events with some hints would be helpful. A good start would be extending and improving &lt;a href="http://ssas-info.com/forum/3-mdx-studio/1472-mdx-studio-0414-release"&gt;MDX Studio&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>The Many-to-Many Revolution 2.0 #ssas #mdx #dax #m2m</title><link>http://sqlblog.com/blogs/marco_russo/archive/2011/11/09/the-many-to-many-revolution-2-0-ssas-mdx-dax-m2m.aspx</link><pubDate>Wed, 09 Nov 2011 12:17:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:39670</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;In September 2006 I &lt;a href="http://sqlblog.com/blogs/marco_russo/archive/2006/09/24/the-many-to-many-revolution-paper-finally-released.aspx"&gt;had announced in this blog&lt;/a&gt; the release of the first version of The Many-to-Many Revolution, a whitepaper that describes how to leverage the many-to-many dimension relationships feature that had being available since Analysis Services 2005. The paper contains many generic patterns that can be applied in many common data analysis’ scenarios.&lt;/p&gt;  &lt;p&gt;More than 5 years later and more then 20.000 unique people that downloaded the 1.0 paper, I am proud to announce that we released&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sqlbi.com/articles/many2many/"&gt;&lt;strong&gt;&lt;font size="3"&gt;The Many-to-Many Revolution 2.0&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;These are the news in this edition:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://sqlblog.com/blogs/alberto_ferrari/"&gt;Alberto Ferrari&lt;/a&gt; joined me as co-author of the paper&lt;/li&gt;    &lt;li&gt;We added a new pattern for BISM Multidimensional (formerly known as UDM) &lt;/li&gt;    &lt;li&gt;We translated several existing pattern to BISM Tabular model.      &lt;ul&gt;       &lt;li&gt;Because BISM Tabular doesn’t support many-to-many relationships in its data model, you have to rely on DAX formulas to obtain the desired results. This produces many changes in data modeling and we tried to cover these differences in the paper, too &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The paper is &lt;a href="http://www.sqlbi.com/articles/many2many/"&gt;freely available&lt;/a&gt; in PDF format. We will publish single patterns described in the paper as web articles, in order to improve readability and indexing from search engines (today everybody use a web search engine instead than looking for a document in local disk, just because it’s faster).&lt;/p&gt;  &lt;p&gt;If you are willing to watch a one-hour session about a few of the BISM Tabular models described in the paper, I suggest you to look at the &lt;a href="http://sqlbits.com/Sessions/Event9/Many-to-Many_Relationships_in_DAX"&gt;Many-to-Many Relationships in DAX&lt;/a&gt; session that Alberto held in Liverpool at &lt;a href="http://www.sqlbits.com/"&gt;SQLBits 9&lt;/a&gt; two months ago. Yes, the paper has much more details and model,&amp;#160; but you can start with the video and then study on the paper!&lt;/p&gt;  &lt;p&gt;We look forward to get your feedback!&lt;/p&gt;</description></item><item><title>Book Review: MDX with Microsoft SQL Server 2008 R2 Analysis Services Cookbook</title><link>http://sqlblog.com/blogs/stacia_misner/archive/2011/10/21/39307.aspx</link><pubDate>Fri, 21 Oct 2011 19:46:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:39307</guid><dc:creator>smisner</dc:creator><description>&lt;p&gt;&lt;a href="http://www.packtpub.com/mdx-with-microsoft-sql-server-2008-r2-analysis-services/book"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="1308EN_MDX with Microsoft SQL Server Analysis Services 2008 R2 Cookbook" border="0" alt="1308EN_MDX with Microsoft SQL Server Analysis Services 2008 R2 Cookbook" align="left" width="125" height="152" src="http://sqlblog.com/blogs/stacia_misner/1308EN_MDX-with-Microsoft-SQL-Server-Analysis-Services-2008-R2-Cookbook_6D9346BB.png"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As I mentioned in &lt;a target="_blank" href="http://blog.datainspirations.com/2011/09/09/back-to-the-future-with-mdx-and-pass/"&gt;an earlier post&lt;/a&gt;, I first met Tomislav Piasevoli’s (&lt;a target="_blank" href="http://tomislav.piasevoli.com/"&gt;blog&lt;/a&gt;|&lt;a target="_blank" href="http://twitter.com/tpiasevoli"&gt;twitter&lt;/a&gt;) in 2008 at the PASS Summit in Seattle, and saw him again most recently again in Seattle at &lt;a target="_blank" href="http://www.sqlpass.org/summit/2011/"&gt;PASS Summit 2011&lt;/a&gt;. There I had the pleasure of telling him personally how much I liked his book. There are not many MDX books available, so when a new one arrives on the market, I definitely want to take a look. Now I have taught MDX classes for many years, and I think perhaps my first class was in 2002. However, it’s been so long now, I don’t recall exactly when that first class was. What I do know is that my understanding of MDX and my fluency with the language has grown by leaps and bounds since then through experience with all kinds of bleeding edge MDX, and I have tried to communicate some of my insights developed along the way to students in my classroom. MDX concepts can stretch your thinking (to put it mildly), and more so if you have to unlearn SQL concepts as well, which is true of the majority of my students. As a native English speaker, I can find it challenging at times to explain certain aspects of MDX. For all these reasons, I can fully appreciate Tomislav’s efforts to create this book and commend him for his excellent examples and explanations using a language that is not his mother tongue. &lt;/p&gt;  &lt;p&gt;Tomislav’s book is definitely not for beginners. There is an underlying assumption that you already have some familiarity with the basics of MDX. The purpose of this book is to provide you with the tools necessary to continue building your skills. The chapters group together a series of related concepts, called recipes. You don’t need to read the book sequentially from cover to cover. Instead, you search for the desired outcome, such as handling division by zero errors (described in Chapter 1) or calculating row numbers (found in Chapter 7). Ideally, you don’t just read the recipe, but actually try out the steps yourself. I did some of my reading of this book when I was away from my laptop, and frequently found that I wanted to try out something that Tomislav mentioned. Even long-time MDX developers like myself can find interesting tidbits of information to round out their repertoire!&lt;/p&gt;  &lt;p&gt;Each concept within a chapter is presented in a similar manner, beginning with “Getting ready” which are the steps you need to perform to set up your query. For example, you might need to work in Management Studio and set up a query as a starting point or open the Script View for a cube in Business Intelligence Development Studio. Then the next section is “How to do it…” which provides step-by-step instructions for working with a query or MDX script to accomplish the intended outcome. Then Tomislav continues with the “How it works…” section which provides background information on the key concepts for the current recipe. This section is the real meat of the book, but is nicely separated from the implementation steps if you want to jump straight to the technical details. Depending on the recipe, Tomislav also includes additional sections, such as “There’s more…” to provide alternative solutions or to point you to helpful links on the Internet such as whitepapers and blog articles providing more insight, and “See also…” to cross-reference you to another recipe in the book that covers a closely related concept.&amp;nbsp; Where applicable, he also includes information about how the techniques in the recipe behave differently in earlier versions of Analysis Services. &lt;/p&gt;  &lt;h5&gt;Chapter 1: Elementary MDX Techniques&lt;/h5&gt;  &lt;p&gt;Don’t let the word Elementary fool you into thinking you can learn entry-level MDX from this chapter. As I mentioned earlier, this book is not for beginners. There are good techniques here and a few basics, such as a great explanation of the FORMAT_STRING property and troubleshooting its use. However, I would consider the majority of these techniques to be elementary only as compared to the other techniques found later in the book. For example, the WHERE clause is one of those things that I see people really get into a tangle over (because they can’t forget their T-SQL), and Tomislav demonstrates using it to implement a logical OR on members from different hierarchies and a logical AND for members from the same hierarchy. One of my favorite sections in this chapter is the coverage of alternatives for the FILTER() function, which can cause performance problems. Use this chapter to get grounded with some foundational concepts, then strap on your seatbelt before diving into the rest of the book! &lt;/p&gt;  &lt;h5&gt;Chapter 2: Working with Time&lt;/h5&gt;  &lt;p&gt;Time is something that every cube has. Or at least every cube that I’ve ever met. I can’t imagine a cube without one (even if it’s called Date) because often business analysis is comparing one period to another or monitoring trends over time. Tomislav starts with the basics of the YTD() function but delves into variations on the theme and points out pitfalls to avoid. He moves on to parallel periods, moving averages, and finding last dates with data, among other time-related topics. A useful recipe in this chapter is the use of string functions to calculate a date, as I see this requirement a lot when working with Reporting Services reports that use Analysis Services as a source. A good case for working with a single-member named set rather than a calculated member is also made in this chapter.&lt;/p&gt;  &lt;h5&gt;Chapter 3: Concise Reporting&lt;/h5&gt;  &lt;p&gt;A report in this chapter means a pivot table used in some front-end tool for Analysis Services, and not Reporting Services exclusively. The goal of this chapter is to reduce the size of the pivot table, and thereby improve performance. I would characterize this chapter as one that helps you find the best or the worst members in a group, whether in a hierarchy, among siblings, or among descendants. Tomislav starts off the chapter with a recipe to get the top N members. In this recipe, Tomislav includes a great explanation of what can go wrong when you use the TopCount() function. Well, it’s not a matter of it behaving incorrectly because it’s doing what you ask. The problem is that many people misunderstand how the TopCount() function behaves under certain conditions and Tomislav delves deeply into the behavior here. He then builds on these ideas throughout the chapter and introduces alternatives for finding and displaying the best and the worst.&lt;/p&gt;  &lt;h5&gt;Chapter 4: Navigation&lt;/h5&gt;  &lt;p&gt;Hierarchies in a dimension are extremely useful for a number of reasons, one of which is navigation. The chapter begins with some simple queries that use Boolean logic to test the context of a current member on the row axis, and then expands to use scoping in the MDX script or use a query (using CELL CALCULATION) to determine if members are in the same branch of a hierarchy. Are you confused about when to use the Exists() function and the EXISTING keyword? Tomislav covers them both in this chapter in a variety of contexts. Also, having advocated on behalf of a named set in a previous chapter, Tomislav explores the pros and cons of named sets more fully in this chapter. &lt;/p&gt;  &lt;h5&gt;Chapter 5: Business Analytics&lt;/h5&gt;  &lt;p&gt;This chapter covers several techniques that are encountered less frequently (depending on who you ask, I suppose) than those covered up to this point in the book. For example, the chapter begins with linear regression which I’ve never had to use in 10 years of writing MDX. But I said the same about the Correlation() function once upon a time and I now use it frequently in a current project, so my feeling is that you never know when you’ll need to use a seemingly obscure function. Because these analytical functions are used less commonly, the amount of information available through Books Online or elsewhere on the Internet is pretty slim. Therefore, having this chapter’s working examples at your fingertips is invaluable. Also covered in this chapter is adjusting forecasts based on periodic cycles, alternative approaches to expense allocations, finding slow-moving inventory items, categorizing customers, and ABC analysis (which is an application of Pareto analysis).&lt;/p&gt;  &lt;h5&gt;Chapter 6: When MDX is Not Enough&lt;/h5&gt;  &lt;p&gt;In this chapter, Tomislav makes the case that when an MDX approach gets overly complicated, it’s time to look at making changes to the dimension or cube design. For example, he says, “Every time you catch yourself using functions like Except(), Filter(), or similar() too often in your calculations, you should step back and consider whether that’s a repeating behavior and whether it would pay off to have an attribute to separate the data you’ve been separating using MDX calculations.” He also explains how and why to create a placeholder measure in the cube to use with assignments in the MDX script. Utility dimensions for unit conversion or for time-based calculations are also covered in this chapter.&lt;/p&gt;  &lt;h5&gt;Chapter 7: Context-aware Calculations&lt;/h5&gt;  &lt;p&gt;Understanding context is an important aspect of MDX development. As Tomislav explains in the introduction to this chapter, context can be unpredictable based on what a user might select to place on rows and columns, or it can be partially known when you expect a particular measure or hierarchy to be used, or it can be completely known. The trick is to produce a calculation that behaves correctly regardless of context, which can be made trickier based on a combination of factors that Tomislav describes. The recipes in this chapter help you explore context from a number of, um, contexts, starting with how to know how many columns and rows will be in a query’s result set, how to determine which axis contains measures, how to determine what has been placed on an axis, among other useful techniques. &lt;/p&gt;  &lt;h5&gt;Chapter 8: Advanced MDX Topics&lt;/h5&gt;  &lt;p&gt;Now frankly I considered several of the recipes up to this point to be advanced, so I had to chuckle at the title of this chapter. Let’s just say these recipes are more complex! In this chapter, you’ll find techniques for working with parent-child hierarchies and displaying random values for sampling purposes. Hopefully, you’re avoiding the use of parent-child hierarchies and random sampling is not a common request in reports, so this section of the chapter is interesting primarily from an academic viewpoint. But then we move to complex sorts – a very useful subject indeed. Tomislav provides several examples and highlights potential problem areas. Also in this chapter is a recipe for recursively calculating cumulative values.&lt;/p&gt;  &lt;h5&gt;Chapter 9: On the Edge&lt;/h5&gt;  &lt;p&gt;Tomislav uses this chapter to collect topics that don’t neatly fit into the earlier chapters. Here he covers Analysis Services stored procedures (which are nothing like T-SQL stored procedures, by the way), as well as using the OPENQUERY() and OPENROWSET() functions for calling MDX from a T-SQL statement. He also introduces Dynamic Management Views (DMVs) for documenting and monitoring cubes, and shows how to use SQL Server Profiler to capture MDX queries. Last, he shows how to use the DRILLTHROUGH command.&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;p&gt;If you’re an MDX developer, whether brand new or experienced, you will find lots of good information in this book and practical examples of how and why to implement specific techniques. I definitely recommend that you add it to your library, in whatever format you prefer. It’s available in &lt;a target="_blank" href="http://www.packtpub.com/mdx-with-microsoft-sql-server-2008-r2-analysis-services/book"&gt;paperback, PDF, ePub and Mobi from the publisher&lt;/a&gt; and in &lt;a target="_blank" href="http://www.amazon.com/Microsoft-Analysis-Services-Cookbook-ebook/dp/B005HIK89S/ref=sr_1_2?ie=UTF8&amp;amp;qid=1319215803&amp;amp;sr=8-2"&gt;Kindle format from Amazon&lt;/a&gt;. &lt;/p&gt;</description></item><item><title>#MDX Cookbook : a new must read for #SSAS developers</title><link>http://sqlblog.com/blogs/marco_russo/archive/2011/08/25/mdx-cookbook-a-new-must-read.aspx</link><pubDate>Thu, 25 Aug 2011 09:21:38 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:38060</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;There are not so many books about MDX and it’s strange considering that it is a very sophisticated languages that requires years for learning (I’m not kidding). I started learning MDX in 1999 and after so many years, I still have to learn something. I’ve been part of the technical reviewers of the new book from &lt;a href="http://tomislav.piasevoli.com/"&gt;Tomislav Piasevoli&lt;/a&gt;, &lt;strong&gt;MDX with Microsoft SQL Server 2008 R2 Analysis Services Cookbook&lt;/strong&gt;, which is available on &lt;a href="http://www.amazon.com/gp/product/1849681309/?tag=se04-20"&gt;Amazon&lt;/a&gt;, also in &lt;a href="http://www.amazon.com/gp/product/B005HIK89S/?tag=se04-20"&gt;Kindle Edition&lt;/a&gt;, and on the &lt;a href="http://www.packtpub.com/mdx-with-microsoft-sql-server-2008-r2-analysis-services/book"&gt;Packt&lt;/a&gt; website (its publisher).&lt;/p&gt;  &lt;p&gt;The book is, as the title says, a cookbook. As any chef, you should already have a basic (or advanced) knowledge of MDX, and in this book you’ll find a lot of solutions for common problems. I was surprised to find solutions to problems I thought were impossible to solve by using MDX, for example. You will find detailed table of contents and sample chapters in the links above. I can just say that this is a must have book for any professional SSAS developer. You just cannot afford not to know the techniques described in this book – you know, you are the expert, right? Keep your skills updated!&lt;/p&gt;</description></item><item><title>Vote a bug and a missing feature in #powerpivot #denali #ctp3 on #connect</title><link>http://sqlblog.com/blogs/marco_russo/archive/2011/07/19/vote-a-missing-feature-in-powerpivot-denali-ctp3-on-connect.aspx</link><pubDate>Tue, 19 Jul 2011 07:24:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:36996</guid><dc:creator>sqlbi</dc:creator><description>&lt;p&gt;If you have 30 seconds available, please vote the following items on Connect:&lt;/p&gt;&lt;p&gt;&lt;a href="https://connect.microsoft.com/SQLServer/feedback/details/679618/import-attribute-key-from-ssas-in-powerpivot"&gt;https://connect.microsoft.com/SQLServer/feedback/details/679618/import-attribute-key-from-ssas-in-powerpivot&lt;/a&gt;&lt;/p&gt;&lt;p&gt;When you import data coming from an Analysis Services cube in PowerPivot, you cannot import the attribute key value. Only the attribute name is included in the query generated by the query designer. There is a possible workaround, creating a calculated measure with an MDX expression which return the attribute key value corresponding to the current member of the related attribute, but not many users are able to do that.&lt;/p&gt;&lt;p&gt;&lt;a href="https://connect.microsoft.com/SQLServer/feedback/details/679677/ragged-hierarchies-cannot-be-imported-in-powerpivot-tabular"&gt;https://connect.microsoft.com/SQLServer/feedback/details/679677/ragged-hierarchies-cannot-be-imported-in-powerpivot-tabular&lt;/a&gt;&lt;/p&gt;&lt;p&gt;When you import data coming from an Analysis Services cube in PowerPivot, you cannot import a ragged hierarchy. I've already described this issue in an &lt;a href="http://sqlblog.com/blogs/marco_russo/archive/2010/08/24/using-ssas-2005-2008-as-powerpivot-data-source-query-designer.aspx"&gt;older post&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The reason I ask your support is that in Denali CTP3 both PowerPivot and BIDS for Tabular projects has these issues. It really hurts PowerPivot end users, but it is also a waste of time for the experienced BI developer, who need to write a calculated measure in MDX for each attribute key he wants to import it&amp;nbsp;using the query designer (writing MDX by hand is always the preferred alternative, I know) and have to write an MDX query by hand if the levels in the ragged hierarchy are not exposed as browsable attributes (which is not a best practice in cube design!).&lt;/p&gt;&lt;p&gt;Help me to rais the priority for this issues - A multidimensional model in Analysis Services should be a better data source for PowerPivot and BISM Tabular!&lt;/p&gt;</description></item><item><title>Creating a Linked Server for Analysis Services</title><link>http://sqlblog.com/blogs/stacia_misner/archive/2010/11/30/31193.aspx</link><pubDate>Tue, 30 Nov 2010 23:30:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:31193</guid><dc:creator>smisner</dc:creator><description>&lt;p&gt;I think I’ve finally recovered (in more ways than one!) from &lt;a target="_blank" href="http://www.sqlpass.org/summit/na2010/"&gt;PASS Summit 2010&lt;/a&gt; in Seattle a mere few weeks ago. I seem to be eternally plagued with computer problems at every conference I attend, but always in different ways. Accordingly, I have devised different strategies for anticipating and coping with problems. I foiled this last disaster by having my slides and demos duplicated on Erika’s laptop which I had to call into action literally seconds before the session began due to a hard drive failure, but missed one little detail which was actually a last minute bonus addition to my session on &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms175340(SQL.90).aspx"&gt;Analysis Services Stored Procedures&lt;/a&gt; (ASSP). So it wasn’t the end of the world, but it was a forehead slapping moment!&lt;/p&gt;  &lt;p&gt;As part of that session, I told a story of how I came to appreciate the use of ASSP for a client project in which I had to dynamically construct MDX queries on the fly using T-SQL stored procedures and pass the resulting query into an &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms188427.aspx"&gt;OPENQUERY&lt;/a&gt; function. The problem that I had in that situation was the limitation imposed by the OPENQUERY function – I&amp;nbsp; had to write my MDX query in 8000 characters or less! Erika and I worked out all kinds of ways to live within that constraint before we tried ASSPs, but ultimately the complexity of these queries kept pushing over the query string over the limit and thus began our adventures with ASSP. I’ll add a post on this technique to my series on Using Dynamic MDX in Reporting Services soon. (The &lt;a target="_blank" href="http://blog.datainspirations.com/2010/10/07/using-dynamic-mdx-in-reporting-services-part-1/"&gt;first post describes the use of StrToMember() and StrToSet()&lt;/a&gt; and &lt;a target="_blank" href="http://blog.datainspirations.com/2010/10/09/using-dynamic-mdx-in-reporting-services-part-2/"&gt;the second post shows how to use MDX in a dynamic OLE DB query&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I had a few extra minutes of time in my session, so I thought I’d show the audience “the rest of the story” by demonstrating how I could use the OPENQUERY function with the ASSP that I created earlier in the session. I&amp;nbsp; had the OPENQUERY working on my laptop just a few minutes before the session started, but in preparing Erika’s laptop, I didn’t think about setting up a linked server to Analysis Services in advance. No worries – I’ll just do it live! Well, my memory failed me on how to fill out the New Linked Server dialog box in Management Studio, so I asked the audience if anyone knew what to do and the reply I got was, “It’s a mystery!” (It took me a few times to realize that’s what they said – I was suffering from the “SQL plague” and my ears were really plugged up!) &lt;/p&gt;  &lt;p&gt;Nothing a little search engine won’t resolve, right? Well, I turned up a few hits (like the Books Online entry &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/aa936675(SQL.80).aspx"&gt;Adding a Linked Server&lt;/a&gt;), but nothing was particularly helpful for interpreting which parameters are really needed and which are optional – especially when I was on the spot! So my post today is my contribution to resolving the mystery. Of course, now that I’m offstage and working on my replaced hard drive and with a much less congested head, I was able to set up a linked server quite quickly.&lt;/p&gt;  &lt;p&gt;To set up a linked server for Analysis Services, follow these steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Connect to the Database Engine in Management Studio. &lt;/li&gt;    &lt;li&gt;Expand Server Objects, right-click Linked Servers, and click New Linked Server. &lt;/li&gt;    &lt;li&gt;Define a name for the linked server, and set the following options as shown in the screenshot below: &lt;/li&gt; &lt;/ol&gt;  &lt;ul&gt;   &lt;li&gt;Provider: Microsoft OLE DB Provider for Analysis Services 10.0 &lt;/li&gt;    &lt;li&gt;Product name: MSOLAP.4 &lt;/li&gt;    &lt;li&gt;Data source: (the name of your server) &lt;/li&gt;    &lt;li&gt;Catalog: (the name of the Analysis Services database) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/stacia_misner/image_279B21B2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" width="416" height="373" src="http://sqlblog.com/blogs/stacia_misner/image_thumb_6548096E.png"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;To test the linked server, you can write a query like this:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;select * from openquery(AdventureWorksOLAP, &lt;font color="#ff0000"&gt;'select [Measures].[Sales Amount] on columns from [Adventure Works]'&lt;/font&gt;)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;A couple of things to note - This query is executed as a database engine query, not as an MDX query. The first argument of the OPENQUERY is the name of your linked server.&lt;/p&gt;</description></item><item><title>PASS Summit 2010: Epilogue</title><link>http://sqlblog.com/blogs/stacia_misner/archive/2010/11/15/30605.aspx</link><pubDate>Mon, 15 Nov 2010 21:16:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:30605</guid><dc:creator>smisner</dc:creator><description>&lt;p style="margin:0in 0in 10pt;"&gt;Another &lt;a target="_blank" href="http://www.sqlpass.org/summit/na2010/"&gt;PASS Summit&lt;/a&gt; has come and gone, and a good time was had by all. The song at the &lt;a target="_blank" href="http://www.sqlpass.org/summit/na2010/LiveKeynotes/Tuesday.aspx"&gt;opening keynote&lt;/a&gt; sums up the experience quite nicely, "Simply the Best." My favorite quote of the week comes from Andy Leonard (&lt;a target="_blank" href="http://sqlblog.com/blogs/andy_leonard"&gt;blog&lt;/a&gt;| &lt;a target="_blank" href="http://twitter.com/AndyLeonard"&gt;twitter&lt;/a&gt;) who tweeted on November 9, "&lt;a title="#sqlpass" href="http://twitter.com/#!/search?q=#sqlpass"&gt;#sqlpass&lt;/a&gt; is a family reunion. :{&amp;gt;" Oddly enough, Andy is one of the few people that I DIDN'T get to see last week, but not for lack of trying. Sorry, Andy!&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;As an independent consultant, I don't get to interact regularly with my peers, so I love the reunion aspect of PASS. And now that I've started following people on Twitter, my universe of colleagues has expanded even more, and I was delighted to meet the people behind the avatars.&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;The joy of PASS is not limited to those of us who have attended for many years. As I was sitting in the airport last Friday, I recognized an attendee who was a first-timer and asked about his experience. He replied that it exceeded expectations. He was so anxious to get back to work to put what he learned into practice. He felt that the value of the knowledge that he is bringing back to the office from PASS was so much greater than the price of the conference. Now that's a ringing endorsement if I ever heard one.&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;There is so much more that could be said about PASS, and many in the community have already posted their thoughts on Twitter and on their blogs. There has been quite a stir in the business intelligence community this past week about the future of Analysis Services, about which I will comment in a future post. Today, however, I will focus on a few follow-up comments and links to resources related to activities in which I participated last week.&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;&lt;b&gt;Getting Started In Blogging And Technical Speaking&lt;/b&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;Kendal Van Dyke (&lt;a target="_blank" href="http://kendalvandyke.blogspot.com/"&gt;blog&lt;/a&gt;| &lt;a target="_blank" href="http://twitter.com/SQLDBA"&gt;twitter&lt;/a&gt;) presented a session with tips for getting started in either of blogging or speaking. He invited a panel of experts to join him, including myself, Rob Farley (not pictured below) (&lt;a target="_blank" href="http://sqlblog.com/blogs/rob_farley"&gt;blog&lt;/a&gt;| &lt;a target="_blank" href="http://twitter.com/rob_farley"&gt;twitter&lt;/a&gt;), Aaron Bertrand (&lt;a target="_blank" href="http://sqlblog.com/blogs/aaron_bertrand"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/AaronBertrand"&gt;twitter&lt;/a&gt;), Buck Woody (&lt;a target="_blank" href="http://buckwoody.com/"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/buckwoody"&gt;twitter&lt;/a&gt;), Todd McDermid (&lt;a target="_blank" href="http://toddmcdermid.blogspot.com/"&gt;blog&lt;/a&gt;| &lt;a target="_blank" href="http://twitter.com/Todd_McDermid"&gt;twitter&lt;/a&gt;), Mike Walsh (&lt;a target="_blank" href="http://www.straightpathsql.com/blog"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/mike_walsh"&gt;twitter&lt;/a&gt;), Thomas LaRock (&lt;a target="_blank" href="http://thomaslarock.com/backstage/"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/SQLRockstar"&gt;twitter&lt;/a&gt;), Ted Krueger (&lt;a target="_blank" href="http://www.lessthandot.com/"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/onpnt"&gt;twitter&lt;/a&gt;), Patrick LeBlanc (&lt;a target="_blank" href="http://sqldownsouth.blogspot.com/"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/patrickdba"&gt;twitter&lt;/a&gt;), Andy Warren (&lt;a target="_blank" href="http://www.sqlservercentral.com/blogs/andy_warren/default.aspx"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/sqlandy"&gt;twitter&lt;/a&gt;), and Brent Ozar (&lt;a target="_blank" href="http://www.brentozar.com/"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/BrentO"&gt;twitter&lt;/a&gt;).&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.datainspirations.com/wp-content/uploads/2010/11/5168176314_fe721e07b7.jpg"&gt;&lt;img class="size-full wp-image-285" title="Kendal Van Dyk's session at PASS Summit 2010" alt="" width="500" height="375" src="http://blog.datainspirations.com/wp-content/uploads/2010/11/5168176314_fe721e07b7.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;(Photo courtesy of Brent Ozar)&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;Who had control of this very interactive session? You'll have to &lt;a target="_blank" href="http://www.sqlpass.org/summit/na2010/Home/OnSiteFAQ/DVDs.aspx"&gt;buy the PASS Summit DVD&lt;/a&gt; to find out!&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;I waited patiently for my turn to speak. With a room full of speakers, getting your own turn can be a challenge! I heard a few attendees express concern that they didn't know what to write about, or that someone else has covered the topic. My response to this concern is that everyone has a unique take on a topic, and that's why T-SQL Tuesday is such a great way both to learn and to contribute. T-SQL Tuesday was started by Adam Mechanic (&lt;a target="_blank" href="http://sqlblog.com/blogs/adam_machanic"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/AdamMachanic"&gt;twitter&lt;/a&gt;) and gives everyone with an opinion (and who doesn't have one?) or a specific experience to add to the topic. You can &lt;a target="_blank" href="http://sqlblog.com/blogs/adam_machanic/archive/2009/11/30/invitation-to-participate-in-t-sql-tuesday-001-date-time-tricks.aspx"&gt;see the first invitation to T-SQL Tuesday here&lt;/a&gt; to see how it all started and &lt;a target="_blank" href="http://www.sqlskills.com/BLOGS/PAUL/category/T-SQL-Tuesday.aspx"&gt;the most recent T-SQL Tuesday posts&lt;/a&gt; hosted by Paul Randal (&lt;a target="_blank" href="http://sqlskills.com/blogs/paul/"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/paulrandal"&gt;twitter&lt;/a&gt;). The best way to keep tabs on who's hosting the next round is to follow the #TSQL2sDay hash tag on Twitter.&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;Unfortunately, I didn't get to hang out for the entire presentation, because I had to move on to the…&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;&lt;b&gt;Women in Technology Panel&lt;/b&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;I was honored to participate as a panelist for this year's Women in Technology luncheon. It was well attended, and I heard so many positive comments after the event from both men and women. I drew inspiration from my fellow panelists as well as the stories shared with me by other women attending PASS this year. You can view a recording of the event &lt;a target="_blank" href="http://www.sqlpass.org/summit/na2010/LiveKeynotes/WITLuncheon.aspx"&gt;here&lt;/a&gt; if you're a registered member of PASS (which is free to join).&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;It's so difficult to say what the right answer is for increasing the numbers of women in technology. The numbers are diminishing at a deplorable rate (&lt;a target="_blank" href="http://blog.datainspirations.com/2010/07/29/maybe-its-just-me-a-perspective-from-one-woman-in-it/"&gt;as I discussed in a previous post&lt;/a&gt;). It seems to me that to foster change we need to start laying the groundwork with our children. By "our children", I mean society in general, not me specifically, although I have tried do my part! On the one hand, I don't recommend forcing children into a career path that they can't embrace enthusiastically. On the other hand, I believe that one reason that girls don't pursue technology as an option is lack of exposure to the possibilities. Lynn Langit (&lt;a target="_blank" href="http://blogs.msdn.com/SoCalDevGal"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://www.twitter.com/llangit"&gt;twitter&lt;/a&gt;) is a role model for showing kids (not just girls!) how to explore these possibilities through &lt;a href="http://www.teachingkidsprogramming.org/"&gt;www.teachingkidsprogramming.org&lt;/a&gt;. Check it out! &lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;Along these lines, I proposed that maybe - as great a community as PASS is - we should collectively think about what we can do for our kids. Someone tweeted that I suggested we should bring our daughters to SQLSaturday, but actually I wondered aloud if we could do something &lt;i&gt;similar&lt;/i&gt; to SQLSaturday that focused on the kids (and not just girls). Maybe we could get some sponsors to help, too?&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;&lt;b&gt;Demystifying MDX in Reporting Services&lt;/b&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;In this session, I explained some of the nuances of working with MDX in Reporting Services. I have posted my demo reports &lt;a target="_blank" href="http://blog.datainspirations.com/uploads/DemystifingMDXinSSRS.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;In addition, you might want to refer back to some of my recent posts about using dynamic MDX in Reporting Services: &lt;a target="_blank" href="http://blog.datainspirations.com/2010/10/07/using-dynamic-mdx-in-reporting-services-part-1/"&gt;Part 1&lt;/a&gt; and &lt;a target="_blank" href="http://blog.datainspirations.com/2010/10/09/using-dynamic-mdx-in-reporting-services-part-2/"&gt;Part 2&lt;/a&gt;.&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;If you're not familiar with MDX, I presented &lt;a target="_blank" href="http://www.sqlpass.org/LearningCenter/24HoursFall.aspx"&gt;Session 07: Intro to MDX&lt;/a&gt; for &lt;a target="_blank" href="http://www.sqlpass.org/24hours/fall2010/"&gt;24 Hours of Pass: Summit Preview&lt;/a&gt; which you can view if you have a free PASS membership. MDX is not going away any time soon, contrary to recent rumors, so invest some time learning it if you plan to work with real Analysis Services cubes, which will continue to have their place in the BI stack for several years to come.&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;&lt;b&gt;Real World Analysis Services Stored Procedures&lt;/b&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;This topic drew a larger audience than I expected as it's a fairly specialized topic. For years, I never needed to use Analysis Services Stored Procedures (ASSP), avoiding it because folklore said so due to performance hits. However, some things just can't be done any other way and I ran into such things this past year. To date, I haven't found much written about ASSP other than &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms176113.aspx"&gt;BOL&lt;/a&gt;, but you can find some &lt;a target="_blank" href="http://www.codeplex.com/ASStoredProcedures"&gt;excellent examples to download&lt;/a&gt; at CodePlex. Plus I've uploaded the &lt;a target="_blank" href="http://blog.datainspirations.com/uploads/ASSP.zip"&gt;very simple (non-production-ready) C# example&lt;/a&gt; that I used in my session demonstration for you to peruse.&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;&lt;b&gt;What's Next?&lt;/b&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 10pt;"&gt;So now that I've completed all the training and Webcasts and conference sessions that I've been focused on the last couple of months (with one exception - &lt;a target="_blank" href="https://www2.gotomeeting.com/register/350482474"&gt;Delivering Information with Reporting Services&lt;/a&gt;, a free Webcast at 12 pm Pacific on Wednesday, November 17), I plan to get back to a more regular blogging schedule. There are certainly plenty of topics on my "to do" list!&lt;/p&gt;</description></item><item><title>The Microsoft BI Roadmap: BISM, UDM and Beyond</title><link>http://sqlblog.com/blogs/marco_russo/archive/2010/11/15/the-microsoft-bi-roadmap-bids-udm-and-beyond.aspx</link><pubDate>Mon, 15 Nov 2010 13:05:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:30581</guid><dc:creator>sqlbi</dc:creator><description>&lt;P&gt;Microsoft recently announced a new roadmap for its BI architecture. The next version of SQL Server, codenamed “Denali”, is going to introduce a new semantic model named BISM (Business Intelligence Semantic Model). Analysis Services will host it and it will be queryable through MDX and DAX. DAX has been introduced in PowerPivot as an expression language, but it will be extended in Denali to provide also query capabilities, but it will keep its nature of a “functional” language.&lt;/P&gt;  &lt;P&gt;A more complete description about this roadmap has been published in a &lt;A href="http://blogs.technet.com/b/dataplatforminsider/archive/2010/11/12/analysis-services-roadmap-for-sql-server-denali-and-beyond.aspx"&gt;blog post made by the SSAS development team&lt;/A&gt;. Since we still don’t have a working beta product to test (CTP1 of Denali doesn’t include any new feature in SSAS) I can only make some consideration based on the many information I gathered at PASS Summit 2010 and during private meetings and conversations with members of the SSAS development team. You can of course read other interesting posts from &lt;A href="http://cwebbbi.wordpress.com/2010/11/14/pass-summit-day-2-the-aftermath/"&gt;Chris Webb&lt;/A&gt; and &lt;A href="http://prologika.com/CS/blogs/blog/archive/2010/11/13/business-intelligence-semantic-model-the-good-the-bad-and-the-ugly.aspx"&gt;Teo Lachev&lt;/A&gt; to look at some concerns the announcements made at PASS have been raised up in the MS BI Community.&lt;/P&gt;  &lt;P&gt;In the long term, the Microsoft strategy is to provide a platform for BI to everyone that will provide the same basic building blocks to any user interested in building a data model for any kind of reporting or analytical needs. Many tried to do the same in the past, and Microsoft tried the same too by introducing UDM (Unified Dimensional Model) several years ago. UDM is great to build models that can be expressed in a multidimensional way, but it might be too complex to be used for simple reporting purposes. Its learning curve requires a certain investment just to start with a simple project. And many developers that are used to SQL simply refuse to approach MDX and UDM just to build a few reports. For these reasons, and also to contrast other vendor’s products, Microsoft is going to introduce a new “big thing”, which is BISM.&lt;/P&gt;  &lt;P&gt;To describe BISM, the best thing is looking at PowerPivot today. You can define a model by simply defining tables, relationships and calculations, which are made by using DAX. These concepts are very familiar to both Excel users and developers who are used to relational databases. So, why not using SQL? The reason is that in PowerPivot (and then in BISM) the relationships are part of the model, whereas in a RDBMS a relationship is just a relational constraint. And, most important, DAX is a language that is very simple at the beginning, and that can be learned in a very incremental way. Under the cover, there is a calculation engine called Vertipaq. It is very fast. Faster than any competitor and also faster than columnar indexes that will be implemented in SQL Denali. But BISM will also allow querying an underlying relational database in pass-through mode – in Denali only SQL Server will be supported for this type of real-time usage. Something that is very important to enable BISM as the “unified model” for any reporting need. Finally, to query BISM you can use MDX and, in Denali, also DAX (which will be extended for this purpose), making it easier to express a query over a set of unrelated tables, something that would be nearly impossible in MDX and UDM today. &lt;/P&gt;  &lt;P&gt;BISM sounds very promising and the long term strategy is very consistent. What caused many concerns in many of us is the transition strategy. After many discussions and many thoughts, I have this roadmap to share with you:&lt;/P&gt;  &lt;UL&gt;   &lt;LI&gt;&lt;STRONG&gt;UDM is here to stay&lt;/STRONG&gt;. It is a full multidimensional model that can be used to create complex models with complex calculations. If your business model fits well in a multidimensional model, this is something that can make your life easier &lt;/LI&gt;    &lt;LI&gt;&lt;STRONG&gt;BISM will not replace UDM&lt;/STRONG&gt;. At least, it will not replace all the feature of UDM very soon. In the long term, BISM will be able to satisfy all of the requirements of any data analysis and reporting needs. But in its first release it will not have this level of coverage. &lt;/LI&gt;    &lt;LI&gt;&lt;STRONG&gt;BISM will be far better of similar products of other vendors&lt;/STRONG&gt;, even if UDM will be more advanced of BISM for very specific requirements. At least, this is the goal for Microsoft. If you look at BISM and UDM in this perspective, it gives much more sense to the overall architecture. BISM will be much more interesting than UDM to customers that are used to other BI technologies, which are less advanced than UDM but good enough for their own requirements. &lt;/LI&gt;    &lt;LI&gt;&lt;STRONG&gt;Existing UDM implementations will continue to work in SSAS&lt;/STRONG&gt;. There are no reasons to plan a migration by now. Only after BISM will be released in a version that will be able to satisfy all the existing requirements for your project, than a migration might be considered. But it will not be required, because UDM is not going to be deprecated. The recent case-study of a 12TB cube implemented by Yahoo! should be a good point to support this statement. &lt;/LI&gt;    &lt;LI&gt;New projects starting before the Denali release should be implemented by using UDM. Only in case where UDM doesn’t fit the requirements (i.e. massive leaf-level calculations resulting in low performance) then an early adoption of Denali should be considered. &lt;/LI&gt;    &lt;LI&gt;New projects starting after Denali release should be implemented in BISM if it fits all the requirements. Probably, many projects that wouldn’t have implemented in UDM today (because some SSRS reports on a RDBMS are “good enough”,) might be considered for a BISM implementation. This is probably the key selling point for Microsoft: getting &lt;B&gt;new customers&lt;/B&gt; for Analysis Services by offering BISM as a more affordable entry point for a BI solution than UDM. Ideally, this category will contain also all those projects that today would be implemented in UDM just because it is the only “semantic model” that they have today to make a user able to navigate data by using Excel. &lt;/LI&gt;    &lt;LI&gt;In the years to come, as long as the BISM will be always more feature-complete compared to UDM, it will become a viable alternative to UDM. Only time and user adoption will tell if BISM will be able to completely replace UDM. From my point of view, it will require at least three release cycles to reach a point of real competition. It means that we will see new projects starting in UDM at least since 2015. Considering the traditional policy support of Microsoft, any investment made on UDM will be safe at least until 2025/2030. It’s a very long time. &lt;/LI&gt; &lt;/UL&gt;  &lt;P&gt;Thus, I’m really confident with the strategy about the server side. I still need to hear more news about the client-side, even if rumors seem better than actual evidence.&lt;/P&gt;  &lt;UL&gt;   &lt;LI&gt;&lt;STRONG&gt;Excel&lt;/STRONG&gt; is the primary BI client tool. It navigates data by using MDX. It natively supports both UDM and BISM. It seems that there is an important ongoing effort that will see the light in the next release of Excel. I really don’t have any other information here and I can only speculate about some of the former ProClarity features will be implemented inside Excel. What I know is that the resources that are involved in the BI client part of Excel are higher than ever today. &lt;/LI&gt;    &lt;LI&gt;&lt;STRONG&gt;Crescent&lt;/STRONG&gt; is the codename for a new ad hoc reporting and data visualization tool that functionally resembles &lt;A href="http://en.wikipedia.org/wiki/Microsoft_Data_Analyzer"&gt;&lt;STRONG&gt;Data Analyzer&lt;/STRONG&gt;&lt;/A&gt;. Yes, it is completely new, much more graphical, more interactive… but the basic idea is fundamentally the same. It is (like Data Analyzer was) a complementary tool to Excel, and not an alternative one. This tool was supposed to generate queries only in DAX. This would exclude the possibility of querying an existing UDM model. However, I would wait a few weeks for an official statement by Microsoft about Crescent support of existing UDM models. &lt;/LI&gt;    &lt;LI&gt;&lt;STRONG&gt;Reporting Services&lt;/STRONG&gt; and &lt;STRONG&gt;Report Builder&lt;/STRONG&gt; should support BISM in a native way. Today it already supports UDM through MDX. It should be able to query BISM in MDX as well, but supporting DAX should be considered to make life easier to those developers who are not used to MDX. I don’t have information about this kind of support, but it should be the natural evolution. &lt;/LI&gt;    &lt;LI&gt;I haven’t heard any news about &lt;STRONG&gt;PerformancePoint&lt;/STRONG&gt;, but I can imagine it will have BISM support as a natural evolution as well. However, because PerformancePoint should be aligned with Excel, we should see a new version of Excel and PerformancePoint only in 2013, I suppose. However, MDX will be available to query BISM from PerformancePoint, in case a Service Pack with BISM support will not be released in time. &lt;/LI&gt; &lt;/UL&gt;  &lt;P&gt;As you can see, we are just at the beginning of a major wave of innovation in the BI space. In this case, the innovation start from the Self-service BI and will grow-up until it will reach the corporate BI at a more pervasive level. A key point of the Microsoft strategy is the Vertipaq engine. Only in these days I started to understand how much disruptive this technology can be. I know very well that several UDM cubes in these days run on server that have more RAM than the cube size. Not every project is inside these boundaries, but many are. And with Vertipaq compression, the bar is simply higher.&lt;/P&gt;  &lt;P&gt;Finally, these are my advices for the current and future BI developments:&lt;/P&gt;  &lt;UL&gt;   &lt;LI&gt;If you are a company who want to start a BI project, don’t wait and go to UDM now. &lt;/LI&gt;    &lt;LI&gt;If you are a BI firm or consultant, start your training for DAX by using PowerPivot. It is an excellent tool for prototyping and you can use it to train yourself and to prepare proof of concepts of BI models for your customers. Then continue the implementation using UDM by now. Commercial: my &lt;A href="http://www.amazon.com/dp/0735640580/?tag=se04-20"&gt;recent book&lt;/A&gt; has several chapters about DAX, too. &lt;/LI&gt;    &lt;LI&gt;When a feature-complete CTP of Denali will be available later next year (maybe not very soon) start to explore it to understand its capabilities and whether they can fit your requirements or not. &lt;/LI&gt;    &lt;LI&gt;Once BISM will reach a feature set that satisfy your requirements for a new project, start to consider it because development time might be considerably lower and skills required could be easier to build, especially if your data model is not too complex. &lt;/LI&gt;    &lt;LI&gt;Whatever you do in your professional life, if you are reading this blog you have to learn DAX. You can start today and my recent book can be a good start point also to cover more advanced data models and calculations. &lt;/LI&gt; &lt;/UL&gt;  &lt;P&gt;A final thought is about MDX. I know that mastering MDX is hard, but I cannot say that DAX is so simpler. Yes, it is simpler at the beginning, but for more complex calculations, the required DAX expression might be more complex than the corresponding MDX one. Coming from a relational background (SQL) DAX is more intuitive at the beginning, but coming from an MDX background it is easier to learn the more advanced part of DAX that allows you to create the more complex and powerful expressions that solve real-world complex problems in a very efficient way. Thus, also your investments in MDX are preserved. Your MDX queries will still run and you will still be able to write new MDX queries. But the more important asset you have is the MDX knowledge and understanding, which puts you in pole position to really master DAX too, even if a further study will still be required.&lt;/P&gt;</description></item><item><title>Using Dynamic MDX in Reporting Services: Part 2</title><link>http://sqlblog.com/blogs/stacia_misner/archive/2010/10/08/29249.aspx</link><pubDate>Sat, 09 Oct 2010 01:31:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:29249</guid><dc:creator>smisner</dc:creator><description>&lt;P&gt;In this post, I continue my exploration of approaches to working with dynamic MDX in a Reporting Services dataset when you are using Analysis Services as a data source. I began this series with a look at &lt;A href="http://blog.datainspirations.com/2010/10/07/using-dynamic-mdx-in-reporting-services-part-1/" target="_blank"&gt;string conversion functions in Part 1&lt;/A&gt;. In Part 1, the dynamic MDX relied on parameters that work as a filter on the query results.&lt;/P&gt;

&lt;P&gt;But what if you want to change the structure of the query itself? A parameter won't help with that. Instead, you need to create the query string at run-time. However, the Analysis Services data source in Reporting Services doesn't allow you to use an expression to define the query string. That's okay- I'll just do an end run around that problem. I'll use an OLE DB provider to connect to my cube and then I can build up the query string by using an expression. In this post, I walk you through the process.&lt;/P&gt;

&lt;P&gt;The context for this demonstration is a report that allows the user to specify the sets that appear on rows and columns of a matrix and to select one measure. It's a very simple example that focuses on the dataset construction, and doesn't spend as much time on the beautification of the report. Hopefully, it will give you some ideas to leverage for your own reports.&lt;/P&gt;

&lt;P&gt;&lt;B&gt;Create a data source&lt;/B&gt;&lt;/P&gt;

&lt;P&gt;First, I need to create an OLE DB source. In the Type drop-down list, I select "OLE DB" and then I provide a connection string like this:&lt;/P&gt;

&lt;PRE&gt;Provider=MSOLAP.4;Data Source=.;Initial Catalog="Adventure Works DW 2008R2"&lt;/PRE&gt;
&lt;P&gt;The Edit button allows you to use a UI to generate the string if you don't want to remember how to construct it manually.&lt;/P&gt;

&lt;P&gt;﻿ &lt;A href="http://blog.datainspirations.com/wp-content/uploads/2010/10/OLEDBDataSource.png"&gt;&lt;IMG class="alignnone size-full wp-image-247" title="OLE DB Data Source" alt="" src="http://blog.datainspirations.com/wp-content/uploads/2010/10/OLEDBDataSource.png" width="530" height="386"&gt;&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;&lt;B&gt;Parameters&lt;/B&gt;&lt;/P&gt;

&lt;P&gt;This set of steps is necessary to create the lists from which the user makes the selection. In my very simple example, I have created two parameters - Rows and Columns - and hard-coded possible lists. You can do more interesting things here, of course. Just make sure that the user can't make the same selection for both parameters - whether you enforce that by manually providing the values or by doing something clever with a dynamically generated list based on a query.&lt;/P&gt;

&lt;P&gt;I created the Measure parameter with the following values:&lt;/P&gt;

&lt;TABLE cellSpacing="0" cellPadding="0"&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;Label&lt;/B&gt;&lt;/TD&gt;

&lt;TD&gt;&lt;B&gt;Value&lt;/B&gt;&lt;/TD&gt;
&lt;/TR&gt;

&lt;TR&gt;
&lt;TD&gt;Sales Amount&lt;/TD&gt;

&lt;TD&gt;="[Measures].[Sales Amount]"&lt;/TD&gt;
&lt;/TR&gt;

&lt;TR&gt;
&lt;TD&gt;Order Quantity&lt;/TD&gt;

&lt;TD&gt;="[Measures].[Order Quantity]"&lt;/TD&gt;
&lt;/TR&gt;

&lt;TR&gt;
&lt;TD&gt;Gross Profit Margin&lt;/TD&gt;

&lt;TD&gt;="[Measures].[Gross Profit Margin]"&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TABLE&gt;

&lt;P&gt;I created the Columns parameters like this:&lt;/P&gt;

&lt;TABLE cellSpacing="0" cellPadding="0"&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;Label&lt;/B&gt;&lt;/TD&gt;

&lt;TD&gt;&lt;B&gt;Value&lt;/B&gt;&lt;/TD&gt;
&lt;/TR&gt;

&lt;TR&gt;
&lt;TD&gt;Calendar Year&lt;/TD&gt;

&lt;TD&gt;="[Date].[Calendar Year].[Calendar Year].Members"&lt;/TD&gt;
&lt;/TR&gt;

&lt;TR&gt;
&lt;TD&gt;Reseller Business Type&lt;/TD&gt;

&lt;TD&gt;="[Reseller].[Business Type].[Business Type].Members"&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TABLE&gt;

&lt;P&gt;And the Rows parameters like this:&lt;/P&gt;

&lt;TABLE cellSpacing="0" cellPadding="0"&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;B&gt;Label&lt;/B&gt;&lt;/TD&gt;

&lt;TD&gt;&lt;B&gt;Value&lt;/B&gt;&lt;/TD&gt;
&lt;/TR&gt;

&lt;TR&gt;
&lt;TD&gt;Product Category&lt;/TD&gt;

&lt;TD&gt;="[Product].[Category].[Category].Members"&lt;/TD&gt;
&lt;/TR&gt;

&lt;TR&gt;
&lt;TD&gt;Sales Territory Country&lt;/TD&gt;

&lt;TD&gt;="[Sales Territory].[Sales Territory Country].[Sales Territory Country].Members"&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TABLE&gt;

&lt;P&gt;&lt;B&gt;Dataset&lt;/B&gt;&lt;/P&gt;

&lt;P&gt;Although the ultimate goal is to produce a dynamic MDX query, it's actually easier to start the design of the dataset using a static query and then to switch it out later. By using a static query, the fields for the dataset are autogenerated. The less work I have to do, the better.&lt;/P&gt;

&lt;P&gt;Now one thing about dynamic MDX in Reporting Services is the need to make sure the number of fields in the dataset are the same each and every time. Therefore I need to structure the query differently than I would if I were to write it for a "normal" Analysis Services client. That is, I need to rewrite a query like this:&lt;/P&gt;

&lt;PRE&gt;select&lt;/PRE&gt;
&lt;PRE&gt;non empty [Date].[Calendar Year].[Calendar Year].Members on columns,&lt;/PRE&gt;
&lt;PRE&gt;non empty [Product].[Category].[Category].Members on rows&lt;/PRE&gt;
&lt;PRE&gt;from [Adventure Works]&lt;/PRE&gt;
&lt;PRE&gt;where [Measures].[Sales Amount]&lt;/PRE&gt;&lt;DIV&gt;which produces a result like this:&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="http://blog.datainspirations.com/wp-content/uploads/2010/10/StandardQueryResults.png"&gt;&lt;IMG class="alignnone size-full wp-image-250" title="Standard Query Results" alt="" src="http://blog.datainspirations.com/wp-content/uploads/2010/10/StandardQueryResults.png" width="447" height="97"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;to a query that looks like this:&lt;/DIV&gt;
&lt;PRE&gt;&lt;DIV&gt;select&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;[Measures].[Sales Amount] on columns,&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;non empty&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;([Product].[Category].[Category].Members,&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;[Date].[Calendar Year].[Calendar Year].Members)&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;on rows&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;from [Adventure Works]&lt;/DIV&gt;&lt;BR&gt;&lt;/PRE&gt;&lt;DIV&gt;and produces a result like this:&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="http://blog.datainspirations.com/wp-content/uploads/2010/10/ModifiedQueryResults.png"&gt;&lt;IMG class="alignnone size-full wp-image-251" title="Modified Query Results" alt="" src="http://blog.datainspirations.com/wp-content/uploads/2010/10/ModifiedQueryResults.png" width="246" height="237"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;However, while structurally the result set is what I need, the fields generated for the dimensions above will change each time that I run the dynamic query with different specifications for rows and columns. So I need to modify the query one more time like this:&lt;/DIV&gt;
&lt;PRE&gt;&lt;DIV&gt;with&lt;/DIV&gt;
&lt;DIV&gt;member [Measures].[Measure] as [Measures].[Sales Amount]&lt;/DIV&gt;
&lt;DIV&gt;member [Measures].[RowValue] as [Product].[Category].CurrentMember.Name&lt;/DIV&gt;
&lt;DIV&gt;member [Measures].[ColumnValue] as [Date].[Calendar Year].CurrentMember.Name&lt;/DIV&gt;
&lt;DIV&gt;select {[Measures].[Measure], [Measures].[RowValue], [Measures].[ColumnValue]} on columns,&lt;/DIV&gt;
&lt;DIV&gt;non empty ([Product].[Category].[Category].Members, [Date].[Calendar Year].[Calendar Year].Members) on rows&lt;/DIV&gt;
&lt;DIV&gt;from [Adventure Works]&lt;/DIV&gt;
&lt;/PRE&gt;To get a result like this:&lt;DIV&gt;&lt;A href="http://blog.datainspirations.com/wp-content/uploads/2010/10/FinalModifiedQueryResults3.png"&gt;&lt;IMG class="alignnone size-full wp-image-257" title="Final Modified Query Results" alt="" src="http://blog.datainspirations.com/wp-content/uploads/2010/10/FinalModifiedQueryResults3.png" width="704" height="158"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;Now I can reference the generic Measure, RowValue, and ColumnValue in the report layout.&lt;/DIV&gt;
&lt;P&gt;&lt;B&gt;Matrix&lt;/B&gt;&lt;/P&gt;

&lt;P&gt;I like to test things out before I start introducing more complexity. So my next step is to add a matrix layout to the report design, and put fields into the layout and apply a little formatting as shown below.&lt;/P&gt;

&lt;P&gt;&lt;A href="http://blog.datainspirations.com/wp-content/uploads/2010/10/MatrixLayout1.png"&gt;&lt;IMG class="alignnone size-full wp-image-258" title="Matrix Layout" alt="" src="http://blog.datainspirations.com/wp-content/uploads/2010/10/MatrixLayout1.png" width="357" height="73"&gt;&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;One extra step related to formatting is required in my example. I have three possible measures, each of which uses a different format string. If I were displaying detail records, I could use the formatted_value cell property as an extended property in the textbox expression, replacing Fields!Measure.Value with Fields!Measure.FormattedValue. However, the use of a matrix here doesn't work with that approach, so... I need to create a conditional expression to set the Format property correctly:&lt;/P&gt;

&lt;PRE&gt;=Switch(Parameters!Measure.Label = "Sales Amount", "C2", Parameters!Measure.Label = "Order Quantity", "N0",&lt;/PRE&gt;
&lt;PRE&gt;Parameters!Measure.Label = "Gross Profit Margin", "P2")&lt;/PRE&gt;
&lt;P&gt;Then I preview the report to make sure all is well, which it is.&lt;/P&gt;

&lt;P&gt;&lt;B&gt;Query expression - step 1&lt;/B&gt;&lt;/P&gt;

&lt;P&gt;Now it's time to do the deed - convert the query string to an expression. To do this, I open Dataset Properties and click the expression button (fx) next to the Query box.&lt;/P&gt;

&lt;P&gt;The first step is just to enclose the query in double-quotes and prefix with an equal sign and to eliminate all the line feeds in the query. The expression needs to be one long string. If you really must add line feeds to make it easier to read, you can set up the expression like this:&lt;/P&gt;

&lt;PRE&gt;="with"&lt;/PRE&gt;
&lt;PRE&gt;+ " member [Measures].[Measure] as [Measures].[Sales Amount]"&lt;/PRE&gt;
&lt;PRE&gt;+ " member [Measures].[RowValue] as [Product].[Category].CurrentMember.Name"&lt;/PRE&gt;
&lt;PRE&gt;+ " member [Measures].[ColumnValue] as [Date].[Calendar Year].CurrentMember.Name"&lt;/PRE&gt;
&lt;PRE&gt;+ " select {[Measures].[Measure], [Measures].[RowValue], [Measures].[ColumnValue]} on columns,"&lt;/PRE&gt;
&lt;PRE&gt;+ " non  empty ([Product].[Category].[Category].Members, [Date].[Calendar Year].[Calendar Year].Members) on rows"&lt;/PRE&gt;
&lt;PRE&gt;+ " from [Adventure Works]"&lt;/PRE&gt;
&lt;P&gt;Just make sure to allow for a space between words on separate lines. I put it at the beginning of each new line so that I can see it easily. I then preview the report again to make sure that the expression works before I add in the next layer of complexity.&lt;/P&gt;

&lt;P&gt;&lt;B&gt;Query expression - step 2&lt;/B&gt;&lt;/P&gt;

&lt;P&gt;Next I plug in parameter values in the appropriate sections of the query, like this:&lt;/P&gt;

&lt;PRE&gt;="with"&lt;BR&gt;+ " member [Measures].[Measure] as " + Parameters!Measure.Value&lt;BR&gt;+ " member [Measures].[RowValue] as"&lt;BR&gt;+ " " + Split(Parameters!Rows.Value,"]")(0) + "]" + Split(Parameters!Rows.Value,"]")(1)+ "].CurrentMember.Name"&lt;BR&gt;+ " member [Measures].[ColumnValue] as"&lt;BR&gt;+ " " + Split(Parameters!Columns.Value,"]")(0) + "]"&lt;BR&gt;+ Split(Parameters!Columns.Value,"]")(1)+ "].CurrentMember.Name"&lt;BR&gt;+ " select {[Measures].[Measure], [Measures].[RowValue], [Measures].[ColumnValue]} on columns,"&lt;BR&gt;+ " non  empty (" + Parameters!Rows.Value + ", " + Parameters!Columns.Value + ") on rows"&lt;BR&gt;+ " from [Adventure Works]"&lt;/PRE&gt;
&lt;P&gt;Then I preview again. Here's the report with the default parameter settings: products on rows, dates on columns, and sales amount as the measure.&lt;/P&gt;

&lt;P&gt;&lt;A href="http://blog.datainspirations.com/wp-content/uploads/2010/10/DefaultParameterValues.png"&gt;&lt;IMG class="alignnone size-full wp-image-259" title="Default Parameter Values" alt="" src="http://blog.datainspirations.com/wp-content/uploads/2010/10/DefaultParameterValues.png" width="750" height="97"&gt;&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;And here's the report with sales territory on rows, business type on columns, and gross profit margin as the measure.&lt;BR&gt;&lt;A href="http://blog.datainspirations.com/wp-content/uploads/2010/10/ModifiedParameterValues.png"&gt;&lt;IMG class="alignnone size-full wp-image-260" title="Modified Parameter Values" alt="" src="http://blog.datainspirations.com/wp-content/uploads/2010/10/ModifiedParameterValues.png" width="499" height="145"&gt;&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;Mission accomplished!&lt;/P&gt;</description></item><item><title>Using Dynamic MDX in Reporting Services: Part 1</title><link>http://sqlblog.com/blogs/stacia_misner/archive/2010/10/07/29231.aspx</link><pubDate>Thu, 07 Oct 2010 16:40:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:29231</guid><dc:creator>smisner</dc:creator><description>&lt;p style="MARGIN:0in 0in 10pt;"&gt;If you're using Analysis Services as a data source for Reporting Services reports, you can build a simple dataset using the graphical query designer, but you'll want to switch to the generic query designer to create the MDX query string manually when you have more advanced requirements. Using the generic query designer, you can:&lt;/p&gt;&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 38.25pt;mso-add-space:auto;mso-list:l0 level1 lfo1;"&gt;· Impose greater control over the sets that you want to add to the rows axis by using set functions.&lt;/p&gt;&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 38.25pt;mso-add-space:auto;mso-list:l0 level1 lfo1;"&gt;· Add query-scoped named sets to the query in addition to calculated members. (Calculated members can also be added in the graphical query designer, but not named sets.)&lt;/p&gt;&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 10pt 38.25pt;mso-add-space:auto;mso-list:l0 level1 lfo1;"&gt;· Build dynamic MDX queries.&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;When would you need a dynamic MDX query? Whenever you want to modify the query based on a condition known only at run-time, typically based on a parameter value. If you're using the graphical query designer, you can auto-generate the report parameter's query for available values by selecting the Parameter checkbox. When the user selects a value during report execution, Reporting Services passes the unique name for the selection to the query and all is well. However, there might be situations when the user selection doesn't come from the cube, so you must find a way to convert the parameter value into a value that will work with the query.&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;In a series of posts, I will explore the available options for working with dynamic MDX queries in Reporting Services. By dynamic MDX, I mean that the query can be different each time it executes. In this post, I cover the use of &lt;a target="_blank" href="http://technet.microsoft.com/en-us/library/ms146022.aspx"&gt;StrToMember()&lt;/a&gt; and &lt;a target="_blank" href="http://technet.microsoft.com/en-us/library/ms144782.aspx"&gt;StrToSet()&lt;/a&gt; functions in parameters.&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;A very common scenario is the requirement to pass dates into a query. If you have a date filter for the report, do you really want users to navigate through a list of dates from the cube as shown below?&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;&lt;img style="WIDTH:177px;DISPLAY:inline;HEIGHT:212px;" height="212" alt="Date Parameter List" width="177" src="http://Blog.datainspirations.com/wp-content/uploads/2010/10/DateParameterList.png"&gt;&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;This list of dates - even if it's arranged hierarchically by month, quarter, and year - is what you get when you build the parameter directly from the date hierarchy in the query designer as shown below.&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;&lt;img style="WIDTH:624px;DISPLAY:inline;HEIGHT:243px;" height="243" alt="Graphical Query Designer" width="624" src="http://blog.datainspirations.com/wp-content/uploads/2010/10/GraphicalQueryDesigner.png"&gt;&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;Wouldn't a more user-friendly experience allow the user to select a data from a calendar control? I can do this by changing the auto-generated report parameter's data type to a Date/Time data type and clear the "Allow multiple values" check box. I must also change the Available Values setting for the parameter to None. I can set the default value to "No default value" to force the user to make a selection, or do something nice like define an expression to set a date, like =Today().&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;So far, so good. But the problem now is that the date data type returned by the calendar control cannot be used by the MDX query without some intervention. I need to change the Parameter Value mapped to the query parameter in the Dataset Properties to an expression, like this:&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;="[Date].[Calendar].[Date].[" + Format(CDate(Parameters!DateCalendar.Value), "MMMM d, yyyy") + "]"&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt; &lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;&lt;img style="WIDTH:624px;DISPLAY:inline;HEIGHT:246px;" height="246" alt="" width="624" src="http://blog.datainspirations.com/wp-content/uploads/2010/10/DataSetProperties.png"&gt;&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;The expression that you use to convert a date like 2/1/2008 to a valid unique name in your Date dimension might look different. My example is specific to the Adventure Works 2008 R2 cube, which requires the date member to look like this: [Date].[Calendar].[Date].[February 1, 2008].&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;That's fine so far, but the result of this expression is a string and the MDX query requires a member or a set. The autogenerated query already makes this change for you fortunately. However, if you're creating your query manually, you should understand what it's doing, especially if you need to make changes to it.&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;The autogenerated query looks like this before I make changes:&lt;/p&gt;&lt;pre&gt;SELECT NON EMPTY { [Measures].[Sales Amount] } ON COLUMNS,&lt;/pre&gt;&lt;pre&gt;NON EMPTY { ([Product].[Category].[Category].ALLMEMBERS ) }&lt;/pre&gt;&lt;pre&gt;DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS&lt;/pre&gt;&lt;pre&gt;FROM ( SELECT ( STRTOSET(@DateCalendar, CONSTRAINED) ) ON COLUMNS&lt;/pre&gt;&lt;pre&gt;FROM [Adventure Works])&lt;/pre&gt;&lt;pre&gt;&lt;span style="COLOR:#ff0000;"&gt;WHERE ( IIF( STRTOSET(@DateCalendar, CONSTRAINED).Count = 1, &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="COLOR:#ff0000;"&gt;STRTOSET(@DateCalendar, CONSTRAINED), [Date].[Calendar].currentmember ) ) &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="COLOR:#ff0000;"&gt;CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS&lt;/span&gt;&lt;/pre&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;I prefer to simplify the query as shown below - removing the text highlighted in red text above. The function does what it says - changes the string (represented by the parameter @DateCalendar) into a set object. I remove the WHERE clause from the query as the FROM clause adequately restricts the query results to cell values related to the selected date. If I need the dimension properties in the report to display something or if I need the cell properties for report formatting, I'll include only the ones I need, but for this example I have removed them all from the query.&lt;/p&gt;&lt;pre&gt;SELECT NON EMPTY { [Measures].[Sales Amount] } ON COLUMNS,&lt;/pre&gt;&lt;pre&gt;NON EMPTY { ([Product].[Category].[Category].ALLMEMBERS ) } ON ROWS&lt;/pre&gt;&lt;pre&gt;FROM ( SELECT ( STRTOSET(@DateCalendar, CONSTRAINED) ) ON COLUMNS&lt;/pre&gt;&lt;pre&gt;FROM [Adventure Works])&lt;/pre&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;You could change the StrToSet() function to a StrToMember() function and get the same result. It's not harmful to leave StrToSet() as it is. It just returns a set of one member in this case-the date from the calendar control which is a valid set. The CONSTRAINED flag is used to prevent an injection attack and requires the expression to resolve to a valid member before the query executes.&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;One challenge that often confounds people working with MDX queries in the generic query designer is the inability to copy and paste the query into Management Studio for testing when parameters are in the query as shown above. The MDX query editor doesn't support parameters. Teo Lachev (&lt;a target="_blank" href="http://prologika.com/cs/blogs"&gt;blog&lt;/a&gt; | &lt;a target="_blank" href="http://twitter.com/tlachev"&gt;twitter&lt;/a&gt;) posted &lt;a target="_blank" title="How to Test SSRS MDX Queries in SQL Server Management Studio" href="http://prologika.com/CS/blogs/blog/archive/2009/07/06/how-to-test-ssrs-mdx-queries-in-sql-server-management-studio.aspx"&gt;some advice for working with parameterized MDX queries in Management Studio&lt;/a&gt; which I encourage you to check out.&lt;/p&gt;&lt;p style="MARGIN:0in 0in 10pt;"&gt;In my next post, I'll explain how to use the OLE DB for OLAP provider with dynamic MDX to create a dataset.&lt;/p&gt;</description></item></channel></rss>