<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>SQL BI</title><link>http://sqljunkies.com/WebLog/sqlbi/default.aspx</link><description>Business Intelligence with SQL Server (by Marco Russo)</description><dc:language>en-US</dc:language><generator>CommunityServer 1.0 (Build: 1.0.1.50214)</generator><item><title>Multiple Hierarchies from SQLCAT</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2008/04/21/114474.aspx</link><pubDate>Mon, 21 Apr 2008 23:52:16 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:114474</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/114474.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=114474</wfw:commentRss><description>&lt;p&gt;I'm still late with blog reading and sometimes I discover interesting things one or two months later than the original posting. I just read the SQLCAT analysis of the several solutions available to &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/03/17/including-child-members-multiple-places-in-a-parent-child-hierarchy.aspx"&gt;handle multiple parent-child hierarchies within a single dimension&lt;/a&gt;. The multiple hierarchies pattern described in my &lt;a href="http://www.sqlbi.eu/manytomany.aspx"&gt;many-to-many&lt;/a&gt; paper has been used (with some variations) and now I have the "SQLCAT certification" that this model is faster than others!&lt;/p&gt; &lt;p&gt;I think there is space for improvement in this area and the many-to-many space is still a relatively unexplored space. If you have experience adopting those models, please share your knowledge - and if you are shy, write me directly and I'll post the interesting data.&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=114474" width="1" height="1"&gt;</description></item><item><title>Many-to-Many Session at European PASS Conference 2008</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2008/04/11/111902.aspx</link><pubDate>Fri, 11 Apr 2008 15:50:27 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:111902</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/111902.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=111902</wfw:commentRss><description>&lt;p&gt;I'll be a speaker at the &lt;a href="http://www.european-pass-conference.com"&gt;European PASS Conference 2008&lt;/a&gt; next week in Dusseldorf. I will talk about advanced dimensional modeling using many-to-many relationship. The content is based on "&lt;a href="http://www.sqlbi.eu/manytomany.aspx"&gt;The many-to-many revolution&lt;/a&gt;" paper I wrote two years ago. If you will attend that conference and you already used some of the models I described in the paper, I will be happy to get direct feedback from you.&lt;/p&gt; &lt;p&gt;My session is scheduled on Wednesday at 14:30. Unfortunately, I will not have much time after the session because I will have to go to the airport - for this reason, contact me in advance if you want, I'll be at the conference starting from Monday.&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=111902" width="1" height="1"&gt;</description></item><item><title>LINQ to extract object permission from SSAS</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2008/03/28/110628.aspx</link><pubDate>Fri, 28 Mar 2008 17:01:31 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:110628</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/110628.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=110628</wfw:commentRss><description>&lt;p&gt;Yesterday one customer of mine encountered the &lt;a href="http://support.microsoft.com/kb/933836"&gt;issue described in KB933836&lt;/a&gt; and posted also by &lt;a href="http://cwebbbi.spaces.live.com/blog/cns!7B84B0F2C239489A!978.entry?_c=BlogPart"&gt;Chris Sells&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The issue is that the deployment of a SSAS database always overwrite object permissions defined on database objects like cubes. The "keep existing roles" setting of deployment wizard does not preserve those information. I needed to solve the issue and I simply made a simple program that creates an XMLA file with object permissions that I need to restore after database deployment. I used LINQ and XML Literals in Visual Basic - &lt;a href="http://www.microsoft.com/mspress/books/10827.aspx"&gt;I wrote a book about LINQ&lt;/a&gt; and I have to find a reason for this, but I really think that LINQ saved my time.&lt;/p&gt; &lt;p&gt;I will write a more complete article about this issue one day, may be... by now, if you have the same issue, you can contact me to get the code I wrote. If you don't need it, look at the readability of LINQ in a case like this.&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;a href="http://sqlblog.com/blogs/marco_russo/WindowsLiveWriter/LINQtoextractobjectpermissionfromSSAS_9B05/image_2.png"&gt;&lt;img height="342" alt="image" src="http://sqlblog.com/blogs/marco_russo/WindowsLiveWriter/LINQtoextractobjectpermissionfromSSAS_9B05/image_thumb.png" width="714" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;If I will receive some request, I will consider to publish this simple tool.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=110628" width="1" height="1"&gt;</description></item><item><title>PASS Europe 2008</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2008/02/20/106018.aspx</link><pubDate>Wed, 20 Feb 2008 17:05:22 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:106018</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/106018.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=106018</wfw:commentRss><description>&lt;p&gt;It's a shame I haven't blogged for two months, but I've been really (I mean - REALLY) busy finishing the upcoming &lt;a href="http://www.microsoft.com/mspress/books/10827.aspx"&gt;Microsoft Programming LINQ book&lt;/a&gt;. Now I'm coming back to my BI world and the first news is that I'll speak about SSAS models based on many-to-many relationships at the &lt;a href="http://www.european-pass-conference.com"&gt;European PASS Conference 2008&lt;/a&gt;, April 14-16 2008, Neuss, Germany (Europe, of course...). For those of you who want to know what I'm going to talk about... you can read &lt;a href="http://www.sqlbi.eu/manytomany.aspx"&gt;The Many-to-Many Revolution&lt;/a&gt; paper I wrote more than one year ago. It is based on SSAS 2005, but there is nothing to add with SSAS 2008 too.&lt;/p&gt; &lt;p&gt;In reality I and &lt;a href="http://sqlblog.com/blogs/alberto_ferrari/"&gt;Alberto&lt;/a&gt; developed some variation of the base models I described in the paper. In particular, we had great success with the Balance Reclassification model (sorry, we still don't have an article about it) that allows defining multiple parent-child hierarchies on a balance sheet, also using sign rollup operator (which is not natively supported if you have a many-to-many relationship with a parent-child hierarchy). Unfortunately, we desisted using it in a Gb-sized fact table for performance reason. But it is working well in many other typical scenarios, where balance sheet fact table has a granularity that gives a lower size of the fact table.&lt;/p&gt; &lt;p&gt;Let me know if this is an argument (Balance Reclassification model) that is interesting for you - I could give some anticipation in a blog post or in a short article.&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=106018" width="1" height="1"&gt;</description></item><item><title>Many-to-Many Dimensions: Query Performance Optimization Techniques</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/12/22/102285.aspx</link><pubDate>Sat, 22 Dec 2007 21:51:02 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:102285</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/102285.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=102285</wfw:commentRss><description>&lt;p&gt;More than one year ago I published a &lt;a href="http://www.sqlbi.eu/manytomany.aspx"&gt;paper about design patterns for many-to-many dimension relationships&lt;/a&gt;. Since then, I built other models and I got more experience about possible performance optimizations. Unfortunately, I still hadn't time to write about it and this topic requires verbose document and analysis to be reproducible and understandable by everyone. Luckily, now there is a white paper (&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3494E712-C90B-4A4E-AD45-01009C15C665&amp;amp;displaylang=en#filelist"&gt;Analysis Services Many-to-Many Dimensions: Query Performance Optimization Techniques&lt;/a&gt;) downloadable from Microsoft site that explore this world and offers an interesting set of scenarios and possible optimizations, with numbers that explain when, what and how you can expect to optimize a model based on one or more many-to-many dimension relationships.&lt;/p&gt; &lt;p&gt;I already read the document and it is pretty good. Unfortunately, in the real world there are still complex scenarios that cannot be optimized with the techniques used here. I hope that in future versions the SSAS engine will provide some more advanced optimizations for similar cases. One of the first step could be simply automating the optimizations made "by hand" like the Matrix Relationship Optimization shown in the paper. Another would be the simplification for defining efficient aggregations when many-to-many relationships are involved (now you could create a lot of aggregations that are unused when M2M are involved, and sometimes users query a cube only using M2M relationships - you have to tune the aggregations manually).&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=102285" width="1" height="1"&gt;</description></item><item><title>Free Introducing LINQ book</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/12/22/102162.aspx</link><pubDate>Sat, 22 Dec 2007 16:54:07 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:102162</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/102162.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=102162</wfw:commentRss><description>&lt;p&gt;Usually I write in this blog about Business Intelligence without too much consideration for "traditional" access to SQL Server. However, in a parallel universe I also wrote a book about LINQ and now that we are in full Christmas mode, I hope you may be interested that &lt;a href="http://csna01.libredigital.com/"&gt;you can download&lt;/a&gt; the &lt;a href="http://introducinglinq.com/"&gt;Introducing Microsoft LINQ&lt;/a&gt; book &lt;strong&gt;for free&lt;/strong&gt;!!&lt;/p&gt; &lt;p&gt;I wrote this book with &lt;a href="http://weblogs.asp.net/paolopia/"&gt;Paolo&lt;/a&gt; based on Beta 1. Some contents are now outdated, but general concepts and 80% of the syntax is still valid. And, remember, now it's free, so you shouldn't claim too much! We are currently working on a more advanced and complete book about LINQ (&lt;a href="http://www.microsoft.com/MSPress/books/10827.aspx"&gt;Programming Microsoft LINQ&lt;/a&gt;), which is expected to be available by mid-May 2008. &lt;/p&gt; &lt;p&gt;Have a good read, a Merry Christmas and a Happy New Year! &lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=102162" width="1" height="1"&gt;</description></item><item><title>Real Report Builder 2008 improvements for Analysis Services</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/12/19/101738.aspx</link><pubDate>Wed, 19 Dec 2007 05:38:23 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:101738</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/101738.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=101738</wfw:commentRss><description>&lt;p&gt;Brian Welcker (who is &lt;a href="http://blogs.msdn.com/bwelcker/archive/2007/12/12/new-adventures.aspx"&gt;leaving SSRS team&lt;/a&gt; - good luck Brian!) has announced a &lt;a href="http://blogs.msdn.com/bwelcker/archive/2007/12/11/transmissions-from-the-satellite-heart-what-s-up-with-report-builder.aspx"&gt;long explanation of the Report Builder 2008 positioning&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;For me (and all of you who live in the multidimensional business...) the most important part of the post is this simple sentence:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;[...] However, for folks building reports against Analysis Services cubes, auto-generating a model is no longer required.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This is really a good news who will drive Report Builder adoption in SSAS shops. I still haven't tested Report Builder 2008 very much, but this news will help me to find the time to do it.&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=101738" width="1" height="1"&gt;</description></item><item><title>Generate date dimension that support working days calculation</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/11/28/94456.aspx</link><pubDate>Wed, 28 Nov 2007 05:45:55 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:94456</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/94456.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=94456</wfw:commentRss><description>&lt;p&gt;I just wrote a T-SQL query based on CTE that generates support information to calculate working days in a period. Simply look at the WorkingDaySequential measure.&lt;/p&gt; &lt;p&gt;In the real world:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The Holidays CTE could be replaced by a real tabl with user-inserted data.&lt;/li&gt; &lt;li&gt;The temporary [#Calendar] coule be a real table, providing necessary data access from DM&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;and probably much else.&lt;/p&gt; &lt;p&gt;The following code is provided "as is", without any warranty about its behavior.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;&lt;/span&gt;&lt;span&gt;SET&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;STATISTICS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;IO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ON
&lt;/span&gt;&lt;span&gt;GO

