<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://denster.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fdenster.spaces.live.com%2fcategory%2fAnalysis%2bServices%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Denny Lee's Windows Live Space: Analysis Services</title><description /><link>http://denster.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catAnalysis%2bServices</link><language>en-US</language><pubDate>Sat, 16 Aug 2008 04:21:23 GMT</pubDate><lastBuildDate>Sat, 16 Aug 2008 04:21:23 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://denster.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>1323305814572094295</live:id><live:alias>denster</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Great Data Mining resource</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1492.entry</link><description>&lt;div&gt;To learn more information about  Data Mining, check out the Rafal Lukawiecki's TechNet Spotlight at: &lt;a href="http://www.microsoft.com/emea/spotlight/event.aspx?id=99"&gt;http://www.microsoft.com/emea/spotlight/event.aspx?id=99&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Data Mining and Business Intelligence for Enterprises &lt;br&gt;&lt;/strong&gt;In this one-day seminar, Rafal Lukawiecki aims to show IT Professionals how data mining can be used in IT infrastructure to support real business scenarios demystifying the perception that Data Mining is complex, untested or only for specialists. This has become possible since Microsoft has taken the technology to new levels making it accessible to all. In four easy-to-understand yet packed with practical information sessions you will learn about what Data Mining and Business Intelligence can do for you, how to deploy and manage it, how to use it, and how to make it available to other parts of your IT environment.&lt;br&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=865"&gt;Introduction to Data Mining&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=866"&gt;Working with Data Mining&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=867"&gt;Using Data Mining with your IT Systems (Part 1)&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=868"&gt;Using Data Mining with your IT Systems (Part 2)&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Enjoy!&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Great+Data+Mining+resource&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1492.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1492.entry</guid><pubDate>Mon, 02 Jun 2008 17:40:26 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1492/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1492.entry#comment</wfw:comment><dcterms:modified>2008-06-02T17:40:26Z</dcterms:modified></item><item><title>Analysis Services Distinct Count Optimization</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1461.entry</link><description>&lt;div&gt;Finally, after about 7 months of analysis, customer validation, and just general randomization - I have finally propped up the Analysis Services Distinct Count Optimization whitepaper which is available here: &lt;a href="http://sqlcat.com/whitepapers/archive/2008/04/17/analysis-services-distinct-count-optimization.aspx"&gt;http://sqlcat.com/whitepapers/archive/2008/04/17/analysis-services-distinct-count-optimization.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;em&gt;Quick summary of this whitepaper:&lt;/em&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;Distinct count (such as unique visitor counts on a Web site) calculations provide valuable information but come with a number of performance challenges. This white paper describes tests that were performed to determine how best to optimize these calculations and includes best practices based on the test results.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Analysis+Services+Distinct+Count+Optimization&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1461.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1461.entry</guid><pubDate>Thu, 17 Apr 2008 22:15:59 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1461/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1461.entry#comment</wfw:comment><dcterms:modified>2008-04-17T22:15:59Z</dcterms:modified></item><item><title>Analysis Services: For Distinct Count measure NULL = 0</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1419.entry</link><description>&lt;p&gt;If you are to look at the table of values where you want to do a distinct count on the ID column 
&lt;table cellspacing=0 cellpadding=2 width=200 border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=top width=99&gt;&lt;strong&gt;ID&lt;/strong&gt; 
&lt;td valign=top width=99&gt;&lt;strong&gt;ColA&lt;/strong&gt; 
&lt;tr&gt;
&lt;td valign=top width=99&gt;NULL 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;NULL 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;0 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;3 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;1 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;1 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;2 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;2 
&lt;td valign=top width=99&gt;blah&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Within SQL, you will get a value of 4 in which there are four distinct values, 0, 1, 2, 3 and NULL is not counted. 
&lt;p&gt;But within Analysis Services, if you were to put a distinct count measure on top of the ID column, you would also get a value of 4 for four distinct values, but those distinct values are 1, 2, 3, and 0.  In this situation, NULL and 0 are the same value.  This is a little bit more apparent if your table had the values of 
&lt;table cellspacing=0 cellpadding=2 width=200 border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign=top width=99&gt;&lt;strong&gt;ID&lt;/strong&gt; 
&lt;td valign=top width=99&gt;&lt;strong&gt;ColA&lt;/strong&gt; 
&lt;tr&gt;
&lt;td valign=top width=99&gt;1 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;2 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;2 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;3 
&lt;td valign=top width=99&gt;blah 
&lt;tr&gt;
&lt;td valign=top width=99&gt;NULL 
&lt;td valign=top width=99&gt;blah&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Within SQL, you will get a value of 3 (distinct values of 1, 2, and 3) but within AS, you will get a value of 4 (distinct values of 1, 2, 3, and NULL or 0).  There are various philosophical reasons why this is happening ranging from the fact that there are actually quite a few definitions for what NULL is (I really don't want to get into that) and within AS we're looking at things from a multi-dimensional point of view (i.e. from the dimension members) hence the exclusion of a NULL value implies exclusion of the rows.  Regardless of the philosophical point of view on this, one should just be aware of this when working with their distinct count measures. 
&lt;p&gt;Oh note, thanks to John Lam for reminding me that if you turn on the NullProcessing property it will preserve the NULL value - i.e. the first table will have 5 distinct values of 0, 1, 2, 3, and NULL.
&lt;p&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Analysis+Services%3a+For+Distinct+Count+measure+NULL+%3d+0&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1419.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1419.entry</guid><pubDate>Fri, 02 Nov 2007 07:07:55 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1419/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1419.entry#comment</wfw:comment><dcterms:modified>2007-11-10T04:59:27Z</dcterms:modified></item><item><title>Using ByAttribute or ByTable Processing Group Property with Analysis Services 2005</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1411.entry</link><description>&lt;div&gt;For any of you whom are considering using the ByTable (vs. ByAttribute) Processing Group property, I've propped up a blog called &lt;a href="http://blogs.msdn.com/sqlcat/archive/2007/10/19/using-byattribute-or-bytable-processing-group-property-with-analysis-services-2005.aspx"&gt;Using ByAttribute or ByTable Processing Group Property with Analysis Services 2005&lt;/a&gt; with help from Richard Tkachuk, Akshai Mirchandani, and Eric Jacobsen.  Basically, while using ByTable can at times be helpful, you really need to be careful on how you use it.  Read the blog for more info, eh?!  &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Using+ByAttribute+or+ByTable+Processing+Group+Property+with+Analysis+Services+2005&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1411.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1411.entry</guid><pubDate>Fri, 19 Oct 2007 20:30:16 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1411/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1411.entry#comment</wfw:comment><dcterms:modified>2007-10-19T20:30:16Z</dcterms:modified></item><item><title>Incorrect Impersonation Information may crash or hang Analysis Services</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1410.entry</link><description>&lt;div&gt;&lt;span style="font-size:12pt;color:blue;font-family:'Calibri','sans-serif'"&gt;
&lt;p style="margin:0in 0in 0pt"&gt;&lt;span lang=EN style=""&gt;&lt;font color="#000000"&gt;If you are processing your AS cube using impersonation mode, if you incorrectly place the impersonation information as MYDOMAIN/UserName instead of MYDOMAIN\UserName, you may crash or hang Analysis Services.  A quick cursory examination noted that with Sybase and DB2 relational data sources, AS ended up crashing.  If SQL Server or Oracle is your relational data source, then the processing is exceedingly slow to the point where the server was hanging; in the end eventually failing.&lt;/font&gt;&lt;/span&gt;
&lt;p style="margin:0in 0in 0pt"&gt;&lt;span lang=EN style=""&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt; 
&lt;p style="margin:0in 0in 0pt"&gt;&lt;span lang=EN style=""&gt;&lt;span lang=EN style=""&gt;&lt;font color="#000000"&gt;Thanks to &lt;a href="http://csjohnlam.spaces.live.com/"&gt;John Lam&lt;/a&gt;, &lt;a href="mailto:nick@birke.ws"&gt;Nicholas Birke&lt;/a&gt;&lt;/font&gt;&lt;font color="#000000"&gt;, and &lt;a href="mailto:msweiz1998@yahoo.com"&gt;Wei Zhang&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p style="margin:0in 0in 0pt"&gt;&lt;span lang=EN style=""&gt;&lt;span lang=EN style=""&gt;&lt;/span&gt;&lt;/span&gt; 
&lt;p style="margin:0in 0in 0pt"&gt;&lt;span lang=EN style=""&gt;&lt;span lang=EN style=""&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Incorrect+Impersonation+Information+may+crash+or+hang+Analysis+Services&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1410.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1410.entry</guid><pubDate>Fri, 12 Oct 2007 16:48:12 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1410/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1410.entry#comment</wfw:comment><dcterms:modified>2007-10-12T16:48:12Z</dcterms:modified></item><item><title>Precision Considerations for Analysis Services Users Whitepaper now available</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1409.entry</link><description>&lt;div&gt;
&lt;p&gt;For those of you whom want to know a little more about precision considerations for Analysis Services users, please check out this recently released whitepaper at &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=bae8beec-9892-4ecd-a9db-292254895f9c&amp;amp;displaylang=en"&gt;&lt;u&gt;&lt;font color="#800080"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=bae8beec-9892-4ecd-a9db-292254895f9c&amp;amp;displaylang=en&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;.
&lt;p&gt;&lt;span&gt;This white paper covers accuracy and precision considerations in SQL Server 2005 Analysis Services. For example, it is possible to query Analysis Services with similar queries and obtain two different answers. While this appears to be a bug, it actually is due to the fact that Analysis Services caches query results and the imprecision that is associated with approximate data types. This white paper discusses how these issues manifest themselves, why they occur, and best practices to minimize their effect.&lt;/span&gt;
&lt;p&gt;&lt;span&gt;Authors: Denny Lee and Eric Jacobsen&lt;/span&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Precision+Considerations+for+Analysis+Services+Users+Whitepaper+now+available&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1409.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1409.entry</guid><pubDate>Tue, 09 Oct 2007 21:42:41 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1409/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1409.entry#comment</wfw:comment><dcterms:modified>2007-10-09T21:42:41Z</dcterms:modified></item><item><title>Security Issues when Profiling Multiple Analysis Services databases</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1323.entry</link><description>&lt;p&gt;&lt;strong&gt;Problem: &lt;/strong&gt;A user with full permissions within a database cannot see any profiling events when the user has full permissions to two or more AS databases and is not a server admin.  The user will be able to trace any query related events for the first database via Profiler but he/she cannot capture any similar events for the other databases. 
&lt;p&gt;&lt;strong&gt;Reason: &lt;/strong&gt;This is a known limitation because the trace is normally a feature restricted to server Admins.  DB admins can only see the trace output whenever it is safe to assume from a security perspective that the events produced are for a specific database only.  If its not possible to guaratee events related to a single databse, then the events are not exposed to the user. 
&lt;p&gt;&lt;strong&gt;Alternative Solution&lt;/strong&gt;: An alternative solution to this problem is to go ahead to create multiple profiler traces, one for each database.  When you connect to SSAS from the Profiler, you will be able to choose to profile any of the databases that you have full admin access.  In this case, you will open up multiple profilers, one for each database and now you are profiling the AS databases desired. 
&lt;p&gt;Thanks to contributions by John Lam, Edward Melomed! 
&lt;p&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Security+Issues+when+Profiling+Multiple+Analysis+Services+databases&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1323.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1323.entry</guid><pubDate>Thu, 02 Aug 2007 01:19:05 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1323/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1323.entry#comment</wfw:comment><dcterms:modified>2007-08-02T01:19:35Z</dcterms:modified></item><item><title>Renaming an Analysis Services 2005 cube</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1321.entry</link><description>&lt;p&gt;
&lt;p&gt;There is a question on how to rename an Analysis Services 2005 cube since you cannot do that within SSMS (you can rename a database but you cannot a cube).  If you want to rename a cube prior to its deployment, you can alter it through XMLA.  To do this: 
&lt;blockquote&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;Cube ...&amp;gt;&amp;lt;ID&amp;gt;Blah&amp;lt;/ID&lt;font style="background-color:#ffff00"&gt;&amp;gt;&amp;lt;Name&amp;gt;Foo&amp;lt;/Name&amp;gt;&lt;/font&gt;...&lt;/font&gt;&lt;/blockquote&gt;
&lt;p&gt;As you can see from above, the &amp;lt;Name&amp;gt; node can be changed so that while the ID for this cube is still &amp;quot;blah&amp;quot;, now your name can be &amp;quot;Foo&amp;quot;. 
&lt;p&gt;But if you want to change the name of your cube after its already been deployed, there are an additional number of steps that will need to be performed.  First you will need to go the Olap database folder, e.g. 
&lt;blockquote&gt;
&lt;p&gt;C:\Program Files\Microsoft SQL Server\MSSQL.2\olap\Data\[Database Name].0.db&lt;/blockquote&gt;
&lt;p&gt;and then access the cube XML definition file within that folder, such as: &lt;strong&gt;[Cube Name].0.cub&lt;/strong&gt;.  The XML within this file will look like (with a cube name of “Blah”) 
&lt;blockquote&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;Cube&amp;gt;&lt;font style="background-color:#ffff00"&gt;&amp;lt;Name&amp;gt;Blah&amp;lt;/Name&amp;gt;&lt;/font&gt;&amp;lt;ID&amp;gt;Blah&amp;lt;/ID&amp;gt;...&lt;/font&gt;&lt;/blockquote&gt;
&lt;p&gt;So you need only to change the name of the &amp;lt;Name&amp;gt; node (e.g. now “Foo”) to: 
&lt;blockquote&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;Cube&lt;font style="background-color:#ffff00"&gt;&amp;gt;&amp;lt;Name&amp;gt;Foo&amp;lt;/Name&amp;gt;&lt;/font&gt;&amp;lt;ID&amp;gt;Blah&amp;lt;/ID&amp;gt;...&lt;/font&gt;&lt;/blockquote&gt;
&lt;p&gt;You will also need to stop/restart the AS service for it to register the new name.
&lt;p&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Renaming+an+Analysis+Services+2005+cube&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1321.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1321.entry</guid><pubDate>Fri, 20 Jul 2007 23:36:09 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1321/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1321.entry#comment</wfw:comment><dcterms:modified>2007-07-20T23:36:55Z</dcterms:modified></item><item><title>SSAS 2005 Error Codes and Messages</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1316.entry</link><description>&lt;div&gt;Thanks to Edward Melomed and Eric Jacobsen for these quick tips!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In order to view the full list of error codes and messages for SQL Server Analysis Services 2005, you can open up Visual Studio and look at the resources within the msmdsrv.rll file.  A quick and handy way to view the RLL file is to use Mark Russinovich's &lt;strong&gt;Strings&lt;/strong&gt; utility from Sysinternals - you can find it at: &lt;a href="http://www.microsoft.com/technet/sysinternals/Miscellaneous/Strings.mspx"&gt;http://www.microsoft.com/technet/sysinternals/Miscellaneous/Strings.mspx&lt;/a&gt;.  Note that this RLL file has the tracedefinition90.xml file embedded inside it.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+SSAS+2005+Error+Codes+and+Messages&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1316.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1316.entry</guid><pubDate>Wed, 18 Jul 2007 21:17:57 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1316/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1316.entry#comment</wfw:comment><dcterms:modified>2007-07-18T21:17:57Z</dcterms:modified></item><item><title>Analysis Services 2005 Trace Event Definitions</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1317.entry</link><description>&lt;p&gt;In the Best Practices whitepaper Analysis Services Processing Best Practices (&lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/ssaspbpr.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/ssaspbpr.mspx&lt;/a&gt;), I had noted in the &lt;strong&gt;Troubleshooting Best Practices &amp;gt; Create a system-wide trace file&lt;/strong&gt; section that you could create a Analysis Services Processing Trace via XMLA.  &lt;em&gt;Many thanks again to Dave Wickert for providing this example&lt;/em&gt;.  
&lt;p&gt;But I had forgot to note where one can get all of the trace event definitions from.  To do this, go to the [%Olap Data Folder%]\bin\Resources\1033 folder (by default [%Olap Data Folder%] is C:\Program Files\Microsoft SQL Server\MSSQL.2\Olap) and open up the file tracedefinition90.xml.  In there, you can find all of the trace event definitions.
&lt;p&gt;&lt;br&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Analysis+Services+2005+Trace+Event+Definitions&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1317.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1317.entry</guid><pubDate>Wed, 18 Jul 2007 07:50:33 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1317/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1317.entry#comment</wfw:comment><dcterms:modified>2007-07-20T23:37:28Z</dcterms:modified></item><item><title>Distinct Count Optimization for Analysis Services 2005</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1315.entry</link><description>&lt;div&gt;In reference to my blog on Distinct Count Optimization at &lt;a href="http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1156.entry"&gt;http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1156.entry&lt;/a&gt;, I would like to expand it slightly specifically for Analysis Services 2005.  Based on customer visits and more extensive testing, I have found that following most of the advice in my original blog entry will help improve distinct counts.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font style="background-color:#ffff00"&gt;But, for Analysis Services 2005, it will be better to partition where the distinct value (e.g. users) are placed in the same partition&lt;/font&gt;.  This is different from Analysis Services 2000 where the partitioning strategy was to take that same distinct value and spread it across as many partitions as possible.  For AS2k5, there was significant improvement when using this new partitioning strategy.  Over the next couple of months, I'll update this blog entry when I finally get a best practices whitepaper to provide more details on this.  &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Distinct+Count+Optimization+for+Analysis+Services+2005&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1315.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1315.entry</guid><pubDate>Fri, 13 Jul 2007 23:49:56 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1315/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1315.entry#comment</wfw:comment><dcterms:modified>2007-07-20T23:38:03Z</dcterms:modified></item><item><title>Scale Out Querying with Analysis Services</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1300.entry</link><description>&lt;div&gt;For more information on scale out querying architecture with Analysis Services, a new whitepaper can be found on the SQLCAT Best Practices Technet site:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Scale-Out Querying with Analysis Services&lt;br&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/scoqryas.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/scoqryas.mspx&lt;/a&gt;&lt;br&gt;Denny Lee, Nicholas Dritsas&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;br&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Scale+Out+Querying+with+Analysis+Services&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1300.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1300.entry</guid><pubDate>Sat, 16 Jun 2007 04:13:23 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1300/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1300.entry#comment</wfw:comment><dcterms:modified>2007-07-20T23:38:40Z</dcterms:modified></item><item><title>Analysis Services Best Practices Papers published</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1292.entry</link><description>&lt;div&gt;Check out two new Analysis Services Best Practice whitepapers:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Analysis Services Processing Best Practices &lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/ssaspbpr.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/ssaspbpr.mspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Analysis Services Query Performance Top 10 Best Practices&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/ssasqptb.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/ssasqptb.mspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Analysis+Services+Best+Practices+Papers+published&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1292.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1292.entry</guid><pubDate>Tue, 12 Jun 2007 05:38:30 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1292/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1292.entry#comment</wfw:comment><dcterms:modified>2007-07-20T23:38:51Z</dcterms:modified></item><item><title>Optimizing your distinct count calculation in Analysis Services</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1156.entry</link><description>&lt;div&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;font size=2&gt;&lt;u&gt;&lt;span style="font-size:14pt;line-height:115%"&gt;Optimizing your distinct count calculation in Analysis Services&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span style="font-size:12pt;line-height:115%"&gt;&lt;/span&gt;&lt;/u&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;b&gt;Introduction&lt;/b&gt; &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;A distinct count (e.g. unique user or visitor counts) provides valuable information but it is not an easy problem to resolve.&lt;span&gt;  &lt;/span&gt;An example of this problem is your grocery &amp;quot;market basket&amp;quot; scenario where a single visitor purchased various dairy, meat, and vegetable items.&lt;span&gt;  &lt;/span&gt;While there may be eight (for example) items purchased, these items were all purchased by one person.&lt;span&gt;  &lt;/span&gt;Understanding that one person purchased many items can be very revealing in the context of business intelligence.&lt;span&gt;  &lt;/span&gt;Using a web analytics example, if you have a high &lt;i&gt;activity / visitor&lt;/i&gt; web site that has a lot of traffic in comparison to visitors (e.g. a financial market site where a set of number of users are viewing many web pages to do market research), you have a very &amp;quot;sticky&amp;quot; web site with relatively loyal users.&lt;span&gt;  &lt;/span&gt;On the other hand, if you have a low &lt;i&gt;activity / visitor&lt;/i&gt; web site that has a lot of users but not so much traffic in comparison (e.g. an auto site where many visitors view many different auto web site to find the best deal in cars), you have a less “sticky” web site with relatively un-loyal visitors.&lt;span&gt;  &lt;/span&gt;Both business scenarios reveal different insight about the types of visitors to your web site business allowing you to make some actionable business items. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;Often distinct counts are solved via custom applications and pipelines; more prevalent advanced solutions utilize data mining techniques.&lt;span&gt;  &lt;/span&gt;Helping out the cause for many business intelligence analysts, the distinct count measure was introduced within Analysis Services 2000 (AS2k).&lt;span&gt;   &lt;/span&gt;It was based originally on the dimension structure within AS2k and provided fast access to distinct count calculations for small-to-medium size volumes of data.&lt;span&gt;  &lt;/span&gt;Much expanded in Analysis Services 2005 (AS2k5), the distinct count measure was redesigned based on the AS2k5’s hierarchy and attribute structure.&lt;span&gt;  &lt;/span&gt;This allowed the distinct count measure to be calculated on much larger volumes of data. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;Saying this, typically users of Analysis Services will want to apply the distinct count measure on enterprise size amount of data (loosely defined as 20 million rows/day or greater).&lt;span&gt;  &lt;/span&gt;While Analysis Services 2005 provides much better functionality out of the box including: &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;No longer having only 3Gb of memory to work with (AS2k could use a maximum of 3Gb of memory irrelevant of how much memory the server has) &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The 64-bit version of AS2k was never working that usable or workable (AS2k5 rocks!) &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The attribute/hierarchy model of AS2k5 handles the Cartesian problem (any measure needs to be calculated for every possible dimension member in combination with every other dimension member) in a very different way than a dimensional model. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;there are still some limitations of the distinct count measure.&lt;span&gt;  &lt;/span&gt;This is due to the fact that: &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Distinct count measures require quite a bit of memory to store information on the property that is being counted (e.g. a user).&lt;span&gt;  &lt;/span&gt;This is eased by using 64-bit AS2k5 with its hexadecimal amounts of memory space but one only has so much memory before your server “runs out”. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The attribute/hierarchy design of the AS2k5 allows distinct counts to be calculated by referring to the hierarchy or path of your dimension.&lt;span&gt;  &lt;/span&gt;That is, the hierarchy of a dimension (e.g. Browser &amp;gt; Internet Explorer &amp;gt; Internet Explorer 7.0 &amp;gt; Internet Explorer 7.0 SP1) allows a distinct count to be calculated faster by incrementing the count up the hierarchy. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;For the vast majority of the time, distinct counts are calculated at run-time vs. processing time.&lt;span&gt;  &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;The advantage of Analysis Services (and any OLAP system in general) is that it can pre-aggregate quite a bit of data.&lt;span&gt;  &lt;/span&gt;That way, when a query is sent to the OLAP cube the information is already calculated for you.&lt;span&gt;  &lt;/span&gt;Analysis Services proprietary data design also allows the engine to quickly calculate metrics that are not even pre-calculated.&lt;span&gt;  &lt;/span&gt;The problem is that with distinct counts it is not simple to pre-aggregate the various combinations of distinct counts by the many dimensions.&lt;span&gt;  &lt;/span&gt;And even if you are able to pre-aggregate various distinct counts, it is impossible to do this for all dimension members.&lt;span&gt;  &lt;/span&gt;After all, if you were to perform all of the possible cross-correlations for dimension members with each other – the result set would be far greater than the original data set.&lt;span&gt;  &lt;/span&gt;Because of these issues, distinct counts are typically calculated at run-time – i.e. at the moment the user asks the question. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;Understanding these issues allows us to note ways of optimizing the OLAP distinct count.&lt;span&gt;  &lt;/span&gt;These techniques are applicable to both AS2k and AS2k5; though the terminology used here is for AS2k5.&lt;span&gt;  &lt;/span&gt;The basic run down of these distinct count optimization techniques are to: &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Create a separate measure group for each distinct count measure &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Create custom aggregations &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Create a partitioning strategy for your OLAP cube allowing yourself to “distribute” the data. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;  &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;b&gt;Create a separate measure group for each distinct count measure&lt;/b&gt; &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;As noted above, a separate measure group should be created for the distinct count measure containing only the distinct count measure.&lt;span&gt;  &lt;/span&gt;Create a cube to join the “distinct” measure group with all of the other measure groups.&lt;span&gt;  &lt;/span&gt;This does mean that will have multiple copies of the exact same measure group except that they have different measures within in them (especially the distinct count measures).&lt;span&gt;  &lt;/span&gt;The reason to do this is that: &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Distinct count measure is designed architecturally different from other measures like sum, count, min, or max. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Noting this architectural difference, adding other measures with the distinct count will exponentially increase the size of the cube thus resulting in slower processing and slower query times. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;  &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;b&gt;Create your own custom aggregations&lt;/b&gt; &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span&gt;                &lt;/span&gt;Creating custom aggregations can force the Analysis Services engine to pre-calculate some aggregations while not calculating others.&lt;span&gt;  &lt;/span&gt;While this can be done for any and all measures, this is rather effective for distinct count measures.&lt;span&gt;  &lt;/span&gt;This is because distinct counts are typically the most complicated at the summary level (the highest level of the hierarchy) hence creating custom aggregations at that level will allow the Analysis Services engine to calculate these at processing time (hence much faster queries).&lt;span&gt;  &lt;/span&gt;For example, within the context of web analytics users will typically query for day, week, and monthly reports.&lt;span&gt;  &lt;/span&gt;Hence if one created an OLAP cube for web analytics, one can build custom aggregations for those time periods. &lt;/font&gt;&lt;/font&gt;
&lt;p align=center&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif" color="#000000"&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt; &lt;img src="http://tkfiles.storage.msn.com/x1pAWNx2dMPycAOx8MplYni5XLnD5OwTb52GxpIoy4JAJt2EvxXSadBstUTB1qZynMhc6Rv1ARuwLY-KpMqmObGRB-basxc8hfja3nCkAtPCsLHwHkPh8cZ3Q"&gt; &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;Using the view of the sample Budget cube from AS2k, notice from above that you can set the Time dimension to aggregate at the “Bottom Level Only” instead of “Standard”.&lt;span&gt;  &lt;/span&gt;In this particular case, this would tell the Analysis Services processing engine to design aggregations for the &lt;u&gt;“month” level&lt;/u&gt; only instead of the standard approach. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;  &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;b&gt;Create a partitioning strategy for your OLAP cube&lt;/b&gt; &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;As noted above, by creating a partitioning strategy for your OLAP cube, you will be able to “distribute” the data across multiple files thus allowing more threads to calculate the distinct counts faster.&lt;span&gt;  &lt;/span&gt;Typically, for maintenance, processing, and querying purposes – if you have a medium volume or larger amount of data within your fact tables – you will typically partition the data by regular intervals.&lt;span&gt;  &lt;/span&gt;For example, some enterprise-size OLAP cubes will be partitioned by day because the vast majority of the queries are done at the day level.&lt;span&gt;  &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;For AS2k, we had determined an optimization technique that is quite counter-intuitive.&lt;span&gt;  &lt;/span&gt;&lt;span&gt; &lt;/span&gt;On top of creating partitions by a time period, you create additional partitions by some other dimension thus partitioning the data even further (within AS2k5, this implies that you need to do query binding vs. table binding for your partitions).&lt;span&gt;  &lt;/span&gt;&lt;span&gt; &lt;/span&gt;What is counter-intuitive is that you would create partitions where the distinct IDs (e.g. unique visitors) are spread out through all of the partitions.&lt;span&gt;  &lt;/span&gt;That is, partition by dimension(s) that have the distinct IDs repeated in most/all partitions.&lt;span&gt;  &lt;/span&gt;The above is counter-intuitive in that most would try to partition by a dimension that minimized the distinct ID replication throughout the partitions which may be the case for AS2k5.&lt;span&gt;  &lt;/span&gt;Either way, at query time, this design forces the Analysis services engine to utilize multiple threads to calculate distinct counts instead of just one thread.&lt;span&gt;  &lt;/span&gt;That is, now you have distributed query calculations in parallel.&lt;span&gt;  &lt;/span&gt;&lt;span&gt; &lt;/span&gt;Empirical analysis noted a four to ten time improvement in distinct count queries by using this design. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;  &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;b&gt;Partitioning Strategy Example&lt;/b&gt; &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span&gt;                &lt;/span&gt;Going back to the grocery market basket analysis mentioned above, the question to be answered is “how many customers do I have that have purchased multiple products within a grocery store?” &lt;span&gt; &lt;/span&gt;Using this example, the partitioning choices can be: &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;None &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Partition by Users (minimize ID replication throughout partitions) &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Partition by Products (replicate ID users throughout as many partitions as possible) &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;Below is a graphical representation of three people (beige, orange, and blue) purchasing seven different products (a-g).&lt;span&gt;  &lt;/span&gt;If you use no partitioning strategy, a single thread will go through these 15 “facts”to calculate there are: &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;3 distinct users &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;1 user that purchased product g and another f &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;2 users that purchased b &lt;/font&gt;&lt;/font&gt;
&lt;p align=center&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif" color="#000000"&gt;&lt;img src="http://tkfiles.storage.msn.com/x1pAWNx2dMPycAOx8MplYni5a6rxCKmznZssrPiqHuDaa_ZzToxeawC-2cocBhReeUL_WZdhjz47jBUl88krv87vo2ayxGIq-OJNn_jPJ3F7aM"&gt; &lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;Note, there is one thread for one partition to analyze the data. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;Another option is to partition by users to minimize replication of users within these partitions: &lt;/font&gt;&lt;/font&gt;
&lt;p align=center&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif" color="#000000"&gt;&lt;img src="http://tkfiles.storage.msn.com/x1pAWNx2dMPycAOx8MplYni5bknwH8OzVwSPPnJ_XguA_y9Z0DdarUkP5Ct3meAcX5Z_P-0o5dlaND6DB0n4xo0ZFugFTwoMPtME7-sQRAozfNDbAFYHLehHw"&gt; &lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;Notice, there are now three threads to help perform this calculation.&lt;span&gt;   &lt;/span&gt;As you can see, this particular partitioning strategy will be much faster than having no partitioning.&lt;span&gt;  &lt;/span&gt;&lt;span style="background:yellow"&gt;As well, within the context of AS2k5, this actually may be the optimal solution due to the redesign of Analysis Services to an attribute/hierarchy model&lt;/span&gt;. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span&gt;                &lt;/span&gt;The optimal partition strategy for AS2k (and potentially for AS2k5) is to partition by a dimension in which the users are spread evenly across all partitions. &lt;/font&gt;&lt;/font&gt;
&lt;p align=center&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif" color="#000000"&gt;&lt;img src="http://tkfiles.storage.msn.com/x1pAWNx2dMPycAOx8MplYni5VmM3sjvN8afr7HrFTdHVAh0WrKVP4R2BSEYZrcSyC-8Fv8beFWPdX4YGWyIs_5qU_SNLEmjC1EH-1b2vijb7wc"&gt; &lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;Referring to the above graphic, now we have seven threads to quickly determine the distinct counts. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;As you can see from the above example, by partitioning so that the distinct users are spread across multiple partitions, there will be more thread and less data for those threads to calculate the distinct counts.&lt;span&gt;  &lt;/span&gt;You will need to be careful with your partitioning strategy – you can actually run the risk where you peg the processors if there are too many threads running (hence the importance of multi-proc OLAP machines).&lt;span&gt;  &lt;/span&gt;In the above example, the CPU utilization for a single enterprise-size query by a single user was that of: &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;One partition: 25% &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Three partitions: 50% &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-family:Symbol"&gt;&lt;span&gt;·&lt;span style="font:7pt 'Times New Roman'"&gt;&lt;font size=2&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Seven partitions: 75-80% &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;While these numbers are approximations and the CPU was pegged for milliseconds, as your system becomes larger and is utilized by more people, it will be that much more important to take into account of this. &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;  &lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif" color="#000000"&gt; &lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;table cellspacing="0" border="0"&gt;&lt;tr height="8"&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1ph2QtVrCqPuR9osnNnJsXkiAakNdkrGgUgT0hPJxo7q98LqPAvA9_ew"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;125D53A08EC75357&amp;#33;1157&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1pLF1lKV02R8GjPLfuCMv-u6ZTlPNVqWbzN1_SPMFX9xJ4XTfOA7oycQ"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;125D53A08EC75357&amp;#33;1158&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1p9nV0X9Uf4NnZfBjn3EdHf0csDYlS0qb5rVNK2_fhs-tUvzaLnw94fQ"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;125D53A08EC75357&amp;#33;1159&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1pzp0QALhc_t7CTg2Zxzy7qBVJw1J02qu_-u4Zm_iSbvg8wtUW4DP38w"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;125D53A08EC75357&amp;#33;1160&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Optimizing+your+distinct+count+calculation+in+Analysis+Services&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1156.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1156.entry</guid><pubDate>Sun, 19 Nov 2006 03:38:28 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!1156/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!1156.entry#comment</wfw:comment><dcterms:modified>2007-07-13T06:34:42Z</dcterms:modified></item><item><title>New INTERSECT and EXCEPT operators in Sql Server 2005 T-SQL</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!327.entry</link><description>&lt;p&gt; This is a great explanation of using the new SQL 2k5 operators of INTERSECT and EXCEPT instead of inner and outer joins.
&lt;p&gt;Quote 
&lt;blockquote&gt;&lt;a href="http://codebetter.com/blogs/raymond.lewallen/archive/2005/08/01/130061.aspx"&gt;Raymond Lewallen : New INTERSECT and EXCEPT operators in Sql Server 2005 T-SQL&lt;/a&gt;&lt;br&gt;&lt;/blockquote&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+New+INTERSECT+and+EXCEPT+operators+in+Sql+Server+2005+T-SQL&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!327.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!327.entry</guid><pubDate>Fri, 24 Feb 2006 21:13:01 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!327/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!327.entry#comment</wfw:comment><dcterms:modified>2006-02-24T21:13:01Z</dcterms:modified></item><item><title>MDX: Count number of dimension members</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!323.entry</link><description>&lt;div&gt;If you are trying to count the number of dimension members via MDX, where your measure is [Measure].[Item Quantity] and dimension is [Item].members, you can write your MDX query as:&lt;/div&gt;
&lt;div&gt;&lt;font color="#0000ff"&gt;with&lt;br&gt;member [Measures].[blah] as 'Count(Crossjoin({[Item].members}, {[Measures].[Item Quantity]}), EXCLUDEEMPTY)'&lt;br&gt;select {&lt;br&gt;  [Measures].[Item Quantity], [Measures].blah&lt;br&gt;} on columns, {&lt;br&gt;  [Item].children&lt;br&gt;} on rows&lt;br&gt;from [Cube]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+MDX%3a+Count+number+of+dimension+members&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!323.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!323.entry</guid><pubDate>Mon, 16 Jan 2006 19:37:29 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!323/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!323.entry#comment</wfw:comment><dcterms:modified>2007-07-13T23:38:28Z</dcterms:modified></item><item><title>Analysis Services 2005 Usage Based Optimization and OlapQueryLog</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!297.entry</link><description>&lt;div&gt;The Usage-based Optimization feature is alive and well within SQL Server 2005 Analysis Services (AS2k5).  But by default, the QueryLog feature (which samples and records the queries sent to AS2k5 is turned off.  To turn it on, you will need to:&lt;/div&gt;
&lt;div&gt;1) Create a SQL database (e.g. QueryLog) on the Analysis Services server (Actually, you can put it on another SQL server if you like, but the preferred option is to place it on the SQL server on the box).&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;2) Through SQL Management Studio, connect to your Analysis Services, right click, and click on &amp;quot;Properties&amp;quot;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;3) Within the Analysis Services Properties dialog, scroll down the properties, and first look for:&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Log \ QueryLog \ QueryLogConnectionString&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Click on the &lt;em&gt;Value&lt;/em&gt; column and it will provide you a dialog to point the connection string to the SQL database.  Point to the SQL dB (e.g. QueryLog) that you had just created.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;4) Then scroll to the property&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Log \ QueryLog \ CreateQueryLogTable&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Flip the &lt;em&gt;Value&lt;/em&gt; column from &lt;strong&gt;false&lt;/strong&gt; to &lt;strong&gt;true&lt;/strong&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;5) Click on &lt;strong&gt;OK &lt;/strong&gt;and then you will have created the OlapQueryLog table within the QueryLog (if that's what you called it) database.  The name of the table is actually the parameter:&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Log \ QueryLog \ QueryLogTableName&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Now that you have created your query log table, you can send queries to your OLAP cubes and then when its time to perform usage-based optimization:&lt;/div&gt;
&lt;div&gt;1) Connect to your Olap cube via the SQL Management Studio&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;2) Go down the hierarchy of &lt;em&gt;Measure Group &amp;gt; Partition&lt;/em&gt;, right-click the partition in question and then you will be provided the &amp;quot;Usage-based Optimization Wizard&amp;quot;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;From there, you can use that wizard to optimize your Olap cubes.  The &amp;quot;SQL Server Books Online&amp;quot; provides good reference material for the wizard and can view some of the screenshots of it right now at Mosha's blog at: &lt;a href="http://www.sqljunkies.com/WebLog/mosha/archive/2005/06/23/usage_based_optimization.aspx"&gt;http://www.sqljunkies.com/WebLog/mosha/archive/2005/06/23/usage_based_optimization.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Analysis+Services+2005+Usage+Based+Optimization+and+OlapQueryLog&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!297.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!297.entry</guid><pubDate>Wed, 23 Nov 2005 08:30:55 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!297/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!297.entry#comment</wfw:comment><dcterms:modified>2007-07-13T08:00:34Z</dcterms:modified></item><item><title>Analysis Services 2005 Drillthrough</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!296.entry</link><description>&lt;div&gt;Drillthrough functionality is quite different in AS2k5 vs. AS2k.  The latter originally queries the SQL server directly when you want to drillthrough to the data.  In AS2k5, the drillthrough data is placed directly into the OLAP cube so you can drillthrough without ever connecting to the SQL database (assuming that is your source).   Saying this, this functionality is on by default and does increase the size of the OLAP database.  But performance is not affected and now you have this additional functionality.  For more information, T.K. Anand wrote an excellent paper on this at: &lt;/div&gt;
&lt;div&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql2k5_anservdrill.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql2k5_anservdrill.asp&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;To provide an example against the AdventureWorks OLAP database (that comes with SQL Server 2005 Samples), you can query the Adventure Works Olap dB using the MDX statement:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace" color="#0000ff"&gt;select {&lt;br&gt; [Measures].[Internet Order Quantity]&lt;br&gt;} on columns, {&lt;br&gt; [Product].[Product Categories].children&lt;br&gt;} on rows&lt;br&gt;from [Adventure Works]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;br&gt; &lt;/div&gt;
&lt;div&gt;where it outputs the Internet Order quantities for all of the different categories.  If you want to drillthrough, for example, just the Clothing category (one of the children of the [Product].[Product Categories] hierarchy, you need only to run the following MDX statement:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New, Courier, Monospace" color="#0000ff"&gt;drillthrough maxrows 100&lt;br&gt;select &lt;br&gt; {[Measures].[Internet Order Quantity]} on 0,&lt;br&gt; {[Product].[Product Categories].[Clothing]} on 1&lt;br&gt;from [Adventure Works]&lt;br&gt;return&lt;br&gt; [$Product].[Model Name] as [Model Name],&lt;br&gt; [$Customer].[Full Name] as [Customer Name],&lt;br&gt; [$Customer].[Country-Region] as [Country Region],&lt;br&gt; [$Measures].[Internet Order Quantity] as [Orders],&lt;br&gt; [$Measures].[Internet Sales Amount] as [Sales],&lt;br&gt; [$Measures].[Internet Total Product Cost] as [Cost]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Note that you didn't need to turn any drillthrough functionality on with the AdventureWorks OLAP dB - its already on.  Cool, eh?!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Analysis+Services+2005+Drillthrough&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!296.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!296.entry</guid><pubDate>Wed, 16 Nov 2005 01:02:39 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!296/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!296.entry#comment</wfw:comment><dcterms:modified>2007-07-13T23:39:49Z</dcterms:modified></item><item><title>How to handle many-to-many relationships in Yukon?</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!283.entry</link><description>&lt;div&gt;It is tempting to try to use parent-child relationships to handle many-to-many relationships but Yukon has introduced a many-to-many relationship functionality that's really cool.  For example, using a geography hierarchy noted below, France and Spain both belong to a hierarchy of &amp;quot;Western Europe&amp;quot; and &amp;quot;EU&amp;quot;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Western Europe&lt;br&gt;        Switzerland (SZ)&lt;br&gt;        France (FR)&lt;br&gt;        Spain (SP)&lt;br&gt;        Lithuania (LI)&lt;/div&gt;
&lt;div&gt;EU&lt;br&gt;        France (FR)&lt;br&gt;        Spain (SP)&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;And the problem with many-to-many relationships is that you risk double-counting, double-summing of in this scenario.  Well, to resolve this, you can use the reference of:&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.sqljunkies.com/WebLog/sqlbi/archive/2004/10/04/4447.aspx"&gt;http://www.sqljunkies.com/WebLog/sqlbi/archive/2004/10/04/4447.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Instead of the above examples of Customer, Account and CustomerAccount; you would create a Region (Western Europe, EU), Country (SZ, FR, SP, LI), and a CountryRegion table which maps the many-to-many relationships between the country and region.&lt;/div&gt;
&lt;div&gt;&lt;br&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+How+to+handle+many-to-many+relationships+in+Yukon%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!283.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!283.entry</guid><pubDate>Sat, 22 Oct 2005 00:05:10 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!283/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!283.entry#comment</wfw:comment><dcterms:modified>2005-10-22T00:05:10Z</dcterms:modified></item><item><title>How to get MDX "top" and "bottom"</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!282.entry</link><description>&lt;div&gt;Often, you will want to get the top or bottom X number of dimension members based on the dimension hierarchy.  Within Analysis Services, you have the functions of TopCount, TopSum, and TopPercent (and the equivalent of Bottom functions) but these are based on a Measure.  And what you want is the top child or bottom child of a member based on the dimension order - not on the Measure order.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Well, to do this:&lt;/div&gt;
&lt;div&gt;with&lt;br&gt;member [Measures].[test] as '1'&lt;br&gt;select {&lt;br&gt;  [Measures].[My Count]&lt;br&gt;} on columns, {&lt;br&gt;    topcount(descendants([Domain].[Domain Hierarchy], 2, LEAVES), 1),&lt;br&gt;    bottomcount(descendants([Domain].[Domain Hierarchy], 2, LEAVES), 1)&lt;br&gt;} on rows&lt;br&gt;from [Cube]&lt;br&gt;&lt;br&gt;The trick for this is that:&lt;br&gt;The &lt;em&gt;Descendants&lt;/em&gt; function will insure to get all of the members of the dimension hierarchy.  The two (2) is the number of levels you want to go down; you'll want to specify what you want.&lt;br&gt;&lt;br&gt;The problem in this case with &lt;em&gt;TopCount&lt;/em&gt; and &lt;em&gt;BottomCount&lt;/em&gt; (because in this case you're looking for the SQL equivalent of top and bottom against the dimension) is that its based on a measure.  So you'll notice the TopCount and BottomCount is applied against a measure I created ([Measures].[test]) which has a value of 1.&lt;br&gt;&lt;br&gt;Since all of the values are 1, then the TopCount and BottomCount will simply go with the internal hierarchy which then is the equivalent of FirstChild.FirstChild and LastChild.LastChild in these cases respectively because I had specified 1 as the last parameter of TopCount/BottomCount.  You can specify a higher number to get the top and bottom 5 for example.&lt;/div&gt;
&lt;div&gt;  &lt;br&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+How+to+get+MDX+%22top%22+and+%22bottom%22&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!282.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!282.entry</guid><pubDate>Wed, 19 Oct 2005 22:56:36 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!282/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!282.entry#comment</wfw:comment><dcterms:modified>2005-10-19T22:56:36Z</dcterms:modified></item><item><title>OLAP and SQL Firewall Configuration</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!189.entry</link><description>&lt;p&gt;&lt;strong&gt;OLAP and SQL Firewalls&lt;/strong&gt;
&lt;p&gt;For a client or middle-tier to access You will need to open the following firewall ports:&lt;br&gt;SQL Server: 1433
&lt;p&gt;OLAP Services: 2393, 2394, 2725
&lt;p&gt;For more information, please refer to:&lt;br&gt;Q301901 or&lt;br&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csvr2002/htm/cs_dp_typical_mjjt.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csvr2002/htm/cs_dp_typical_mjjt.asp&lt;/a&gt;&lt;br&gt;
&lt;p&gt; 
&lt;p&gt;For Yukon (SQL Server 2005), you will need to open as well:
&lt;p&gt;Analysis Services 2005: 2383 (default port), 2382 (redirector port)
&lt;p&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+OLAP+and+SQL+Firewall+Configuration&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!189.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!189.entry</guid><pubDate>Thu, 23 Jun 2005 02:50:00 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!189/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!189.entry#comment</wfw:comment><dcterms:modified>2005-07-14T05:42:23Z</dcterms:modified></item><item><title>Calculate Memory Used by Olap</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!183.entry</link><description>&lt;p&gt;&lt;strong&gt;Calculate Memory used by OLAP&lt;/strong&gt;&lt;br&gt;To calculate memory, the formula is:&lt;br&gt;DimSize = (M x (61 + 4L + Sa + Sk))) + 4P + Sn &lt;p&gt;where &lt;ul&gt; &lt;li&gt;M: Number of members in the dimension.  &lt;li&gt;L: Number of levels in the dimension, including the ALL level. &lt;li&gt;Sa: Average size required to hold the member names. &lt;li&gt;Sk: Size required to hold the member key.   &lt;li&gt;P: Number of member property settings in the dimension for all levels.   &lt;li&gt;Sp: Size required to hold the distinct member property values for all member levels.  &lt;br&gt;&lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Calculate+Memory+Used+by+Olap&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!183.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!183.entry</guid><pubDate>Wed, 22 Jun 2005 07:14:10 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!183/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!183.entry#comment</wfw:comment><dcterms:modified>2005-06-22T07:14:10Z</dcterms:modified></item><item><title>Olap's Lazy Aggregation Error</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!182.entry</link><description>&lt;p&gt;&lt;strong&gt;Lazy Aggregation Error&lt;br&gt;&lt;/strong&gt;If you get an “Error during lazy aggregation of partition %PartName% in cube %CubeName%, this is typically caused by a lazy aggregation error.  To resolve this, you can: &lt;ul&gt; &lt;li&gt;Is the registry key &lt;u&gt;ProcessReadSegmentSize&lt;/u&gt; at least 60% of physical memory on the machine?   &lt;li&gt;How much disk space available for the temporary directory? &lt;br&gt;&lt;/ul&gt; &lt;p&gt;Resolution of either one of these things should remove the Lazy Aggregation Error you are seeing.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Olap's+Lazy+Aggregation+Error&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!182.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!182.entry</guid><pubDate>Wed, 22 Jun 2005 07:13:00 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!182/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!182.entry#comment</wfw:comment><dcterms:modified>2005-06-22T07:14:17Z</dcterms:modified></item><item><title>How to archive an OLAP database (not using msmdarch.exe)</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!162.entry</link><description>&lt;p&gt;&lt;strong&gt;How to archive an OLAP database (not using msmdarch.exe)&lt;/strong&gt; &lt;p&gt;To provide an unsupported method to archive an Olap database instead of using msmdarch.exe. &lt;ol&gt; &lt;li&gt;You can backup the file folder containing the Olap data (i.e. c:\Program Files\Microsoft Analysis Services\Data) and the Olap repository SQL database (assumes you migrated the Olap repository to a SQL database).  Note, this will backup the entire server. &lt;li&gt;To backup a specific OLAP database, you can: &lt;ol&gt; &lt;li&gt;Archive the c:\Program Files\Microsoft Analysis Services\Data\OlapDB folder and the c:\Program Files\Microsoft Analysis Services\Data\OlapDB.odb file. &lt;li&gt;Backup the Olap Repository SQL database OR copy the pertinent rows from the said database from the OlapObjects table.  Note, the table is a parent-child dimension table.&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;Insure you do these processes at the same time and after all OLAP writing is done (e.g. no processing, lazy aggregations are finished, etc.)&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+How+to+archive+an+OLAP+database+(not+using+msmdarch.exe)&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!162.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!162.entry</guid><pubDate>Wed, 22 Jun 2005 06:33:52 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!162/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!162.entry#comment</wfw:comment><dcterms:modified>2005-06-22T06:33:52Z</dcterms:modified></item><item><title>Renaming OLAP database (Unsupported)</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!159.entry</link><description>&lt;p&gt;&lt;strong&gt;Renaming OLAP database (Unsupported)&lt;/strong&gt; 
&lt;p&gt;Below are the unsupported steps to rename and OLAP database. 
&lt;ul&gt;
&lt;li&gt;Archive the OLAP database and SQL repository (assumes you migrated the OLAP repository to SQL). 
&lt;li&gt;Stop Analysis Server 
&lt;li&gt;Rename the folder that contains the Olap dB (e.g. rename c:\Program Files\Microsoft Analysis Services\Data\blah to c:\Program Files\Microsoft Analysis Services\Data\blah2) 
&lt;li&gt;Go into the Olap repository SQL dB , and change the name “blah” to “blah2” w/in the OlapObjects table. Examples include: 
&lt;ul&gt;
&lt;li&gt;The column ObjectName needs to be changed from “blah” to “blah2” 
&lt;li&gt;The ObjectDescription column needs to be changed from '&amp;lt;DATABASE Name = “blah&amp;quot;&amp;gt;....' to '&amp;lt;DATABASE Name = “blah2&amp;quot;&amp;gt;...'&lt;/ul&gt;
&lt;li&gt;Rename of the *.odb file within the OlapdB folder (e.g. rename c:\Program Files\Microsoft Analysis Services\Data\blah.odb to c:\Program Files\Microsoft Analysis Services\Data\blah2.odb) 
&lt;li&gt;Start Analysis Server&lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+Renaming+OLAP+database+(Unsupported)&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!159.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!159.entry</guid><pubDate>Wed, 22 Jun 2005 06:23:56 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!159/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!159.entry#comment</wfw:comment><dcterms:modified>2007-07-13T07:58:22Z</dcterms:modified></item><item><title>OLAP Distinct Count - how to make it faster</title><link>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!152.entry</link><description>&lt;p&gt;&lt;strong&gt;Distinct Count&lt;/strong&gt; &lt;p&gt;To get the full performance out of Analysis Services for distinct count, insure that a distinct count measure is in its own cube and you can perform custom aggregations for the dimensions within the cube.  But the most powerful way to improve performance is to use a partitioning strategy. &lt;p&gt;The idea is to create partitions where the distinct IDs are spread out through all of the partitions (i.e. partition by dimension(s) that have the IDs repeated in most/all partitions); which is slightly counter-intuitive.  At query time, this design forces AS2k to utilize multiple threads to calculate distinct count instead of just one thread; i.e. distributed query calculations in parallel. From real-world scenarios, there was a 4-10 time improvement w/ this design. &lt;p&gt;Note, you willneed to be careful with your partitioning strategy – you can actually run the risk where you peg the processors if there are too many threads running; hence the importance of multi-proc OLAP machines.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1323305814572094295&amp;page=RSS%3a+OLAP+Distinct+Count+-+how+to+make+it+faster&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=denster.spaces.live.com&amp;amp;GT1=denster"&gt;</description><comments>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!152.entry#comment</comments><guid isPermaLink="true">http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!152.entry</guid><pubDate>Wed, 22 Jun 2005 02:59:08 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://denster.spaces.live.com/blog/cns!125D53A08EC75357!152/comments/feed.rss</wfw:commentRss><wfw:comment>http://denster.spaces.live.com/Blog/cns!125D53A08EC75357!152.entry#comment</wfw:comment><dcterms:modified>2005-06-22T02:59:08Z</dcterms:modified></item></channel></rss>