<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Darren Gosbell [MVP] - Random Procrastination</title>
        <link>http://geekswithblogs.net/darrengosbell/Default.aspx</link>
        <description>Business Intelligence, SQL Server, .Net, Powershell and MDX Madness</description>
        <language>en-AU</language>
        <copyright>Darren Gosbell</copyright>
        <managingEditor>dgosbell@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Darren Gosbell [MVP] - Random Procrastination</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/darrengosbell/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/darrengosbell" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
            <title>SSAS: Creating a Rowset action with the ExecuteSQL .Net stored procedure</title>
            <category>.Net</category>
            <category>Analysis Services</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/QKor71An_Ko/ssas-creating-a-rowset-action-with-the-executesql-.net-stored.aspx</link>
            <description>&lt;p&gt;A few weeks ago I did &lt;a href="http://geekswithblogs.net/darrengosbell/archive/2009/06/18/ssas-executing-arbitrary-sql-queries.aspx"&gt;a post&lt;/a&gt; introduced the ExecuteSQL .net stored procedure for SSAS. &lt;a href="http://cwebbbi.spaces.live.com/"&gt;Chris Webb&lt;/a&gt; asked if this function can be called from Excel 2007 when it is set this up as a rowset action and I figured that this would make a good topic for a blog post. So the following screen shots show how you would go about setting up such an action. As a quick example I cheated a bit and set up an Rowset action that calls the sp_who2 system stored procedure. This way I did not have a depedancy on any particular database. You don't have to use a stored procedure, you can use any sort of SQL command that returns a set of rows into a rowset action. &lt;/p&gt; &lt;p&gt;Below is how I setup the action: &lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/SSASCreatingaRowsetac.Netstoredprocedure_138EB/image_ed325600-2bf5-495f-ace6-d7847bc64db0.png" width="582" height="456" /&gt;  &lt;/p&gt; &lt;p&gt;When you right click on a cell in a pivot table you will see the following:&lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/SSASCreatingaRowsetac.Netstoredprocedure_138EB/image_0ae82180-2380-4693-a8d9-29728ac0b86d.png" width="517" height="434" /&gt; &lt;/p&gt; &lt;p&gt;And clicking on the "Rowset Action" creates another sheet that looks like this:&lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/SSASCreatingaRowsetac.Netstoredprocedure_138EB/image_3782098d-5d55-4819-bb8f-e68e6654403f.png" width="600" height="233" /&gt;&lt;/p&gt; &lt;p&gt;Since I posted about the ExecuteSQL function I have made a slight change to the code I checked into the &lt;a href="http://asstoredprocedures.codeplex.com"&gt;ASStoredProcedure project&lt;/a&gt; on codeplex. I have now moved it into a separate "SQLQuery" project so that it compiles to it's own .dll file and does not have to be deployed with the same impersonation mode as the main &lt;a href="http://asstoredprocedures.codeplex.com/"&gt;ASSP&lt;/a&gt; assembly. &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b03366df-2809-48a6-9368-5e95541393e7" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/ASSP" rel="tag"&gt;ASSP&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Analysis%20Services" rel="tag"&gt;Analysis Services&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Stored%20Procedures" rel="tag"&gt;Stored Procedures&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Codeplex" rel="tag"&gt;Codeplex&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133200"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133200" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/133200.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=QKor71An_Ko:8Brj9Exdc2o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=QKor71An_Ko:8Brj9Exdc2o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=QKor71An_Ko:8Brj9Exdc2o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=QKor71An_Ko:8Brj9Exdc2o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=QKor71An_Ko:8Brj9Exdc2o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=QKor71An_Ko:8Brj9Exdc2o:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=QKor71An_Ko:8Brj9Exdc2o:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/QKor71An_Ko" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/07/02/ssas-creating-a-rowset-action-with-the-executesql-.net-stored.aspx</guid>
            <pubDate>Wed, 01 Jul 2009 21:42:40 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/133200.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/07/02/ssas-creating-a-rowset-action-with-the-executesql-.net-stored.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/133200.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/133200.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/07/02/ssas-creating-a-rowset-action-with-the-executesql-.net-stored.aspx</feedburner:origLink></item>
        <item>
            <title>MVP for another year</title>
            <category>General</category>
            <category>SQL Server</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/CSeYQ_GtVds/mvp-for-another-year-again.aspx</link>
            <description>&lt;p&gt;&lt;img style="margin: 0px 15px 0px 0px" border="0" alt="MVP_FullColor_ForScreen" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/MVPforanotheryear_6A64/MVP_FullColor_ForScreen_6c073b79-d58e-4065-93f1-edb12f4efe91.png" width="64" height="100" /&gt; It was very exciting to see an email from the MVP Award program in my inbox this morning saying that I had been re-awarded as an MVP for another year. This will be my 4th year as an MVP and I am very honored  to have been re-awarded.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133198"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133198" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/133198.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=CSeYQ_GtVds:-J5Q9ZCGaIU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=CSeYQ_GtVds:-J5Q9ZCGaIU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=CSeYQ_GtVds:-J5Q9ZCGaIU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=CSeYQ_GtVds:-J5Q9ZCGaIU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=CSeYQ_GtVds:-J5Q9ZCGaIU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=CSeYQ_GtVds:-J5Q9ZCGaIU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=CSeYQ_GtVds:-J5Q9ZCGaIU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/CSeYQ_GtVds" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/07/02/mvp-for-another-year-again.aspx</guid>
            <pubDate>Wed, 01 Jul 2009 21:34:14 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/133198.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/07/02/mvp-for-another-year-again.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/133198.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/133198.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/07/02/mvp-for-another-year-again.aspx</feedburner:origLink></item>
        <item>
            <title>SSAS: Executing Arbitrary SQL queries</title>
            <category>.Net</category>
            <category>Analysis Services</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/XlGk87B7klA/ssas-executing-arbitrary-sql-queries.aspx</link>
            <description>&lt;p&gt;I had a question a little while ago via my blog about possibly using a rowset action to execute a SQL query against a specified table. Although a rowset action will allow you to enter a SQL query, such a query is still executed against the current cube and only the subset of SQL supported by SSAS can be used. Basically the rowset action just returns a flattened result set.&lt;/p&gt; &lt;p&gt;However what would be possible would be to write a .Net stored procedure and use that to execute your SQL query. The code itself is really simple, the whole procedure only takes a few lines:&lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Data;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Data.OleDb;