&lt;/span&gt;&lt;span&gt;SET&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATEFIRST&lt;/span&gt;&lt;span&gt; 7  &lt;/span&gt;&lt;span&gt;-- Default is 7 (US / Sunday) 
&lt;/span&gt;&lt;span&gt;GO

&lt;/span&gt;&lt;span&gt;DECLARE&lt;/span&gt;&lt;span&gt; @StartYear &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;INT&lt;/span&gt;&lt;span&gt; 
&lt;/span&gt;&lt;span&gt;DECLARE&lt;/span&gt;&lt;span&gt; @EndYear &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;INT&lt;/span&gt;&lt;span&gt; 

&lt;/span&gt;&lt;span&gt;SET&lt;/span&gt;&lt;span&gt; @StartYear &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 2006 
&lt;/span&gt;&lt;span&gt;SET&lt;/span&gt;&lt;span&gt; @EndYear &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 2015 

&lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt;    Holidays
          &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-- Italian Holidays (use year 1900 for recurrencies dates)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19000101'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19000106'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19000425'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19000501'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19000602'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19000815'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19001101'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19001208'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19001225'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'19001226'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;-- Holidays changing date each year
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'20060417'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'20070409'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,
&lt;/span&gt;&lt;span&gt;        Years
          &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   YYYY &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; @StartYear
               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   YYYY &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1
               &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt;     Years
               &lt;/span&gt;&lt;span&gt;Where&lt;/span&gt;&lt;span&gt;    YYYY &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; @EndYear
             &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,