&lt;span style="color: rgb(0,0,255)"&gt;namespace&lt;/span&gt; ASSP
{
    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SQLQuery
&lt;/span&gt;    {
        &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;DataTable&lt;/span&gt; ExecuteSQL(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; connectionString, &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; sql)
        {
            &lt;span style="color: rgb(43,145,175)"&gt;OleDbConnection&lt;/span&gt; conn = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;OleDbConnection&lt;/span&gt;(connectionString);
            
            &lt;span style="color: rgb(43,145,175)"&gt;DataTable&lt;/span&gt; dt = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;DataTable&lt;/span&gt;(&lt;span style="color: rgb(163,21,21)"&gt;"Results"&lt;/span&gt;);
            &lt;span style="color: rgb(43,145,175)"&gt;OleDbDataAdapter&lt;/span&gt; da = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;OleDbDataAdapter&lt;/span&gt;(sql, conn);
            da.Fill(dt);
            &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; dt;
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;And with this small amount of code you can execute any query that you like using the CALL statement&lt;/p&gt;
&lt;p&gt;eg.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;call&lt;/span&gt; assp.ExecuteSql(
    "provider=sqlncli;server=localhost;database=AdventureWorksDW;trusted_connection=yes"
    ,"Select * from DimCurrency");
&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Which is really cool if you want to do your own drillthrough or return an arbitrary recordset (assuming that your client application supports rowset actions). By you can actually execute more than just any query, you can actually execute any statement.&lt;/p&gt;
&lt;p&gt;So you can paste the following set of statements into SSMS and run them.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;call&lt;/span&gt; assp.ExecuteSql(
    "provider=sqlncli;server=localhost;database=AdventureWorksDW;trusted_connection=yes"
    ,"Create TABLE myTable (id int)");
GO
&lt;span style="color: rgb(0,0,255)"&gt;call&lt;/span&gt; assp.ExecuteSql(
    "provider=sqlncli;server=localhost;database=AdventureWorksDW;trusted_connection=yes"
    ,"INSERT INTO myTable VALUES(1)");
GO
&lt;span style="color: rgb(0,0,255)"&gt;call&lt;/span&gt; assp.ExecuteSql(
    "provider=sqlncli;server=localhost;database=AdventureWorksDW;trusted_connection=yes"
    ,"SELECT * FROM myTable");
GO
&lt;span style="color: rgb(0,0,255)"&gt;call&lt;/span&gt; assp.ExecuteSql(
    "provider=sqlncli;server=localhost;database=AdventureWorksDW;trusted_connection=yes"
    ,"DROP TABLE myTable");

&lt;/pre&gt;
&lt;p&gt;Even though I can only see this technique being used for SELECT statements, you can basically do anything you like in the database provided you have the appropriate rights. Pretty powerful, initially I thought that this might be too powerful to put into the &lt;a href="http://asstoredprocedures.codeplex.com"&gt;ASStoredProcedures Project&lt;/a&gt; on codeplex, but the more I think about it the more I think I was being paranoid, so I have checked this code into the ASStoredProcedure project. With the default deployment options a user can only perform operations that they already have rights to do anyway. It's really only if the assembly is deployed to run under the service account and if the service account has more rights than your end users that there is any risk of someone running a statement with elevated privileges.&lt;/p&gt;
&lt;p&gt;Ultimately I'm not sure how directly useful this simple procedure will be, but I think it will provide a starting point from which more sophisticated routines can be developed using some of the other techniques demonstrated in other functions in ASSP. I'd be interested to hear comments from anyone who ends up adapting this routine.&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;Update 19 Jun:&lt;/font&gt; I removed the "ReadOnly=1" from the end of the connection string - as it was not actually doing anything&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a6e1acd3-c026-47a3-aaeb-0e266ffaa0bc" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Analysis%20Services" rel="tag"&gt;Analysis Services&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Stored%20Procedures" rel="tag"&gt;Stored Procedures&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ASSP" rel="tag"&gt;ASSP&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132899"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132899" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/132899.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=XlGk87B7klA:mrRpjyrt_hc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=XlGk87B7klA:mrRpjyrt_hc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=XlGk87B7klA:mrRpjyrt_hc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=XlGk87B7klA:mrRpjyrt_hc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=XlGk87B7klA:mrRpjyrt_hc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=XlGk87B7klA:mrRpjyrt_hc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=XlGk87B7klA:mrRpjyrt_hc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/XlGk87B7klA" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/06/18/ssas-executing-arbitrary-sql-queries.aspx</guid>
            <pubDate>Thu, 18 Jun 2009 13:20:35 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/132899.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/06/18/ssas-executing-arbitrary-sql-queries.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/132899.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/132899.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/06/18/ssas-executing-arbitrary-sql-queries.aspx</feedburner:origLink></item>
        <item>
            <title>SSAS: Powershell to replace a group member in a role</title>
            <category>Analysis Services</category>
            <category>PowerShell</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/RR3i-XrHWio/ssas-powershell-to-replace-a-group-member-in-a-role.aspx</link>
            <description>&lt;p&gt;There was a question in the SSAS forum recently on how to replace one group name with another within the membership of a number of SSAS roles in a number of databases. While you could possibly do this with XMLA it would be tricky as you have to re-submit the whole membership list, you can't just add/remove single members. The easiest way to do this is to write something using the AMO library and in my opinion the easiest way to write a script for AMO is using Powershell.&lt;/p&gt; &lt;p&gt;Below is my short script which loops through all roles in all databases on the server and swaps out one group or user with another. I tried to make the script verbose and readable and I added some strings which are echoed out to the console so that you can see the roles and members that the script is iterating over.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;font size="2" face="Courier New"&gt;[System.reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices") &lt;/font&gt; &lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;$svr = new-Object Microsoft.AnalysisServices.Server&lt;br /&gt;$svr.Connect("localhost\sql08") &lt;/font&gt; &lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Courier New"&gt;foreach ($db in $svr.Databases)&lt;br /&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;# Print the Database Name&lt;br /&gt;"Database: " + $db.Name&lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;foreach ($role in $db.Roles)&lt;br /&gt;  {&lt;br /&gt;    $foundMember = $null&lt;br /&gt;    # Print the Role Name&lt;br /&gt;    "   Role: " + $role.Name    #Print the &lt;br /&gt;    foreach ($member in $role.Members)&lt;br /&gt;    {&lt;br /&gt;     # Print the member name(s)&lt;br /&gt;      "      " + $member.Name&lt;br /&gt;      if ($member.Name -eq &lt;font color="#0000ff"&gt;"domain_name\old_group_name")&lt;/font&gt;&lt;br /&gt;      {&lt;br /&gt;        $foundMember = $member&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    If ($foundMember -ne $null)&lt;br /&gt;    {&lt;br /&gt;      "    Member Found!"&lt;br /&gt;      $role.Members.Remove($foundMember)&lt;br /&gt;      $newRole = New-Object Microsoft.AnalysisServices.RoleMember(&lt;font color="#0000ff"&gt;"domain_name\new_group_name")&lt;/font&gt;&lt;br /&gt;      $role.Members.Add($newRole)&lt;br /&gt;      $role.Update()&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;$svr.Disconnect()&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132751"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132751" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/132751.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=RR3i-XrHWio:ZuM9CBx5Fuc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=RR3i-XrHWio:ZuM9CBx5Fuc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=RR3i-XrHWio:ZuM9CBx5Fuc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=RR3i-XrHWio:ZuM9CBx5Fuc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=RR3i-XrHWio:ZuM9CBx5Fuc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=RR3i-XrHWio:ZuM9CBx5Fuc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=RR3i-XrHWio:ZuM9CBx5Fuc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/RR3i-XrHWio" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/06/11/ssas-powershell-to-replace-a-group-member-in-a-role.aspx</guid>
            <pubDate>Wed, 10 Jun 2009 22:41:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/132751.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/06/11/ssas-powershell-to-replace-a-group-member-in-a-role.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/132751.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/132751.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/06/11/ssas-powershell-to-replace-a-group-member-in-a-role.aspx</feedburner:origLink></item>
        <item>
            <title>A fix for the PerformancePoint 2007 Scorecard font issue</title>
            <category>PerformancePoint</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/q612roBDs2w/a-fix-for-the-performancepoint-2007-scorecard-font-issue.aspx</link>
            <description>&lt;p&gt;The Dashboard Designer in PerformancePoint Server 2007 gives you the ability to set a number of the properties for the font of a given column in a scorecard including the font-family and the font-size. You can see these settings change in the designer and you can preview the scorecard and see how your scorecard will look when it is deployed.&lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/AfixforPerformancePoint2007Scorecardfont_1465C/image_526e6fb2-5292-41e1-896a-024cbf0ae751.png" width="716" height="379" /&gt; &lt;/p&gt; &lt;p&gt;I changed the font in the screenshot above to Wingdings so that you could easily see the difference. In practice this is probably not a typical change, but you might want to make the font a bit bigger or possibly &lt;a href="http://nickbarclay.blogspot.com/2007/02/pps-bsm-sparklines-in-scorecards.html"&gt;use a font to get a sparkline in your scorecard&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;However, when you actually deploy your scorecard to Sharepoint you will be greeted with the following:&lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/AfixforPerformancePoint2007Scorecardfont_1465C/image_c80940fa-ca96-44a5-8881-ad0df2c5d1a9.png" width="582" height="249" /&gt; &lt;/p&gt; &lt;p&gt;The fonts are all reset to 8pt Arial, regardless of the actual settings you specified in the scorecard designer for the font family and size.&lt;/p&gt; &lt;p&gt;This took a fair bit of digging an may not make too much sense if you have not done a bit of web development, but I have isolated the issue in the screen shot below.&lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/AfixforPerformancePoint2007Scorecardfont_1465C/image_b9eaf533-1ba6-453d-8846-009bcff42373.png" width="715" height="463" /&gt; &lt;/p&gt; &lt;p&gt;This is part of the markup for a scorecard webpart, showing just the parts that highlight this issue. Right up at the top you can see a DIV tag with the ms-WPBody style, this is the root of our issue. I have pointed out the TD tag a bit further down which is where the font settings from the scorecard are applied and then further down you can see a second TD and inside that is a DIV which contains the actual data for the scorecard cell.&lt;/p&gt; &lt;p&gt;The ms-WPBody style has an entry in the core.css which is part of Sharepoint and it applies a default font-family of Arial and a size of 8pt to any contained TD elements, the inline style that is specified in the TD at the column level gets overridden because of the TD wrapping the cell contents.&lt;/p&gt; &lt;p&gt;One fix for this issue involves deleting the section in core.css that contains the reference to ".ms-WPBody TD" but that is rather extreme. It could affect the look of other elements on your Sharepoint site and service packs and upgrades could undo this.&lt;/p&gt; &lt;p&gt;My current fix involves installing the jQuery &lt;a href="http://smarttools.codeplex.com/"&gt;SmartTool from codeplex&lt;/a&gt; then adding a &lt;strike&gt;custom&lt;/strike&gt; content editor webpart with the following script to the page containing the scorecard.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;language&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;javascript&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;text/javascript&lt;/span&gt;"&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;
&lt;/span&gt;  _spBodyOnLoadFunctionNames.push("fixPpsFonts");
  function fixPpsFonts()
  { $(".ms-WPBody").removeClass("ms-WPBody"); }
&lt;span style="color: rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&lt;/span&gt; &lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;I set the visibility property of custom content webpart to false and then exported the webpart and added it to the gallery so that I could easily add it to other pages.&lt;/p&gt;
&lt;p&gt;It's not an ideal solution at the moment as I have to make sure to manually add the webpart if I ever re-deploy the dashboard, but I think it's better than the alternatives. &lt;/p&gt;
&lt;p&gt;Ideally I would like to be a bit more intelligent and only strip off the ms-WPBody class if the webpart contains a scorecard, but because the scorecards are rendered asynchronously using - the scorecard does not actually exist at the time the script runs, so I'm not sure that it's even possible to implementing this without changing the PerformancePoint Server code.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;Update: 27 June 2009&lt;/font&gt; - You need to enable the SmartTools.jQuery feature before you can use it. I have added some screen shots below to show how this is done.&lt;/p&gt;
&lt;p&gt;You need to be either a Site Collection administrator or higher to perform the following steps. You start by going into the Site Actions menu and then to the "Modify All Site Settings" option.&lt;/p&gt;
&lt;p&gt; &lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/AfixforPerformancePoint2007Scorecardfont_1465C/image_3697b595-8121-4aff-97a2-f556a66437e3.png" width="582" height="438" /&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Then you go into the "Site collection features" option.&lt;/p&gt;
&lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/AfixforPerformancePoint2007Scorecardfont_1465C/image_2c684b03-07bb-4193-ac0d-a484bbdb64d0.png" width="582" height="468" /&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;And you enable the SmartTools.jQuery feature&lt;/p&gt;
&lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/AfixforPerformancePoint2007Scorecardfont_1465C/image_70cdc88e-65f5-49ab-a75c-d32340978776.png" width="582" height="470" /&gt; &lt;/p&gt;
&lt;p&gt;Then you can go back to the page with your PPS Dashboard and add the snippet of javascript. Use the Source Editor button to paste in the script and set the Hidden property in the Layout section so that the webpart does not display anything to the end users.&lt;/p&gt;
&lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/AfixforPerformancePoint2007Scorecardfont_1465C/image_29f15062-0989-46f0-a828-dd7cdc15cbf4.png" width="573" height="583" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132740"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132740" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/132740.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=q612roBDs2w:KrLp0U-y9WQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=q612roBDs2w:KrLp0U-y9WQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=q612roBDs2w:KrLp0U-y9WQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=q612roBDs2w:KrLp0U-y9WQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=q612roBDs2w:KrLp0U-y9WQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=q612roBDs2w:KrLp0U-y9WQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=q612roBDs2w:KrLp0U-y9WQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/q612roBDs2w" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/06/10/a-fix-for-the-performancepoint-2007-scorecard-font-issue.aspx</guid>
            <pubDate>Wed, 10 Jun 2009 05:45:43 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/132740.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/06/10/a-fix-for-the-performancepoint-2007-scorecard-font-issue.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/132740.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/132740.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/06/10/a-fix-for-the-performancepoint-2007-scorecard-font-issue.aspx</feedburner:origLink></item>
        <item>
            <title>BIDS Helper release 1.4.1</title>
            <category>BIDS Helper</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/cFoIWRLRx8k/bids-helper-release-1.4.1.aspx</link>
            <description>&lt;p&gt;I am happy to announce that we recently put out a &lt;a href="http://bidshelper.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=22515"&gt;new release&lt;/a&gt; of BIDS Helper. I have copied the release notes out below, but one important "feature" that is not listed is that we now have a build script which is a modified version of the &lt;a href="http://codebetter.com/blogs/james.kovacs/archive/2008/06/27/introducing-psake.aspx"&gt;psake Powershell build script&lt;/a&gt; written by James Kovacs. &lt;/p&gt; &lt;p&gt;It had gotten to the point where it was a bit of an effort to do a build. You had to start by making sure you had the latest version of the source code, then version number had to be updated in a number of spots, then you had to do the compile, then run the installer script, then create the zip file for the xcopy deploy and once that was all done for the SQL 2005 version the whole process had to be repeated for the SQL 2008 version. So now we build an entire release in a single operation that only takes a minute or two. &lt;/p&gt; &lt;p&gt;There is also a new &lt;a href="http://bidshelper.codeplex.com/Wiki/View.aspx?title=Version%20Notification"&gt;Version Notification&lt;/a&gt; feature that will periodically check if there is a newer release on codeplex and let you know if there is a new version available for download. So once you are running this release, BIDS Helper itself will let you know when a new release is available.&lt;/p&gt; &lt;p&gt;As always, if you have any ideas for features that you would like to see you can add a feature suggestion to the &lt;a href="http://bidshelper.codeplex.com/WorkItem/List.aspx"&gt;issue list&lt;/a&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;This release incorporates the following major features: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;b&gt;General&lt;/b&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://bidshelper.codeplex.com/Wiki/View.aspx?title=Version%20Notification"&gt;Version Notification&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;b&gt;Analysis Services&lt;/b&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://bidshelper.codeplex.com/Wiki/View.aspx?title=Sync%20Descriptions"&gt;Sync Descriptions&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;b&gt;Reporting Services&lt;/b&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://bidshelper.codeplex.com/Wiki/View.aspx?title=Smart%20Diff"&gt;Smart Diff&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;This release also incorporates the following bug fixes and enhancements: &lt;ul&gt; &lt;li&gt;&lt;a href="http://bidshelper.codeplex.com/WorkItem/View.aspx?WorkItemId=20892"&gt;Parent/Child naturalizer fails if view contains spaces&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://bidshelper.codeplex.com/WorkItem/View.aspx?WorkItemId=21074"&gt;Deploy SSIS package error (BIDS 2005 and BIDS 2008 side by side)&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://bidshelper.codeplex.com/WorkItem/View.aspx?WorkItemId=21220"&gt;SSAS Estimated Count errors - CubeDimensionID does not exist&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://bidshelper.codeplex.com/WorkItem/View.aspx?WorkItemId=21565"&gt;Deploy SSIS Packages - no Deploy (BIDS Helper) tab?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132091"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132091" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/132091.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=cFoIWRLRx8k:WYN7hXK1GYg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=cFoIWRLRx8k:WYN7hXK1GYg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=cFoIWRLRx8k:WYN7hXK1GYg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=cFoIWRLRx8k:WYN7hXK1GYg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=cFoIWRLRx8k:WYN7hXK1GYg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=cFoIWRLRx8k:WYN7hXK1GYg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=cFoIWRLRx8k:WYN7hXK1GYg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/cFoIWRLRx8k" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/05/14/bids-helper-release-1.4.1.aspx</guid>
            <pubDate>Wed, 13 May 2009 20:40:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/132091.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/05/14/bids-helper-release-1.4.1.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/132091.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/132091.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/05/14/bids-helper-release-1.4.1.aspx</feedburner:origLink></item>
        <item>
            <title>An Analysis Services 2008 nugget</title>
            <category>Analysis Services</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/NOBxMoCQeTs/an-analysis-services-2008-nugget.aspx</link>
            <description>&lt;p&gt;I was experimenting with some of the PerformancePoint APIs today, but I was doing something wrong as I kept getting ERROR! back. I assumed that some of the parameters that I was using was resulting in invalid MDX being generated. I was running against a test database on SSAS 2005 and as I suspected there was a syntax error in the MDX. Unfortunately Profiler against SSAS 2005 showed me the error, but not the offending MDX, which was not much help. &lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/AnAnalysisServices2008nugget_147A8/image_a70acaec-848f-4add-a15f-a01cee53fa3d.png" width="582" height="376" /&gt; &lt;/p&gt; &lt;p&gt;On a whim I decided to move my test database to SSAS 2008 and what do you know - profiler now shows the full MDX in the error message! This allowed me to see that the it was the parameter that was mapping to the slicer that was not working.&lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/AnAnalysisServices2008nugget_147A8/image_ecde6443-3249-408d-8e14-e1657ec4c3ff.png" width="582" height="420" /&gt; &lt;/p&gt; &lt;p&gt;I'm sure there are plenty of other little areas of fit and polish like this which don't make it into an official feature list, but make it worth upgrading to SSAS 2008.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132053"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132053" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/132053.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=NOBxMoCQeTs:YReB9_uhz3c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=NOBxMoCQeTs:YReB9_uhz3c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=NOBxMoCQeTs:YReB9_uhz3c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=NOBxMoCQeTs:YReB9_uhz3c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=NOBxMoCQeTs:YReB9_uhz3c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=NOBxMoCQeTs:YReB9_uhz3c:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=NOBxMoCQeTs:YReB9_uhz3c:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/NOBxMoCQeTs" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/05/12/an-analysis-services-2008-nugget.aspx</guid>
            <pubDate>Tue, 12 May 2009 13:18:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/132053.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/05/12/an-analysis-services-2008-nugget.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/132053.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/132053.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/05/12/an-analysis-services-2008-nugget.aspx</feedburner:origLink></item>
        <item>
            <title>SSAS: T-SQL Equivalent for a Many-to-Many relationship</title>
            <category>Analysis Services</category>
            <category>MDX</category>
            <category>SQL Server</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/bjaepmOEuDA/ssas-t-sql-equivalent-for-a-many-to-many-relationship.aspx</link>
            <description>&lt;p&gt;This question came a while ago now in this SSAS forum thread: &lt;a href="http://social.msdn.microsoft.com/forums/en-US/sqlanalysisservices/thread/370aa59f-a609-4127-bfc8-a987048ddcc8/"&gt;What is wrong in my query&lt;/a&gt; and I thought it was something that may interest other people.&lt;/p&gt; &lt;p&gt;Basically it boiled down to trying to find a T-SQL equivalent to the following MDX which is querying a dimension with a many-to-many relationship to the measure.&lt;/p&gt; &lt;p&gt;So given the following simple MDX query, what would be the equivalent in SQL?&lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;select&lt;/span&gt; 
  measures.[Internet Sales Amount] &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 0
  , [Sales Reason].[Sales Reasons].[Reason Type].&lt;span style="color: rgb(0,0,255)"&gt;Members&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 1
&lt;span style="color: rgb(0,0,255)"&gt;FROM&lt;/span&gt; [Adventure Works]&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Well, what I came up with was the following where I ended up effectively joining to the fact table twice. I don't know about you, but I'd rather write the MDX version any day. :)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;SELECT&lt;/span&gt; 
  m2m&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesReasonReasonType
  &lt;span style="color: rgb(128,128,128)"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255,0,255)"&gt;Sum&lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;(&lt;/span&gt;f&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesAmount&lt;span style="color: rgb(128,128,128)"&gt;)&lt;/span&gt; 
&lt;span style="color: rgb(0,0,255)"&gt;FROM&lt;/span&gt; FactInternetSales f
&lt;span style="color: rgb(128,128,128)"&gt;INNER&lt;/span&gt; &lt;span style="color: rgb(128,128,128)"&gt;JOIN&lt;/span&gt; 
&lt;span style="color: rgb(128,128,128)"&gt;(
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;SELECT&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;DISTINCT&lt;/span&gt; salesOrderNumber&lt;span style="color: rgb(128,128,128)"&gt;,&lt;/span&gt; SalesOrderLineNumber&lt;span style="color: rgb(128,128,128)"&gt;,&lt;/span&gt; D&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesReasonReasonType
    &lt;span style="color: rgb(0,0,255)"&gt;FROM&lt;/span&gt; [dbo]&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;[DimSalesReason] &lt;span style="color: rgb(0,0,255)"&gt;AS&lt;/span&gt; dim
    &lt;span style="color: rgb(128,128,128)"&gt;INNER&lt;/span&gt; &lt;span style="color: rgb(128,128,128)"&gt;Join&lt;/span&gt; dbo&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;FactInternetSalesReason isr
        &lt;span style="color: rgb(0,0,255)"&gt;ON&lt;/span&gt; dim&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesReasonKey &lt;span style="color: rgb(128,128,128)"&gt;=&lt;/span&gt; isr&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesReasonKey 
&lt;span style="color: rgb(128,128,128)"&gt;)&lt;/span&gt; m2m
    &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; f&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesOrderNumber &lt;span style="color: rgb(128,128,128)"&gt;=&lt;/span&gt; m2m&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesOrderNumber 
    &lt;span style="color: rgb(128,128,128)"&gt;And&lt;/span&gt; f&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesOrderLineNumber &lt;span style="color: rgb(128,128,128)"&gt;=&lt;/span&gt; m2m&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesOrderLineNumber 
&lt;span style="color: rgb(0,0,255)"&gt;GROUP&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;BY&lt;/span&gt; m2m&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;SalesReasonReasonType
&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:11f0a0eb-7ad0-4ca0-9bc8-e678f90b16f9" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Analysis%20Services" rel="tag"&gt;Analysis Services&lt;/a&gt;, &lt;a href="http://technorati.com/tags/MDX" rel="tag"&gt;MDX&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Many%20to%20Many" rel="tag"&gt;Many to Many&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131687"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131687" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/131687.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=bjaepmOEuDA:VkYPA1FFrWg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=bjaepmOEuDA:VkYPA1FFrWg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=bjaepmOEuDA:VkYPA1FFrWg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=bjaepmOEuDA:VkYPA1FFrWg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=bjaepmOEuDA:VkYPA1FFrWg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=bjaepmOEuDA:VkYPA1FFrWg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=bjaepmOEuDA:VkYPA1FFrWg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/bjaepmOEuDA" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/05/03/ssas-t-sql-equivalent-for-a-many-to-many-relationship.aspx</guid>
            <pubDate>Sun, 03 May 2009 11:47:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/131687.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/05/03/ssas-t-sql-equivalent-for-a-many-to-many-relationship.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/131687.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/131687.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/05/03/ssas-t-sql-equivalent-for-a-many-to-many-relationship.aspx</feedburner:origLink></item>
        <item>
            <title>PowerShell: List all the senders from an Outlook folder</title>
            <category>PowerShell</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/l9dyoLZpWIM/powershell-list-all-the-senders-from-an-outlook-folder.aspx</link>
            <description>&lt;p&gt;A friend of mine was looking for a tool today to extract a list of names and email addresses from a folder in outlook. I know that Outlook has a comprehensive COM based object model which I figured that I should be able to access from Powershell. I quick search turned up articles from both &lt;a href="http://blogs.msdn.com/jmanning/archive/2007/01/25/using-powershell-for-outlook-automation.aspx"&gt;James Manning&lt;/a&gt; and &lt;a href="http://www.leeholmes.com/blog/OutlookAutomationInPowerShellCalendarScrubbing.aspx"&gt;Lee Holmes&lt;/a&gt; on automating Outlook from Powershell (which I think I have come across before). A bit of poking around using the get-member helped me locate the properties I needed and resulted in the following script. &lt;/p&gt; &lt;p&gt;It access the Personal\Fun folder in my inbox and exports a list of names and email addresses for anyone that has sent me a joke (or at least those which were worth keeping)&lt;/p&gt; &lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;$olFolderInbox&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;6&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;$ol&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,128,128)"&gt;new-object&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0,128,128)"&gt;comobject&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;Outlook.Application&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;$mapi&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;$ol&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;.getnamespace(&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;mapi&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;)
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;$inbox&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;$mapi&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;.GetDefaultFolder(&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;$olFolderInbox&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;)
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;$msgs&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;$inbox&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;.Folders.Item(&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;Personal&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;).Folders.Item(&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;Fun&lt;/span&gt;&lt;span style="color: rgb(0,0,128)"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;)
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;$msgs&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;.items &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;|&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,128,128)"&gt;Select-Object&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; SenderName, SenderEmailAddress &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0,128,128)"&gt;unique&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;|&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color: rgb(0,128,128)"&gt;export-Csv&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt; c:\emails.csv &lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0,128,128)"&gt;noTypeInformation&lt;/span&gt;&lt;span style="color: rgb(0,0,0)"&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Taking this a bit further, I wrapped this code into a script so that it could take in the path to an outlook folder and returned a collection of names and addresses.&lt;/p&gt;
&lt;p&gt;&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-98546e1b65a78a74.skydrive.live.com/embedrowdetail.aspx/Public/Blog/PowerShell/get-OutlookFolderSenders.ps1" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;So the following call will display the output to the console&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;.\get-OutlookFolderSenders.ps1 "Personal\Fun"&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;And to export them to a file you can just pipe through to the export-csv cmdlet&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;.\get-OutlookFolderSenders.ps1 "Personal\Fun" | export-csv "c:\email.csv" -noTypeInformation&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Or if you want a html page you can do the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;.\get-OutlookFolderSenders.ps1 "Personal\Fun" | convertTo-html | "c:\email.htm"  &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;I developed this little snippet of code using &lt;/em&gt;&lt;a href="http://www.powershellanalyzer.com/"&gt;&lt;em&gt;Powershell Analyzer&lt;/em&gt;&lt;/a&gt;&lt;em&gt; which I still favour as my main Powershell IDE even though it is not longer being actively developed. It just fits with the way I like to work.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130832"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130832" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/130832.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=l9dyoLZpWIM:Cq-7Zf3vVHM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=l9dyoLZpWIM:Cq-7Zf3vVHM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=l9dyoLZpWIM:Cq-7Zf3vVHM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=l9dyoLZpWIM:Cq-7Zf3vVHM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=l9dyoLZpWIM:Cq-7Zf3vVHM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=l9dyoLZpWIM:Cq-7Zf3vVHM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=l9dyoLZpWIM:Cq-7Zf3vVHM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/l9dyoLZpWIM" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/04/08/powershell-list-all-the-senders-from-an-outlook-folder.aspx</guid>
            <pubDate>Wed, 08 Apr 2009 11:17:54 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/130832.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/04/08/powershell-list-all-the-senders-from-an-outlook-folder.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/130832.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/130832.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/04/08/powershell-list-all-the-senders-from-an-outlook-folder.aspx</feedburner:origLink></item>
        <item>
            <title>Debugging SSIS ScriptTasks and ScriptComponents with Information Messages</title>
            <category>Integration Services</category>
            <category>SQL Server</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/GtJ7HK3qRZA/debugging-ssis-scripttasks-and-scriptcomponents-with-information-messages.aspx</link>
            <description>&lt;p&gt;I recently had to do some simple debugging of some script tasks and components in SSIS and through I would share the simple technique that I was using. While this is only just above the level of debugging using MessageBoxes it can still be quite handy. It basically consists of printing information messages to the Progress/Execution Results window in BIDS. The syntax differs between the ScriptTask and the ScriptComponent and I keep forgetting it, so I figured if I posted it here I should be able to find it later without too much trouble.  &lt;/p&gt;&lt;p&gt;For ScriptTasks in the control flow you use the following  &lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;  Dts.Events.FireInformation(0, "&amp;lt;SubComponentName&amp;gt;", "&amp;lt;Message&amp;gt;", "", 0, true)&lt;/font&gt;  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;For ScriptComponents in the data flow you use the following  &lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;  ComponentMetaData.FireInformation(0, "&amp;lt;SubComponentName&amp;gt;", "&amp;lt;Message&amp;gt;", "", 0, true)&lt;/font&gt;  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;Both these calls cause an information message like  "[ &lt;em&gt;&amp;lt;SubComponentName&amp;gt;&lt;/em&gt; ] &lt;em&gt;&amp;lt;Message&amp;gt;&lt;/em&gt;" to be written to the Execution Results window in BIDS.  &lt;/p&gt;&lt;p&gt;This can be useful for displaying the values of variables and for printing out trace messages when certain logic has been invoked.  &lt;/p&gt;&lt;p&gt;The screen shots below are from a simple test package which just loops through every database on a server and selects a list of all the tables. In the data flow task I have a script destination component that raises information events with the database and table name in the description. below is a copy of the code and a snippet of the Execution Results window that shows the output.  &lt;/p&gt;&lt;p&gt; &lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/DebuggingSSISScriptTasksandScriptCompone_1408A/image_4a96df15-6ee3-4952-8a2c-098bc19111c7.png" width="700" height="239" /&gt;  &lt;/p&gt;&lt;p&gt;Then at the end of the control flow I have a script task that just prints out a message that the packages had finished.  &lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/DebuggingSSISScriptTasksandScriptCompone_1408A/image_30dc67e3-96b3-4ce1-8687-a1ea8440259a.png" width="550" height="266" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130495"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130495" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/130495.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=GtJ7HK3qRZA:M1kgwW9S9K4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=GtJ7HK3qRZA:M1kgwW9S9K4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=GtJ7HK3qRZA:M1kgwW9S9K4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=GtJ7HK3qRZA:M1kgwW9S9K4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=GtJ7HK3qRZA:M1kgwW9S9K4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=GtJ7HK3qRZA:M1kgwW9S9K4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=GtJ7HK3qRZA:M1kgwW9S9K4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/GtJ7HK3qRZA" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/03/29/debugging-ssis-scripttasks-and-scriptcomponents-with-information-messages.aspx</guid>
            <pubDate>Sun, 29 Mar 2009 10:28:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/130495.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/03/29/debugging-ssis-scripttasks-and-scriptcomponents-with-information-messages.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/130495.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/130495.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/03/29/debugging-ssis-scripttasks-and-scriptcomponents-with-information-messages.aspx</feedburner:origLink></item>
        <item>
            <title>OT: OfficeLabs Search Commands for Office 2007</title>
            <category>General</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/mZ9du2cBwow/ot-officelabs-search-commands-for-office-2007.aspx</link>
            <description>&lt;p&gt;I quite like the new ribbon interface in Office 2007, but occasionally I still find myself sometimes hunting for commands that I know exist somewhere.....&lt;/p&gt; &lt;p&gt;If you are the same, then you will be pleased to know that there is a really good solution to this situation in the form of the &lt;a href="http://www.officelabs.com/projects/searchcommands/Pages/default.aspx"&gt;Search Commands&lt;/a&gt; plugin from the &lt;a href="http://www.officelabs.com/"&gt;OfficeLabs&lt;/a&gt; team at Microsoft. It adds a tab to the ribbon that lets you search all the commands in any of the office applications.&lt;/p&gt; &lt;p&gt;&lt;img height="159" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/OTOfficeLabsSearchCommandsforOffice2007_F35D/image_1b749ab5-9493-4e23-a5e6-59d3b273075b.png" width="582" border="0" /&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;If for instance you could not find the Spell Check facility in Excel 2007 you can search for it:&lt;/p&gt; &lt;p&gt;&lt;img height="252" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/OTOfficeLabsSearchCommandsforOffice2007_F35D/image_8b6b9e39-e4ad-4b4e-a5cc-fd610b031cb7.png" width="532" border="0" /&gt; &lt;/p&gt; &lt;p&gt;And you not only get a button that you can use to launch the feature, you get a tool tip that tells you the location in ribbon for that given command.&lt;/p&gt; &lt;p&gt;The other interesting thing is that there are some commands that are not on the ribbon at all, but with this tool you can easily find and execute them without having to add these commands to the quick launch or anything like that.&lt;/p&gt; &lt;p&gt;&lt;img height="289" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/OTOfficeLabsSearchCommandsforOffice2007_F35D/image_84fd4356-cacf-401d-84b5-ffd89ee38a00.png" width="498" border="0" /&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;There are a couple of other projects on the OfficeLabs site including the pptPlex one which look quite interesting.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:df141c9a-4564-4af7-a957-6344cb137833" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/OfficeLabs" rel="tag"&gt;OfficeLabs&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Office%202007" rel="tag"&gt;Office 2007&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130183"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130183" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/130183.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=mZ9du2cBwow:KMnVpYho0WI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=mZ9du2cBwow:KMnVpYho0WI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=mZ9du2cBwow:KMnVpYho0WI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=mZ9du2cBwow:KMnVpYho0WI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=mZ9du2cBwow:KMnVpYho0WI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=mZ9du2cBwow:KMnVpYho0WI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=mZ9du2cBwow:KMnVpYho0WI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/mZ9du2cBwow" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/03/18/ot-officelabs-search-commands-for-office-2007.aspx</guid>
            <pubDate>Wed, 18 Mar 2009 11:41:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/130183.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/03/18/ot-officelabs-search-commands-for-office-2007.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/130183.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/130183.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/03/18/ot-officelabs-search-commands-for-office-2007.aspx</feedburner:origLink></item>
        <item>
            <title>SSAS: There is no such thing as an Attribute in MDX!</title>
            <category>Analysis Services</category>
            <category>MDX</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/cGpi_uR6F1g/ssas-there-is-no-such-thing-as-an-attribute-in.aspx</link>
            <description>&lt;p&gt;In MDX in SSAS the term "attribute" occasionally gets used interchangeably with "hierarchy" and "level", but it's not technically accurate.  &lt;/p&gt;&lt;p&gt;In SSAS, MDX has concepts of Dimensions, Hierarchies and Levels, but not Attributes. Attributes and Attribute Relationships are design time concepts that are understood by the storage engine, but they are not directly exposed in the MDX language. Attributes actually map to levels (or properties) in MDX. I think the confusion comes about because, by default, an attribute generates a hierarchy with a single level in it that both have the same name as the underlying attribute. (I also think that some of this confusion comes about because of the way that SSAS coalesces different objects, but that is a topic for another time.)&lt;/p&gt; &lt;p&gt;So if you create a Month attribute in the Date dimension, when you process it will generate a Month Hierarchy and a Month Level so in the form &amp;lt;Dimension&amp;gt;.&amp;lt;Hierarchy&amp;gt;.&amp;lt;Level&amp;gt; you end up with [Date].[Month].[Month].&lt;/p&gt; &lt;p&gt;I think that understanding the different types of objects and how they interrelate if fundamental to being able to understand MDX.&lt;/p&gt; &lt;p&gt;In MDX terms: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;strike&gt;a dimension contains a collection of 1 or more hierarchies,&lt;/strike&gt;&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;a hierarchy contains a collection of 1 or more levels &lt;/p&gt; &lt;/li&gt;&lt;li&gt;and a level contains a collection of 1 or more members&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;...and there is no such thing as an attribute. :)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;Update [17 Mar 09]&lt;/font&gt; - As Mosha has pointed out in the comments, MDX does not have a concept of dimensions either, just hierarchies. There are some references to dimensions, things like the .Dimension function (which actually returns a hierarchy and I think is just a hang over from AS 2000) and member unique names can be expressed in terms of [&amp;lt;dimension&amp;gt;].[&amp;lt;hierarchy&amp;gt;].[&amp;lt;level&amp;gt;].[&amp;lt;member&amp;gt;]. So I think that the dimension concept does "leak" into MDX a little bit.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130098"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130098" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/130098.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=cGpi_uR6F1g:zEQfo54u0Pk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=cGpi_uR6F1g:zEQfo54u0Pk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=cGpi_uR6F1g:zEQfo54u0Pk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=cGpi_uR6F1g:zEQfo54u0Pk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=cGpi_uR6F1g:zEQfo54u0Pk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=cGpi_uR6F1g:zEQfo54u0Pk:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=cGpi_uR6F1g:zEQfo54u0Pk:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/cGpi_uR6F1g" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/03/15/ssas-there-is-no-such-thing-as-an-attribute-in.aspx</guid>
            <pubDate>Sun, 15 Mar 2009 12:04:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/130098.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/03/15/ssas-there-is-no-such-thing-as-an-attribute-in.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/130098.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/130098.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/03/15/ssas-there-is-no-such-thing-as-an-attribute-in.aspx</feedburner:origLink></item>
        <item>
            <title>How to build your own Super Model - Melbourne SQL User Group</title>
            <category>Analysis Services</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/NP-xRfuXsFc/how-to-build-your-own-super-model---adelaide-sqlug.aspx</link>
            <description>&lt;p&gt;&lt;img style="margin: 0px 15px 0px 0px" height="350" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/HowtobuildyourownSuperModelAdelaideSQLUG_14AD8/image_b0c81131-4258-4aae-956b-0ab3b16ca217.png" width="466" align="left" border="0" /&gt; &lt;/p&gt; &lt;p&gt;Next week I am giving my talk talk on "How to build your own Super Model" to the Melbourne SQL User Group. This is the same one that I presented to the Adelaide User Group &lt;a href="http://geekswithblogs.net/darrengosbell/archive/2009/02/16/how-to-build-your-own-super-model---adelaide-sqlug.aspx"&gt;last month&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;It is an introductory look at dimensional modeling for Analysis Services. Where we will talk about what it is, how it’s done and look at the features that Analysis Services provides to support some of the different modeling techniques. The focus of this session will be around the various types of dimension usage, looking at regular relationships, fact relationships, many-to-many relationships and reference relationships.&lt;/p&gt; &lt;p&gt;So if you are in Melbourne and are free next Tuesday, March 17th after work you can get the full details for the event and register for it &lt;a href="http://www.sqlserver.org.au/Events/RegisterMeeting.aspx?EventId=392"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129432"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129432" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/129432.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=NP-xRfuXsFc:_lT3Ne57sqY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=NP-xRfuXsFc:_lT3Ne57sqY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=NP-xRfuXsFc:_lT3Ne57sqY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=NP-xRfuXsFc:_lT3Ne57sqY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=NP-xRfuXsFc:_lT3Ne57sqY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=NP-xRfuXsFc:_lT3Ne57sqY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=NP-xRfuXsFc:_lT3Ne57sqY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/NP-xRfuXsFc" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/02/16/how-to-build-your-own-super-model---adelaide-sqlug.aspx</guid>
            <pubDate>Mon, 16 Feb 2009 12:47:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/129432.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/02/16/how-to-build-your-own-super-model---adelaide-sqlug.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/129432.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/129432.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/02/16/how-to-build-your-own-super-model---adelaide-sqlug.aspx</feedburner:origLink></item>
        <item>
            <title>BIDS Helper 1.4 released</title>
            <category>BIDS Helper</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/FpjSc3GNsaY/bids-helper-1.4-released.aspx</link>
            <description>A little while ago we released v1.4 of BIDS Helper. Quite a few of you seem to have found it anyway, but for those of you who have not, below is a summary of what you can find in this release. &lt;p&gt;Release 1.4 contains a number of new features: &lt;/p&gt;&lt;ul&gt; &lt;li&gt;&lt;b&gt;Analysis Services&lt;/b&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/Wiki/View.aspx?title=Parent-Child%20Dimension%20Naturalizer"&gt;Parent-Child Dimension Naturalizer&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/Wiki/View.aspx?title=Test%20Aggregation%20Performance"&gt;Test Aggregation Performance&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;b&gt;Integration Services&lt;/b&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/Wiki/View.aspx?title=Sortable%20Package%20Properties%20Report"&gt;Sortable Package Properties Report&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;b&gt;Reporting Services&lt;/b&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/Wiki/View.aspx?title=Dataset%20Usage%20Reports"&gt;Dataset Usage Reports&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/Wiki/View.aspx?title=Delete%20Dataset%20Cache%20Files"&gt;Delete Dataset Cache Files&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And it contains a number of enhancements and bug fixes: &lt;ul&gt; &lt;li&gt;&lt;b&gt;Analysis Services&lt;/b&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/WorkItem/View.aspx?WorkItemId=20115"&gt;Enhancements to Edit Aggregation Dialog&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/WorkItem/View.aspx?WorkItemId=20851"&gt;improved Printer Friendly Aggs report&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;b&gt;Integration Services&lt;/b&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/WorkItem/View.aspx?WorkItemId=18746"&gt;Problem with BIDS 1.3.0.8 (SQL 2005) and VSS&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/WorkItem/View.aspx?WorkItemId=20091"&gt;Smart Diff error - File or project not found&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/bidshelper/WorkItem/View.aspx?WorkItemId=18816"&gt;Expression List doesn't show all Expressions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;The other reason that I wanted to post about this is that codeplex has added the ability to add reviews and ratings for project releases. BIDS Helper does not currently have any of these so if any of you feel motivated to add a rating or review to the &lt;a href="http://www.codeplex.com/bidshelper/Release/ProjectReleases.aspx?ReleaseId=16602"&gt;current release&lt;/a&gt; that would be really cool. &lt;/p&gt; &lt;p&gt;As always, if you have any questions, issues or suggestions for new features you can use the &lt;a href="http://www.codeplex.com/bidshelper/Thread/List.aspx"&gt;discussions&lt;/a&gt; or &lt;a href="http://www.codeplex.com/bidshelper/WorkItem/List.aspx"&gt;issues&lt;/a&gt; tabs on the project site.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:54bf083b-c169-49fe-bfc1-ed5124fda768" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/BIDS%20Helper" rel="tag"&gt;BIDS Helper&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129277"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129277" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/129277.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=FpjSc3GNsaY:Hns8Vw6mlmQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=FpjSc3GNsaY:Hns8Vw6mlmQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=FpjSc3GNsaY:Hns8Vw6mlmQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=FpjSc3GNsaY:Hns8Vw6mlmQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=FpjSc3GNsaY:Hns8Vw6mlmQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=FpjSc3GNsaY:Hns8Vw6mlmQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=FpjSc3GNsaY:Hns8Vw6mlmQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/FpjSc3GNsaY" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/02/08/bids-helper-1.4-released.aspx</guid>
            <pubDate>Sun, 08 Feb 2009 11:48:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/129277.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/02/08/bids-helper-1.4-released.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/129277.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/129277.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/02/08/bids-helper-1.4-released.aspx</feedburner:origLink></item>
        <item>
            <title>MDX equivalent of a filtered GROUP BY in SQL</title>
            <category>Analysis Services</category>
            <category>MDX</category>
            <link>http://feedproxy.google.com/~r/darrengosbell/~3/8G2MIpzGv1s/mdx-equivalent-of-a-filtered-group-by-in-sql.aspx</link>
            <description>&lt;p&gt;Does that title make sense? I don't know if it does, but I can't think of another description for this problem. If anyone can think of a better title I would love to hear it. It's hard to explain in words so let's jump into some code examples.&lt;/p&gt; &lt;p&gt;Consider the following SQL statement against the AdventureWorksDW relational database. The requirement is to select a list of 4 cities and then want to see the order quantity grouped at the country level. &lt;/p&gt; &lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;SELECT&lt;/span&gt; 
    g&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;EnglishCountryRegionName Country
    &lt;span style="color: rgb(128,128,128)"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255,0,255)"&gt;sum&lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;(&lt;/span&gt;OrderQuantity&lt;span style="color: rgb(128,128,128)"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;as&lt;/span&gt; OrderQuantity