&lt;/span&gt;&lt;span&gt;        Months
          &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   MM &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 1
               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   MM &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1
               &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt;     Months
               &lt;/span&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt;    MM &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; 12
             &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,
&lt;/span&gt;&lt;span&gt;        Days
          &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   DD &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 1
               &lt;/span&gt;&lt;span&gt;UNION ALL
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   DD &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1
               &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt;     Days
               &lt;/span&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt;    DD &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; 31
             &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,
&lt;/span&gt;&lt;span&gt;        DatesRaw
          &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;   YYYY &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; YYYY&lt;/span&gt;&lt;span&gt;,
&lt;/span&gt;&lt;span&gt;                        MM &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; MM&lt;/span&gt;&lt;span&gt;,
&lt;/span&gt;&lt;span&gt;                        DD &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; DD&lt;/span&gt;&lt;span&gt;,
&lt;/span&gt;&lt;span&gt;                        ID_Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; YYYY &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 10000 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; MM &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 100 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; DD&lt;/span&gt;&lt;span&gt;,
&lt;/span&gt;&lt;span&gt;                        DateString &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;YYYY &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 10000 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; MM &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 100 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; DD &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;span&gt;),
&lt;/span&gt;&lt;span&gt;                        Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CASE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WHEN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ISDATE&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;YYYY &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 10000 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; MM &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 100 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; DD&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 1
                                    &lt;/span&gt;&lt;span&gt;THEN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;YYYY &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 10000 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; MM &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 100 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; DD &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATETIME&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;span&gt;ELSE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NULL
&lt;/span&gt;&lt;span&gt;                               &lt;/span&gt;&lt;span&gt;END
&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt;     Years
               &lt;/span&gt;&lt;span&gt;CROSS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JOIN&lt;/span&gt;&lt;span&gt; Months
               &lt;/span&gt;&lt;span&gt;CROSS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JOIN&lt;/span&gt;&lt;span&gt; Days
               &lt;/span&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;ISDATE&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;YYYY &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 10000 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; MM &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; 100 &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; DD&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 1
             &lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;  DatesRaw&lt;/span&gt;&lt;span&gt;.*,
&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;DayOfWeek&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATEPART&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dw&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; DatesRaw&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;),
&lt;/span&gt;&lt;span&gt;            CalendarDaySequential &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;DatesRaw&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Date &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;INT&lt;/span&gt;&lt;span&gt;),
&lt;/span&gt;&lt;span&gt;            WorkingDay &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;CASE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATEPART&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dw&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; DatesRaw&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;span&gt;WHEN&lt;/span&gt;&lt;span&gt; 1 &lt;/span&gt;&lt;span&gt;THEN&lt;/span&gt;&lt;span&gt; 0 &lt;/span&gt;&lt;span&gt;-- Sunday
&lt;/span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;span&gt;WHEN&lt;/span&gt;&lt;span&gt; 7 &lt;/span&gt;&lt;span&gt;THEN&lt;/span&gt;&lt;span&gt; 0 &lt;/span&gt;&lt;span&gt;-- Saturday
&lt;/span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;span&gt;ELSE&lt;/span&gt;&lt;span&gt; 1
                              &lt;/span&gt;&lt;span&gt;END&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BIT&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;INTO&lt;/span&gt;&lt;span&gt;    #Calendar
    &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt;    DatesRaw
    &lt;/span&gt;&lt;span&gt;LEFT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JOIN&lt;/span&gt;&lt;span&gt; Holidays recurring
            &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; recurring&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATEADD&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Year&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; 1900 &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YEAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;DatesRaw&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;span&gt; DatesRaw&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;LEFT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JOIN&lt;/span&gt;&lt;span&gt; Holidays fixed
            &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; fixed&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; DatesRaw&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Date
GO
&lt;font color="#008000" size="1"&gt;&lt;p&gt;-----------------------------------------------------------------------------------------------------------&lt;/p&gt;&lt;/font&gt;
&lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;*,
&lt;/span&gt;&lt;span&gt;        WorkingDaySequential &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COUNT&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;WorkingDay&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;                                 &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt;   #Calendar wd3
                                 &lt;/span&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt;  wd3&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;CalendarDaySequential &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; wd1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;CalendarDaySequential
                                        &lt;/span&gt;&lt;span&gt;AND&lt;/span&gt;&lt;span&gt; wd3&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;WorkingDay &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 1
                               &lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt;    #Calendar wd1