&lt;span style="color: rgb(0,0,255)"&gt;FROM&lt;/span&gt; dbo&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;FactResellerSales rs
&lt;span style="color: rgb(128,128,128)"&gt;INNER&lt;/span&gt; &lt;span style="color: rgb(128,128,128)"&gt;JOIN&lt;/span&gt; dimReseller r
    &lt;span style="color: rgb(0,0,255)"&gt;ON&lt;/span&gt; r&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;ResellerKey &lt;span style="color: rgb(128,128,128)"&gt;=&lt;/span&gt; rs&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;ResellerKey
&lt;span style="color: rgb(128,128,128)"&gt;INNER&lt;/span&gt; &lt;span style="color: rgb(128,128,128)"&gt;JOIN&lt;/span&gt; dimGeography g
    &lt;span style="color: rgb(0,0,255)"&gt;ON&lt;/span&gt; g&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;GeographyKey &lt;span style="color: rgb(128,128,128)"&gt;=&lt;/span&gt; r&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;GeographyKey
&lt;span style="color: rgb(0,0,255)"&gt;WHERE&lt;/span&gt; g&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;City &lt;span style="color: rgb(128,128,128)"&gt;IN&lt;/span&gt; &lt;span style="color: rgb(128,128,128)"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;'Melbourne'&lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;'Sydney'&lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;'Seattle'&lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255,0,0)"&gt;'New York'&lt;/span&gt;&lt;span style="color: rgb(128,128,128)"&gt;)
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;GROUP&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;BY&lt;/span&gt; g&lt;span style="color: rgb(128,128,128)"&gt;.&lt;/span&gt;EnglishCountryRegionName
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;This query returns the following result:&lt;/p&gt;
&lt;p&gt;&lt;img style="margin: 0px 0px 0px 40px" height="99" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/MDXequivalentofafilteredGROUPBYinSQL_FD68/image_b4d5b01b-f985-407c-b3f7-bc47f586d7c5.png" width="239" border="0" /&gt; &lt;/p&gt;
&lt;p&gt;How can we do an equivalent query in MDX?&lt;/p&gt;
&lt;p&gt;if you start with something like the following it gets you the correct raw figures, but it breaks the amounts out for each city and we want to see the sub-totals by country.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;SELECT&lt;/span&gt; 
  [Measures].[Reseller Order Quantity] &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 0
  ,{[Geography].[City].[Melbourne]
   ,[Geography].[City].[Sydney]
   ,[Geography].[City].[Seattle]
   ,[Geography].[City].[New York]} &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 1 