&lt;/span&gt;&lt;span&gt;ORDER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BY&lt;/span&gt;&lt;span&gt; ID_Date
GO
&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=94456" width="1" height="1"&gt;</description></item><item><title>SQL Server Virtualization</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/11/18/89495.aspx</link><pubDate>Sun, 18 Nov 2007 16:08:23 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:89495</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/89495.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=89495</wfw:commentRss><description>&lt;p&gt;I just read the &lt;a href="http://www.vmware.com/files/pdf/SQLServerWorkloads.pdf"&gt;SQL Server Performance in a VMware Infrastructure 3 Environment&lt;/a&gt; performance study published by VMware (thanks to &lt;a href="http://www.virtualization.info/2007/11/benchmarks-sql-server-performance-in.html"&gt;virtualization.info for the link&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Often I've been asked if it is a good move having a SQL Server in production in a virtual machine. As every consultant, my first answer is "it depends". And I really think this, it's not only a way to avoid the question!&lt;/p&gt; &lt;p&gt;If we look at an OLTP application, then my personal answer is that it could be a good move, especially if my hardware is so much larger than the one necessary to handle the daily workload. Numbers offered by VMware performance study are pretty good, considering that they are working on a reasonably hardware (not a monster one) that you can find in&amp;nbsp;the real world. However, this paper simulates an OLTP scenario and not a Data Warehouse one. One of the signs for this assumption is the presence of a RAID 5 data storage, which could be a real bottleneck&amp;nbsp;for ETL activities (and this is a good topic for another post in the future - I will not discuss about it here).&lt;/p&gt; &lt;p&gt;Until now, I always prefer working on a real hardware for both production AND especially development/test environments for a BI solution, at least for the back-end part (SQL/SSIS/SSAS). The reason is based on economics: a minimum VM for this kind of activities requires at least 4 cores, better if 8 cores (as a minimum), and at least 8 GB of RAM. Especially during execution of SSIS packages and process of SSAS cubes, all resources (I/O, memory and CPUs) are stressed at their limits. While a VM could be handled in a production environment just to balance resources between daily operations and night batches (but it would be like having a server that is turned off during the day - sometimes you can afford it, sometimes not), I'm not comfortable in using a VM like this for development. The reason is that the workload affects all concurrent VMs and if you virtualize a server, it is supposed that you keep other servers on the same machine.&lt;/p&gt; &lt;p&gt;At the end, &lt;u&gt;until now &lt;/u&gt;I've found more affordable having dedicated servers for development instead of using virtualized ones. I know that this situation could change in the future. Virtualization technology is fast evolving and (more important) hardware cost for multiple cores and large-RAM-provided&amp;nbsp;servers will be so much cheaper that the "entry-level" server in a data center will be too powerful to be used at the maximum of their capacity many data warehouse installations.&lt;/p&gt; &lt;p&gt;What is your experience here? Do you have a development environment for your data warehouse completely virtualized or not? What do you think about it? I'd like to get feedback on this.&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=89495" width="1" height="1"&gt;</description></item><item><title>DefaultMember, subcubes and non-aggregatable attributes</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/10/02/70041.aspx</link><pubDate>Tue, 02 Oct 2007 04:35:41 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:70041</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/70041.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=70041</wfw:commentRss><description>&lt;p&gt;Today I discovered that DefaultMember might result in a member other thant the default dimension member.&lt;/p&gt; &lt;p&gt;Reading &lt;a href="http://technet.microsoft.com/en-us/library/ms146050.aspx"&gt;documentation&lt;/a&gt;, I got the idea that DefaultMember would be always the default member defined for a dimension into a cube. In reality, the default member could change into a subcube that excludes the original default member from a calculation. This is important because writing MDX Scripts you cannot anticipate any possible use of your cube... and you should carefully consider when DefaultMember is the real appropriate syntax on a case-by-case basis. You have to be particularly careful whenever you use DefaultMember on a non-aggregatable attribute.&lt;/p&gt; &lt;p&gt;Let's look an example.&lt;/p&gt; &lt;p&gt;In Adventure Works you can write the following query.&lt;/p&gt; &lt;p&gt;&lt;pre&gt;&lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MEMBER&lt;/span&gt;&lt;span&gt; Measures.DiffActual 
     &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; (Scenario.Scenario.&lt;/span&gt;&lt;span&gt;CurrentMember&lt;/span&gt;&lt;span&gt;, Measures.Amount) 
        - (Scenario.Scenario.&lt;/span&gt;&lt;span&gt;&lt;strong&gt;DefaultMember&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;, Measures.Amount)
&lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; 
{ [Scenario].[Scenario].[Forecast], 
  [Scenario].[Scenario].[Budget] } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMNS&lt;/span&gt;&lt;span&gt;,
{ Measures.Amount, Measures.DiffActual } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ROWS
FROM&lt;/span&gt;&lt;span&gt; [Adventure Works]&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;This query provides this result:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/marco_russo/WindowsLiveWriter/DefaultMembersubcubesandnonaggregatablea_85E/image.png"&gt;&lt;img alt="image" src="http://sqlblog.com/blogs/marco_russo/WindowsLiveWriter/DefaultMembersubcubesandnonaggregatablea_85E/image_thumb.png" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I'm not interested in the real meaning of this query. This is only an excuse to see the &lt;em&gt;DefaultMember&lt;/em&gt; in action against a non-aggregatable attribute. The &lt;em&gt;DiffActual&lt;/em&gt; calculated member has a formula that use &lt;em&gt;Scenario.Scenario.DefaultMember&lt;/em&gt;. The default member for Scenario.Scenario attribute is Actual. The DiffActual row shows the difference between the scenario in column and the Actual scenario.&lt;/p&gt;
&lt;p&gt;Now, if we encapsulate the previous query into a subquery that apparently should return the same members, we can write this query.&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;&lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MEMBER&lt;/span&gt;&lt;span&gt; Measures.DiffActual 
     &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; (Scenario.Scenario.&lt;/span&gt;&lt;span&gt;CurrentMember&lt;/span&gt;&lt;span&gt;, Measures.Amount) 
        - (Scenario.Scenario.&lt;/span&gt;&lt;span&gt;&lt;strong&gt;DefaultMember&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;, Measures.Amount)
&lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; 
{ [Scenario].[Scenario].[Forecast], 
  [Scenario].[Scenario].[Budget] } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMNS&lt;/span&gt;&lt;span&gt;,
{ Measures.Amount, Measures.DiffActual } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ROWS
FROM&lt;/span&gt;&lt;span&gt; 
  (&lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; 
    { [Scenario].[Scenario].[Forecast], 
      [Scenario].[Scenario].[Budget] } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMNS
FROM&lt;/span&gt;&lt;span&gt; [Adventure Works])
&lt;p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/pre&gt;
&lt;p&gt;Before executing this query, what is the expected result? First time I thought "it should be the same", but in reality it is different, like shown here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/marco_russo/WindowsLiveWriter/DefaultMembersubcubesandnonaggregatablea_85E/image_2.png"&gt;&lt;img alt="image" src="http://sqlblog.com/blogs/marco_russo/WindowsLiveWriter/DefaultMembersubcubesandnonaggregatablea_85E/image_thumb_2.png" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;What happened? Simply, the SSAS calculation engine needs a default member included in the "context"&amp;nbsp;- when you use a subquery, you are defining a subset of the cube space that must have an existing&amp;nbsp;default member for each attribute -&amp;nbsp;if a default&amp;nbsp;member is outside of the&amp;nbsp;subcube, it is replaced by another member of the same attribute.&lt;/p&gt;
&lt;p&gt;In&amp;nbsp;the case we are&amp;nbsp;exmining, the default member of the subcube becomes Forecast.&amp;nbsp;This default member depends on the order of members of the same attribute used in the subcube. If we invert Forecast and Budget members only in the subcube, the default member becomes Forecast instead of Budget, changing the calculated member result (based on DefaultMember syntax).&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;&lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MEMBER&lt;/span&gt;&lt;span&gt; Measures.DiffActual 
     &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; (Scenario.Scenario.&lt;/span&gt;&lt;span&gt;CurrentMember&lt;/span&gt;&lt;span&gt;, Measures.Amount) 
        - (Scenario.Scenario.&lt;/span&gt;&lt;span&gt;DefaultMember&lt;/span&gt;&lt;span&gt;, Measures.Amount)
&lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; 
{ [Scenario].[Scenario].[Forecast], 
  [Scenario].[Scenario].[Budget] } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMNS&lt;/span&gt;&lt;span&gt;,
{ Measures.Amount, Measures.DiffActual } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ROWS
FROM&lt;/span&gt;&lt;span&gt; 
  (&lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; 
    { &lt;strong&gt;[Scenario].[Scenario].[Budget], 
      [Scenario].[Scenario].[Forecast]&lt;/strong&gt; } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMNS
FROM&lt;/span&gt;&lt;span&gt; [Adventure Works])
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;This is the result for the query above:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href="http://sqlblog.com/blogs/marco_russo/WindowsLiveWriter/DefaultMembersubcubesandnonaggregatablea_85E/image_3.png"&gt;&lt;img alt="image" src="http://sqlblog.com/blogs/marco_russo/WindowsLiveWriter/DefaultMembersubcubesandnonaggregatablea_85E/image_thumb_3.png" border="0"&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;To avoid this issue you can use a specific member instead of the keyword DefaultMember. In our example, the solution is:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;&lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MEMBER&lt;/span&gt;&lt;span&gt; Measures.DiffActual 
     &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; (Scenario.Scenario.&lt;/span&gt;&lt;span&gt;CurrentMember&lt;/span&gt;&lt;span&gt;, Measures.Amount) 
        - (&lt;strong&gt;Scenario.Scenario.[Actual], &lt;/strong&gt;Measures.Amount)
&lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; 
{ [Scenario].[Scenario].[Forecast], 
  [Scenario].[Scenario].[Budget] } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMNS&lt;/span&gt;&lt;span&gt;,
{ Measures.Amount, Measures.DiffActual } &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ROWS
FROM&lt;/span&gt;&lt;span&gt; [Adventure Works]
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;With this syntax, any use of this query as a subcube in another query will not have the side effects we have seen before.&lt;/p&gt;
&lt;p&gt;Why this is so important? Simply because Excel 2007, often used as a client by end users, makes heavy use of subqueries in MDX generated by PivotTable. I had to substitute all DefaultMember in MDX Scripts with well-known member names (this also affects my &lt;a href="http://sqlblog.com/blogs/marco_russo/archive/2007/09/02/datetool-dimension-an-alternative-time-intelligence-implementation.aspx"&gt;DateTool&lt;/a&gt; dimension, which I will update soon with this and other improvements).&lt;/p&gt;
&lt;p&gt;Final note: a special thanks to &lt;a href="http://sqlblog.com/blogs/mosha/"&gt;Mosha Pasumansky&lt;/a&gt;&amp;nbsp;for illuminating me on hidden secrets of DefaultMember. Mosha also said that using the member name of default member (instead of DefaultMember keyword) improves query performance.&lt;span&gt;&lt;/p&gt;&lt;/span&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=70041" width="1" height="1"&gt;</description></item><item><title>MDX Studio</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/09/23/67284.aspx</link><pubDate>Sun, 23 Sep 2007 12:41:55 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:67284</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/67284.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=67284</wfw:commentRss><description>&lt;p&gt;My backlog makes me late on a lot of announcements, but I'd like to post a link to the new &lt;a href="http://sqlblog.com/blogs/mosha/archive/2007/09/18/announcing-mdx-studio-ctp1-v0-1-alpha.aspx"&gt;MDX Studio by Mosha Pasumansky&lt;/a&gt;, because this is a very useful tool when you need to dig into an MDX query issue.&lt;/p&gt; &lt;p&gt;There is a &lt;a href="http://www.ssas-info.com/forum/MdxStudio"&gt;forum dedicated&lt;/a&gt; to the tool on SSAS Info website.&lt;/p&gt; &lt;p&gt;The SkyDrive directory where you can find CTP releases is this: &lt;a href="http://cid-74f04d1ea28ece4e.skydrive.live.com/browse.aspx/MDXStudio"&gt;http://cid-74f04d1ea28ece4e.skydrive.live.com/browse.aspx/MDXStudio&lt;/a&gt;&lt;/p&gt; &lt;p&gt;It's not a beta, it's an alpha and there is space for a lot of improvements&amp;nbsp;- I'm going to try it to give my feedback too.&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=67284" width="1" height="1"&gt;</description></item><item><title>MDX query with clear cache in a single statement</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/09/16/64581.aspx</link><pubDate>Sun, 16 Sep 2007 14:09:10 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:64581</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/64581.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=64581</wfw:commentRss><description>&lt;p&gt;Darren Gosbell describes a useful technique to &lt;a href="http://geekswithblogs.net/darrengosbell/archive/2007/08/30/SSAS-Query-Performance-Tuning-Whitepaper.aspx"&gt;clear cache and execute an MDX statement&lt;/a&gt; using a single MDX command window. It's very very useful when you're doing performance tuning of your MDX script!&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=64581" width="1" height="1"&gt;</description></item><item><title>SSAS scale-out with SAN snapshot</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/09/12/63358.aspx</link><pubDate>Thu, 13 Sep 2007 03:10:51 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:63358</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/63358.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=63358</wfw:commentRss><description>&lt;p&gt;Microsoft released a &lt;a href="http://download.microsoft.com/download/0/7/4/074ddc16-6dba-431e-b476-dcb4c879f11e/ScaleOutQueryingASUsingSANSnapshots.doc"&gt;short whitepaper about how scaling-out queries to a SSAS database leveraging on SAN snapshot features&lt;/a&gt;. It's an interesting read if you have a SSAS database with many users and don't have the time to copy a database on several servers.&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=63358" width="1" height="1"&gt;</description></item><item><title>DateTool dimension improvement</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/09/09/62079.aspx</link><pubDate>Mon, 10 Sep 2007 03:18:15 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:62079</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/62079.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=62079</wfw:commentRss><description>&lt;p&gt;I fixed an issue of the DateTool dimension I presented in &lt;a href="http://sqlblog.com/blogs/marco_russo/archive/2007/09/02/datetool-dimension-an-alternative-time-intelligence-implementation.aspx"&gt;a previous post&lt;/a&gt;. The DateTool was unusable on OWC 11, which is the component used by BI Dev Studio and SQL Server Management Studio to browse a cube. I only added two statements in MDX Script that assign the original value when a selection of all years / all months is made. It seems that OWC 11 defines what members will be shown in the pivot table with a different technique than the one used by Excel 2007. The new version of the &lt;a href="http://www.sqlbi.eu/DateTool.aspx"&gt;DateTool is 0.6.0.0 and is downloadable here&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=62079" width="1" height="1"&gt;</description></item><item><title>Patterns of dimensional modeling design</title><link>http://sqljunkies.com/WebLog/sqlbi/archive/2007/09/06/60731.aspx</link><pubDate>Thu, 06 Sep 2007 15:48:00 GMT</pubDate><guid isPermaLink="false">d2584c15-f6ef-46f7-a2d4-24fc0e143e76:60731</guid><dc:creator>marcorusso</dc:creator><slash:comments>0</slash:comments><comments>http://sqljunkies.com/WebLog/sqlbi/comments/60731.aspx</comments><wfw:commentRss>http://sqljunkies.com/WebLog/sqlbi/commentrss.aspx?PostID=60731</wfw:commentRss><description>&lt;p&gt;Alberto &lt;a href="http://sqlblog.com/blogs/alberto_ferrari/archive/2007/09/06/dimensional-modeling-with-ranged-dimensions.aspx"&gt;posted one of the patterns&lt;/a&gt; we use designing a dimensional model (this one is about the discretization of a measure into a dimension). We'd like to get some feedback about this solution: is there someone who used similar patterns? We consider this design a good model for its flexibility (we used it in financial environments where desired clusters of measures changes but we don't want to reprocess the whole fact table that is very very large).&lt;/p&gt; &lt;p&gt;Any feedback is welcome!&lt;/p&gt;
&lt;br&gt;&lt;hr&gt;&lt;br&gt;Cross-posted from SQLBlog! - &lt;a href="http://www.sqlblog.com"&gt;http://www.sqlblog.com&lt;/a&gt;&lt;br&gt;&lt;hr&gt;&lt;br&gt;&lt;img src="http://sqljunkies.com/WebLog/aggbug.aspx?PostID=60731" width="1" height="1"&gt;</description></item></channel></rss>