&lt;span style="color: rgb(0,0,255)"&gt;FROM&lt;/span&gt; [Adventure Works] 
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;This is the result that you get:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img height="141" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/MDXequivalentofafilteredGROUPBYinSQL_FD68/image_e23149ce-2c74-46e8-9b66-f614b6d2b602.png" width="244" border="0" /&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So then you might figure that putting the country members on the axis and the cities in the where clause should do the trick.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;SELECT&lt;/span&gt; 
  {Measures.[Reseller Order Quantity]} &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 0
  ,[Geography].[Country].[Country].&lt;span style="color: rgb(0,0,255)"&gt;Members&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 1 
&lt;span style="color: rgb(0,0,255)"&gt;FROM&lt;/span&gt; [Adventure Works] 
&lt;span style="color: rgb(0,0,255)"&gt;WHERE&lt;/span&gt; (
    {[Geography].[City].[Melbourne]
    ,[Geography].[City].[Sydney]
    ,[Geography].[City].[Seattle]
    ,[Geography].[City].[New York]})
&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;But then we get the following...&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img height="96" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/MDXequivalentofafilteredGROUPBYinSQL_FD68/image_dccb287b-c406-4750-8104-c26bc2c73bfb.png" width="250" border="0" /&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So what is going on here? The query has returned the total amounts for the entire countries, not just the sub totals for the cities in the WHERE clause. Because of the attribute relationship between Countries and Cities, SSAS has put the country members on the rows that are related to the cities in the WHERE clause. In effect what this query is roughly saying to SSAS is "show me the Reseller Order Quantity for the Countries that contain one or more of the following cities. There is a more in depth explanation of this behavior here: &lt;a title="Attribute Relationships Explained" href="http://www.sqlserveranalysisservices.com/OLAPPapers/AttributeRelationships.htm"&gt;Attribute Relationships Explained&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So what we want to do is to get a measure that is filtered to figures for the selected cities. One way of doing this would be to created a calculated measure like the following:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;WITH&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;MEMBER&lt;/span&gt; Measures.FilteredSales &lt;span style="color: rgb(0,0,255)"&gt;as&lt;/span&gt; 
    &lt;span style="color: rgb(128,0,0)"&gt;SUM&lt;/span&gt;(
        &lt;span style="color: rgb(0,0,255)"&gt;EXISTING&lt;/span&gt; {[Geography].[City].[Melbourne]
                ,[Geography].[City].[Sydney]
                ,[Geography].[City].[Seattle]
                ,[Geography].[City].[New York]}
   , [Measures].[Reseller Order Quantity])
&lt;span style="color: rgb(0,0,255)"&gt;SELECT&lt;/span&gt; 
  {Measures.[FilteredSales]} &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 0
  ,[Geography].[Country].[Country].&lt;span style="color: rgb(0,0,255)"&gt;Members&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 1 
&lt;span style="color: rgb(0,0,255)"&gt;FROM&lt;/span&gt; [Adventure Works] 
&lt;span style="color: rgb(0,0,255)"&gt;WHERE&lt;/span&gt; (
    {[Geography].[City].[Melbourne]
    ,[Geography].[City].[Sydney]
    ,[Geography].[City].[Seattle]
    ,[Geography].[City].[New York]})&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;This gets the result that we are after, but it was a rather convoluted solution&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img height="86" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/MDXequivalentofafilteredGROUPBYinSQL_FD68/image_49e94f87-c57f-4b76-9abd-a93b3d8bf676.png" width="193" border="0" /&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;However, there is an easier way. We could use a sub-select...&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;SELECT&lt;/span&gt; 
  [Measures].[Reseller Order Quantity] &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 0,
  [Geography].[Country].[Country].&lt;span style="color: rgb(0,0,255)"&gt;Members&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 1
&lt;span style="color: rgb(0,0,255)"&gt;FROM&lt;/span&gt; ( &lt;br /&gt;   &lt;span style="color: rgb(0,0,255)"&gt;SELECT
&lt;/span&gt;      {[Geography].[City].[Melbourne]
      ,[Geography].[City].[Sydney]
      ,[Geography].[City].[Seattle]
      ,[Geography].[City].[New York]} &lt;span style="color: rgb(0,0,255)"&gt;on&lt;/span&gt; 0
&lt;span style="color: rgb(0,0,255)"&gt;FROM&lt;/span&gt; [Adventure Works] )
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Which returns the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img height="92" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/darrengosbell/WindowsLiveWriter/MDXequivalentofafilteredGROUPBYinSQL_FD68/image_8ea51896-2787-4629-a4af-fa0fd9dde13c.png" width="245" border="0" /&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Which is exactly what we were after. I usually tend to avoid using sub-selects when I can as I don't like how they can affect calculated measures because the sub-select is not visible to functions like .CurrentMember. But there are situations like this, where they are perfectly suited and are much simpler than an alternative solution.&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:94089575-bc2a-459d-a751-b1e6d2f0dee9" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MDX" rel="tag"&gt;MDX&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Attribute%20Relationships" rel="tag"&gt;Attribute Relationships&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Analysis%20Services" rel="tag"&gt;Analysis Services&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129008"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129008" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/darrengosbell/aggbug/129008.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=8G2MIpzGv1s:0zQpixnfAx4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=8G2MIpzGv1s:0zQpixnfAx4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=8G2MIpzGv1s:0zQpixnfAx4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=8G2MIpzGv1s:0zQpixnfAx4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=8G2MIpzGv1s:0zQpixnfAx4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/darrengosbell?a=8G2MIpzGv1s:0zQpixnfAx4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/darrengosbell?i=8G2MIpzGv1s:0zQpixnfAx4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/darrengosbell/~4/8G2MIpzGv1s" height="1" width="1"/&gt;</description>
            <dc:creator>Darren Gosbell</dc:creator>
            <guid isPermaLink="false">http://geekswithblogs.net/darrengosbell/archive/2009/01/28/mdx-equivalent-of-a-filtered-group-by-in-sql.aspx</guid>
            <pubDate>Tue, 27 Jan 2009 19:54:09 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/darrengosbell/comments/129008.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/darrengosbell/archive/2009/01/28/mdx-equivalent-of-a-filtered-group-by-in-sql.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/darrengosbell/comments/commentRss/129008.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/darrengosbell/services/trackbacks/129008.aspx</trackback:ping>
        <feedburner:origLink>http://geekswithblogs.net/darrengosbell/archive/2009/01/28/mdx-equivalent-of-a-filtered-group-by-in-sql.aspx</feedburner:origLink></item>
    </channel>
</rss>
