<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://agilebi.com/cs/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Making the world a better place, one database at a time</title><subtitle type="html">General musing and random information on Business Intelligence</subtitle><id>http://agilebi.com/cs/blogs/ddarden/atom.aspx</id><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/default.aspx" /><link rel="self" type="application/atom+xml" href="http://agilebi.com/cs/blogs/ddarden/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.61129.2">Community Server</generator><updated>2008-04-26T17:26:06Z</updated><entry><title>Filtering Objects in PowerShell based on a List of Accepted Values</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2009/06/09/filtering-objects-in-powershell-based-on-a-list-of-accepted-values.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2009/06/09/filtering-objects-in-powershell-based-on-a-list-of-accepted-values.aspx</id><published>2009-06-10T01:47:15Z</published><updated>2009-06-10T01:47:15Z</updated><content type="html">&lt;p&gt;I was writing a script the other day where I want to return a collection of Services based on the name.&amp;#160; It took me a few minutes to figure out how to do this, so I thought I’d jot it down.&amp;#160; Nothing revolutionary, but I’ve definitely found this pattern to be handy.&lt;/p&gt;  &lt;p&gt;Let’s start with a comma separated list of objects we want to filter by.&amp;#160; In this case I only want to return objects that start with “a”, “c”, “e”, or “g”.&amp;#160; I’ll take that list, and split it into an array.&lt;/p&gt;  &lt;p&gt;&lt;span style="color:green;"&gt;# List we want to filter against     &lt;br /&gt;# Split it into an array      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:purple;"&gt;$filterList &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:maroon;"&gt;'a,c,e,g'&lt;/span&gt;&lt;span style="color:black;"&gt;.Split(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)     &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color:black;"&gt;Next, I’ll generate a collection of objects to try and filter.&amp;#160; I’ll just use a function to make life easy:&lt;/span&gt;&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;# Function to generate a collection of objects to test on
&lt;/span&gt;&lt;span style="color:blue;"&gt;function &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;Create-TestCollection &lt;/span&gt;&lt;span style="color:black;"&gt;{
    &lt;/span&gt;&lt;span style="color:green;"&gt;# Turn this into an object to filter
    &lt;/span&gt;&lt;span style="color:purple;"&gt;$objectList &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:maroon;"&gt;'a,b,c,d,e,f,g'&lt;/span&gt;&lt;span style="color:black;"&gt;.Split(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;$object &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:purple;"&gt;$objectList&lt;/span&gt;&lt;span style="color:black;"&gt;)
    {
        &lt;/span&gt;&lt;span style="color:purple;"&gt;$output &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;new-object &lt;/span&gt;&lt;span style="color:maroon;"&gt;PSObject
        &lt;/span&gt;&lt;span style="color:purple;"&gt;$output &lt;/span&gt;&lt;span style="color:black;"&gt;| &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;add-member &lt;/span&gt;&lt;span style="color:maroon;"&gt;noteproperty Name &lt;/span&gt;&lt;span style="color:purple;"&gt;$object
        
        &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;Write-Output &lt;/span&gt;&lt;span style="color:purple;"&gt;$output 
    &lt;/span&gt;&lt;span style="color:black;"&gt;}
}

&lt;/span&gt;&lt;span style="color:green;"&gt;# Populate the variable to test with our collection of objects
&lt;/span&gt;&lt;span style="color:purple;"&gt;$collection &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;Create-TestCollection
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;

&lt;p&gt;&lt;span style="color:black;"&gt;Now $collection contains a list of objects with a single Name property containing “a”, “b”, “c”, “d”, etc.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="color:black;"&gt;Now list filter $collection using a Where:&lt;/span&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:#5f9ea0;"&gt;Write-Host &lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Objects from the Collection where the Name property exists in an Array&amp;quot;
&lt;/span&gt;&lt;span style="color:green;"&gt;# Filter the collection of objects based on a CSV list
&lt;/span&gt;&lt;span style="color:purple;"&gt;$collection &lt;/span&gt;&lt;span style="color:black;"&gt;| &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;Where &lt;/span&gt;&lt;span style="color:black;"&gt;{&lt;/span&gt;&lt;span style="color:navy;"&gt;$_&lt;/span&gt;&lt;span style="color:black;"&gt;.Name &lt;/span&gt;&lt;span style="color:red;"&gt;-and &lt;/span&gt;&lt;span style="color:purple;"&gt;$filterList &lt;/span&gt;&lt;span style="color:red;"&gt;-eq &lt;/span&gt;&lt;span style="color:navy;"&gt;$_&lt;/span&gt;&lt;span style="color:black;"&gt;.Name }
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And it will return only the objects from our initial comma separated list:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:black;"&gt;Name                                                                                     
----                                                                                     
a                                                                                        
c                                                                                        
e                                                                                        
g    &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This also works with other strings:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;# An array we want to filter
&lt;/span&gt;&lt;span style="color:purple;"&gt;$collection2 &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:maroon;"&gt;'a,d,g,j,m'&lt;/span&gt;&lt;span style="color:black;"&gt;.Split(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)

&lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;Write-Host &lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Strings in an Array where that exist in an Array&amp;quot;
&lt;/span&gt;&lt;span style="color:green;"&gt;# Filter the collection of objects based on a CSV list
&lt;/span&gt;&lt;span style="color:purple;"&gt;$collection2 &lt;/span&gt;&lt;span style="color:black;"&gt;| &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;Where &lt;/span&gt;&lt;span style="color:black;"&gt;{&lt;/span&gt;&lt;span style="color:navy;"&gt;$_ &lt;/span&gt;&lt;span style="color:red;"&gt;-and &lt;/span&gt;&lt;span style="color:purple;"&gt;$filterList &lt;/span&gt;&lt;span style="color:red;"&gt;-eq &lt;/span&gt;&lt;span style="color:navy;"&gt;$_ &lt;/span&gt;&lt;span style="color:black;"&gt;}
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color:black;"&gt;Strings in an Array where that exist in an Array
a
g&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Enjoy…&lt;/p&gt;

&lt;p&gt;David&lt;/p&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&amp;#160;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=320" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author></entry><entry><title>Using PowerShell to Manipulate SQL Server Analysis Services Traces</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2009/05/28/using-powershell-to-manipulate-sql-server-analysis-services-traces.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2009/05/28/using-powershell-to-manipulate-sql-server-analysis-services-traces.aspx</id><published>2009-05-29T02:13:00Z</published><updated>2009-05-29T02:13:00Z</updated><content type="html">&lt;P&gt;I recently started using SSAS Server Traces a lot with SQL Server Analysis Services.&amp;nbsp; This type of trace is basically the same trace you can create with SQL Server Profiler, but it runs without Profiler, uses less resources, and can be persisted across reboots.&amp;nbsp; They’re a really handy tool.&lt;/P&gt;
&lt;P&gt;I started using these when I built some AS monitoring tools based on the “&lt;A href="http://sqlsrvanalysissrvcs.codeplex.com/" target=_blank&gt;Solution for Collecting Analysis Services Performance Data for Performance Analysis&lt;/A&gt;”&amp;nbsp; sample on &lt;A href="http://www.codeplex.com/" target=_blank&gt;CodePlex&lt;/A&gt;.&amp;nbsp; Seriously, totally revolutionized my life (at least the part related to administering complex AS installations and projects).&amp;nbsp; After installing, adapting, and enhancing the functionality there I found I wanted more and easier ways to control AS traces, so I built some PowerShell functions to help manage them.&amp;nbsp; These functions basically just wrap XMLA commands to make them easier to use.&lt;/P&gt;
&lt;P&gt;Here are some sample files I’ll be talking about in this post:&amp;nbsp; &lt;A href="http://cid-0deda612a5d5d66e.skydrive.live.com/self.aspx/Public/Blog/SsasTracesWithPowerShell/SsasTracesWithPowerShell.zip" target=_blank&gt;Download Sample Files&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Don’t worry about copying the sample code out of the post… it’s all included as part of the sample.&lt;/P&gt;
&lt;H1&gt;Creating SSAS Traces&lt;/H1&gt;
&lt;P&gt;You use a XMLA command to create a trace.&amp;nbsp; A trace looks something like this:&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Batch&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.microsoft.com/analysisservices/2003/engine"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns:soap&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.xmlsoap.org/soap/envelope/"&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt;   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Create&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.microsoft.com/analysisservices/2003/engine"&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt;     &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ObjectDefinition&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum4&gt;   4:&lt;/SPAN&gt;       &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Trace&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum5&gt;   5:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;My Trace&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum6&gt;   6:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;My Trace&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum7&gt;   7:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Events&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum8&gt;   8:&lt;/SPAN&gt;           &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Event&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum9&gt;   9:&lt;/SPAN&gt;             &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;EventID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;15&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;EventID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum10&gt;  10:&lt;/SPAN&gt;             &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Columns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum11&gt;  11:&lt;/SPAN&gt;               &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;28&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum12&gt;  12:&lt;/SPAN&gt;               &lt;SPAN style="COLOR:#008000;"&gt;&amp;lt;!-- ... More Columns ... --&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum13&gt;  13:&lt;/SPAN&gt;               &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;3&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum14&gt;  14:&lt;/SPAN&gt;             &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Columns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum15&gt;  15:&lt;/SPAN&gt;           &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Event&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum16&gt;  16:&lt;/SPAN&gt;           &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Event&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum17&gt;  17:&lt;/SPAN&gt;             &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;EventID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;16&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;EventID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum18&gt;  18:&lt;/SPAN&gt;             &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Columns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum19&gt;  19:&lt;/SPAN&gt;               &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;24&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum20&gt;  20:&lt;/SPAN&gt;               &lt;SPAN style="COLOR:#008000;"&gt;&amp;lt;!-- ... More Columns ... --&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum21&gt;  21:&lt;/SPAN&gt;               &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;36&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum22&gt;  22:&lt;/SPAN&gt;             &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Columns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum23&gt;  23:&lt;/SPAN&gt;           &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Event&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum24&gt;  24:&lt;/SPAN&gt;           &lt;SPAN style="COLOR:#008000;"&gt;&amp;lt;!-- ... More events ... --&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum25&gt;  25:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Events&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum26&gt;  26:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Filter&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum27&gt;  27:&lt;/SPAN&gt;           &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;NotLike&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum28&gt;  28:&lt;/SPAN&gt;             &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;37&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ColumnID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum29&gt;  29:&lt;/SPAN&gt;             &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;Application I don't care about events from&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum30&gt;  30:&lt;/SPAN&gt;           &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;NotLike&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum31&gt;  31:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Filter&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum32&gt;  32:&lt;/SPAN&gt;       &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Trace&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum33&gt;  33:&lt;/SPAN&gt;     &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ObjectDefinition&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum34&gt;  34:&lt;/SPAN&gt;   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Create&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum35&gt;  35:&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Batch&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Not the most fun to create by hand, but you could make it happen.&amp;nbsp; However, there is an easier way to come up with the CREATE statement for your trace.&amp;nbsp; Just do the following:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Start up a SQL Server Profiler session and monitor the AS instance you’re working on.&amp;nbsp; You only need to capture the &lt;STRONG&gt;Command Begin&lt;/STRONG&gt; event.&lt;/LI&gt;
&lt;LI&gt;Start up a 2nd instance of SQL Server profiler.&amp;nbsp; Use the GUI to create the trace you’re actually interested in, with all the events, columns, and filters.&amp;nbsp; Then start the trace.&lt;/LI&gt;
&lt;LI&gt;Snag the CREATE XMLA from the 1st Profiler section and save it off.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Now you have XMLA you can use as the base for the trace you want.&amp;nbsp; You’ll want to add a few more elements to the XMLA to make the server trace work though.&amp;nbsp; It will look something like this:&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Batch&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.microsoft.com/analysisservices/2003/engine"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns:soap&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.xmlsoap.org/soap/envelope/"&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt;   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Create&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;mlns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.microsoft.com/analysisservices/2003/engine"&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt;     &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ObjectDefinition&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum4&gt;   4:&lt;/SPAN&gt;       &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Trace&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum5&gt;   5:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;My Trace&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum6&gt;   6:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;My Trace&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum7&gt;   7:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;LogFileName&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;\\MyServer\TraceFiles\MyTrace.trc&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;LogFileName&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum8&gt;   8:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;LogFileAppend&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;LogFileAppend&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum9&gt;   9:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;AutoRestart&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;1&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;AutoRestart&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum10&gt;  10:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;LogFileSize&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;100&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;LogFileSize&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum11&gt;  11:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;LogFileRollover&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;1&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;LogFileRollover&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum12&gt;  12:&lt;/SPAN&gt;         &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Events&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum13&gt;  13:&lt;/SPAN&gt;           &lt;SPAN style="COLOR:#008000;"&gt;&amp;lt;!-- ... The rest of the Create statement you just generated ... --&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;There are just a few extra fields there.&amp;nbsp; Here’s what they’re used for:&lt;/P&gt;
&lt;TABLE cellSpacing=0 cellPadding=2&gt;

&lt;TR&gt;
&lt;TD&gt;LogFileName&lt;/TD&gt;
&lt;TD&gt;Name of the log file.&amp;nbsp; Must end in .trc.&amp;nbsp; &lt;STRONG&gt;The AS Service Account must have permission to write to the directory.&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;LogFileAppend&lt;/TD&gt;
&lt;TD&gt;0 for Overwrite, 1 for Append.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;AutoRestart&lt;/TD&gt;
&lt;TD&gt;0 for No, 1 to restart when the server restarts.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;LogFileSize&lt;/TD&gt;
&lt;TD&gt;Size in MB.&amp;nbsp; The log will roll over when it reaches this size.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;LogFileRollover&lt;/TD&gt;
&lt;TD&gt;1 means create a new log file (it appends 1, 2, 3, etc. for each new log) when you reach the LogFileSize.&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;
&lt;H1&gt;Deleting SSAS Traces&lt;/H1&gt;
&lt;P&gt;So, we’ve created a trace that auto restarts.&amp;nbsp; How do you get rid of it?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Batch&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.microsoft.com/analysisservices/2003/engine"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns:soap&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.xmlsoap.org/soap/envelope/"&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt;   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Delete&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.microsoft.com/analysisservices/2003/engine"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns:soap&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;="http://schemas.xmlsoap.org/soap/envelope/"&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt;     &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Object&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum4&gt;   4:&lt;/SPAN&gt;       &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;TraceID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;My Trace&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;TraceID&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum5&gt;   5:&lt;/SPAN&gt;     &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Object&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum6&gt;   6:&lt;/SPAN&gt;   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Delete&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum7&gt;   7:&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Batch&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;SSAS Trace PowerShell Library&lt;/H1&gt;
&lt;P&gt;I found that I wanted a convenient way to see what traces were running on a server, create them, delete them, and flush them (i.e., close out the current trace and create a new one, so you can process or otherwise work with events that were just logged).&amp;nbsp; I have included two versions of my library in this sample.&amp;nbsp; This first (SsasTraceLibrary.ps1) runs with PowerShell V1.&amp;nbsp; The second (SsasTraceV2Library.ps1) is basically identical, but uses function header and parameter functionality from PowerShell V2 CTP3.&amp;nbsp; I keep the V1 version around to deploy to servers (more on this later), but load the V2 in my environment to take advantage of the examples, help, and all of the other V2 goodness.&amp;nbsp; I would encourage you to go with the V2 version, as it includes easy to use descriptions, examples, and better parameter help.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I created the following functions as part of this library:&lt;/P&gt;
&lt;TABLE cellSpacing=0 cellPadding=2&gt;

&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;Function&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Get-SsasTrace&lt;/TD&gt;
&lt;TD&gt;Get details of a specific trace&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Get-SsasTraceExists&lt;/TD&gt;
&lt;TD&gt;Check if a specific trace exists&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Get-SsasTraces&lt;/TD&gt;
&lt;TD&gt;Get all traces running on a server&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Start-SsasTrace&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Start a new trace based on a stored template&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Delete-SsasTrace&lt;/TD&gt;
&lt;TD&gt;Delete an existing trace&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Flush-SsasTrace&lt;/TD&gt;
&lt;TD&gt;Stop/Restart an existing trace&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;
&lt;H1&gt;A Sample Function&lt;/H1&gt;
&lt;P&gt;Most of the functions in this library require the SSAS assemblies&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; # Load Required SSAS Assemblies&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt; $asm = [System.Reflection.Assembly]::LoadWithPartialName(&lt;SPAN style="COLOR:#006080;"&gt;"Microsoft.AnalysisServices"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt; $asm = [System.Reflection.Assembly]::LoadWithPartialName(&lt;SPAN style="COLOR:#006080;"&gt;"Microsoft.AnalysisServices.Xmla"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;You typically follow the pattern of connecting to a server, executing XMLA command, outputting the results, and disconnecting from the server.&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; # Connect to the server&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt; $xmlaClient = &lt;SPAN style="COLOR:#0000ff;"&gt;new&lt;/SPAN&gt;-&lt;SPAN style="COLOR:#0000ff;"&gt;object&lt;/SPAN&gt; Microsoft.AnalysisServices.Xmla.XmlaClient&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt; $xmlaClient.Connect($serverName)&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum4&gt;   4:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum5&gt;   5:&lt;/SPAN&gt; $xmlStringResult = &lt;SPAN style="COLOR:#006080;"&gt;""&lt;/SPAN&gt; # Initialize the variable so that it can be passed by [&lt;SPAN style="COLOR:#0000ff;"&gt;ref&lt;/SPAN&gt;]&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum6&gt;   6:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum7&gt;   7:&lt;/SPAN&gt; # Fire off the discover command to &lt;SPAN style="COLOR:#0000ff;"&gt;return&lt;/SPAN&gt; all traces&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum8&gt;   8:&lt;/SPAN&gt; $xmlaClient.Discover(&lt;SPAN style="COLOR:#006080;"&gt;"DISCOVER_TRACES"&lt;/SPAN&gt;, &lt;SPAN style="COLOR:#006080;"&gt;""&lt;/SPAN&gt;, &lt;SPAN style="COLOR:#006080;"&gt;""&lt;/SPAN&gt;, [&lt;SPAN style="COLOR:#0000ff;"&gt;ref&lt;/SPAN&gt;] $xmlStringResult, 0, 1, 1)&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum9&gt;   9:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum10&gt;  10:&lt;/SPAN&gt; # Convert the result to XML to make it easier to deal with&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum11&gt;  11:&lt;/SPAN&gt; [xml]$xmlResult = $xmlStringResult&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum12&gt;  12:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum13&gt;  13:&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;return&lt;/SPAN&gt; $xmlResult.&lt;SPAN style="COLOR:#0000ff;"&gt;return&lt;/SPAN&gt;.Root.row&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum14&gt;  14:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum15&gt;  15:&lt;/SPAN&gt; # Disconnect the session&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum16&gt;  16:&lt;/SPAN&gt; $xmlaClient.Disconnect()&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;Occasionally we want to work with the XML result set a little bit to verify the results, but usually nothing major. 
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; # Create the trace&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt;  $xmlaClient.Execute($createTraceXmla, &lt;SPAN style="COLOR:#006080;"&gt;""&lt;/SPAN&gt;, [&lt;SPAN style="COLOR:#0000ff;"&gt;ref&lt;/SPAN&gt;] $xmlStringResult, 0, 1)&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt;  &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum4&gt;   4:&lt;/SPAN&gt;  # Convert the result to XML to make it easier to deal with&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum5&gt;   5:&lt;/SPAN&gt;  [xml]$xmlResult = $xmlStringResult&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum6&gt;   6:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum7&gt;   7:&lt;/SPAN&gt;  $xmlResultException = $xmlResult.&lt;SPAN style="COLOR:#0000ff;"&gt;return&lt;/SPAN&gt;.results.root | ? {$_.Exception -ne $&lt;SPAN style="COLOR:#0000ff;"&gt;null&lt;/SPAN&gt;}&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum8&gt;   8:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum9&gt;   9:&lt;/SPAN&gt;  &lt;SPAN style="COLOR:#0000ff;"&gt;if&lt;/SPAN&gt; ($xmlResultException -ne $&lt;SPAN style="COLOR:#0000ff;"&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum10&gt;  10:&lt;/SPAN&gt;  {&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum11&gt;  11:&lt;/SPAN&gt;    &lt;SPAN style="COLOR:#0000ff;"&gt;throw&lt;/SPAN&gt; $xmlResultException.Messages.Error.Description&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum12&gt;  12:&lt;/SPAN&gt;  }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The PowerShell is really just a wrapper around XMLA commands… it just makes it easier to use.&lt;/P&gt;
&lt;H1&gt;Using the SsasTraceLibrary.ps1 in the Dev Environment&lt;/H1&gt;
&lt;P&gt;I’ve found I use these functions a decent bit as part of my day to day operations.&amp;nbsp; I have the following command in my Profile.ps1 to load all the script files ending with “Library.ps1” in a given directory… I store command libraries like SsasTraceLibrary.ps1 in this folder, so they’re automatically loaded when PowerShell starts.&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; $powerShellScriptsDirectory = "c:\PowerShellScripts\"&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt; if (!$powerShellScriptsDirectory.EndsWith("\")) { $powerShellScriptsDirectory += "\" }&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum4&gt;   4:&lt;/SPAN&gt; Write-Host Welcome $Env:Username&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum5&gt;   5:&lt;/SPAN&gt;     &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum6&gt;   6:&lt;/SPAN&gt; foreach($filename in Get-ChildItem $powerShellScriptsDirectory* -Include "*Library.ps1")&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum7&gt;   7:&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum8&gt;   8:&lt;/SPAN&gt;     &amp;amp; $filename &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum9&gt;   9:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Now, you just have to start PowerShell and run a command like&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; Get-SsasTraces LocalHost&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;to return all the traces running on your local machine.&lt;/P&gt;
&lt;H1&gt;Using the SsasTraceLibrary.ps1 in the Server Environment&lt;/H1&gt;
&lt;P&gt;I mentioned earlier that I also deploy this script to my various AS instances.&amp;nbsp; I do this because various people need to work on the machine, and I want an easy (read: single click) way to do things like start/stop/flush the trace on the machine.&amp;nbsp; This also makes it easy to automate these actions as part of an ETL or job.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I use a batch file with the following commands:&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; ECHO Setting System Variables&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt; SET DATA_COLLECTION_PATH=[INSTALLDIR]&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt; SET SSAS_TRACE_UNC=\\[OLAPSERVER]\[TRACE_FILE_SHARE_NAME]\[OLAPSERVER]_SsasPerformanceErrorMonitoringTrace.trc&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum4&gt;   4:&lt;/SPAN&gt; SET SSAS_SERVER=[OLAPSERVER]&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum5&gt;   5:&lt;/SPAN&gt; SET SSAS_TRACE_FILE_SIZE_MB=100&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum6&gt;   6:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum7&gt;   7:&lt;/SPAN&gt; ECHO Running Commands&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum8&gt;   8:&lt;/SPAN&gt; REM: Create the Data Collection Trace File&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum9&gt;   9:&lt;/SPAN&gt; PowerShell -Command "&amp;amp; {&amp;amp;'%DATA_COLLECTION_PATH%\DataCollection\SsasTraceLibrary.ps1'; Start-SsasTrace -ServerName '%SSAS_SERVER%' -TraceID 'Analysis Services Performance and Error Trace' -TraceName 'Analysis Services Performance and Error Trace' -UncFileName '%SSAS_TRACE_UNC%' -FileSizeInMB '%SSAS_TRACE_FILE_SIZE_MB%'}"&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum10&gt;  10:&lt;/SPAN&gt; ECHO Script Complete!&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum11&gt;  11:&lt;/SPAN&gt; pause&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;The parameters encased in ‘[‘ and ‘]’ are replaced whenever the scripts are deployed to a server with variables specific to their environment.&amp;nbsp; Someone can now just run one of the batch files to Start, Stop, or Flush a trace on the server.&amp;nbsp; I also typically call the file to Flush the trace file as part of my Processing job, so I can immediately load the results into a database for analysis.&lt;/P&gt;
&lt;H1&gt;Performance&lt;/H1&gt;
&lt;P&gt;So a question that will always come up when running traces like this is the amount of overhead they require.&amp;nbsp; And of course they require some, both in terms of CPU to log the events and Disk to write them.&amp;nbsp; I’ve typically seen this to be in the single digits of CPU, and I always write to a location where there isn’t disk contention.&amp;nbsp; You’ll of course want to test in your environment, but I haven’t seen a performance hit that makes the ROI of running these traces not worth it.&amp;nbsp; If you’re concerned, you could consider turning them on/off as part of a scheduled job, or just running them on an as needed basis.&amp;nbsp; Personally, I’ve seen a huge benefit from running them 24/7 as I capture detailed processing information (how long each step takes), query information (who is doing what, how bad, and how often) and error information (some errors that aren’t caught in any other logs are captured via traces).&lt;/P&gt;
&lt;H1&gt;Next Steps&lt;/H1&gt;
&lt;P&gt;Takes these libraries and modify to your heart’s content.&amp;nbsp; I use a template in the scripts that is my standard, but you can replace it, add more, or whatever you want to do.&amp;nbsp; You could also add a little bit better error handling if desired.&lt;/P&gt;
&lt;H1&gt;Conclusion&lt;/H1&gt;
&lt;P&gt;So, included here are some functions that will help you with some basic functionality around SSAS traces.&amp;nbsp; Feel free to post back if you have any ideas for improvements or things that would be cool to do.&lt;/P&gt;
&lt;P&gt;Cheers,&lt;/P&gt;
&lt;P&gt;David&lt;/P&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=314" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="PowerShell" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/PowerShell/default.aspx" /><category term="Analysis Services" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Analysis+Services/default.aspx" /></entry><entry><title>SQL Server Analysis Services Projects with Multiple Developers</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2009/05/25/sql-server-analysis-services-projects-with-multiple-developers.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2009/05/25/sql-server-analysis-services-projects-with-multiple-developers.aspx</id><published>2009-05-26T00:58:00Z</published><updated>2009-05-26T00:58:00Z</updated><content type="html">&lt;P&gt;A topic that often comes up when discussing enterprise level development with SSAS is how to have multiple developers work on the same project at the same time.&amp;nbsp; This issue doesn’t come up for many installations… a lot of teams get away with just having a single person working on their OLAP capabilities.&amp;nbsp; However, for a decent sized implementation, you’re going to want to have more than one person working on the solution at the same time.&amp;nbsp; I’ll be discussing some of the issues, workarounds, and tools you can use to make concurrent SSAS development easier.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://cid-0deda612a5d5d66e.skydrive.live.com/self.aspx/Public/Blog/Concurrent%20SSAS%20Development/ConcurrentSsasDevelopmentSample.zip" target=_blank&gt;Here’s a link to the source code from later in the post if that’s all you’re looking for.&lt;/A&gt;&lt;/P&gt;
&lt;H1&gt;Background&lt;/H1&gt;
&lt;P&gt;Analysis Services objects (cubes, dimensions, roles, etc.) are manipulated either programmatically or in Visual Studio (Visual Studio is the normal method). These objects are persisted by serializing them to XML. When you deploy an Analysis Services database, you either connect directly to an instance of Analysis Services, or you save off XMLA scripts/files that can be used to create the database on a remote server.&lt;/P&gt;
&lt;P&gt;If you have a single person working on an AS project, you don’t have a problem.&amp;nbsp; If you’re using source control with &lt;EM&gt;exclusive locks&lt;/EM&gt; (i.e., only one person can edit a file at a given time) you can have multiple people working on the same solution, but not on the same object at the same time.&amp;nbsp; This is somewhat complicated by the fact that modifying one object (such as a dimension) may require a change in associated objects (such as a cube where it is included).&amp;nbsp; You’re still fairly limited in the amount of work you can do concurrently.&lt;/P&gt;
&lt;P&gt;The way to have multiple developers working concurrently is to use source control with&lt;EM&gt; non-exclusive&lt;/EM&gt; check-outs, so multiple people can work on each file at the same time.&amp;nbsp; The down side is that you eventually have to &lt;EM&gt;merge&lt;/EM&gt; the copies each person is working on back together.&amp;nbsp; Since the SSAS files are large, complicated XML documents this isn’t necessarily an easy task.&amp;nbsp; Most source control systems will attempt to automatically merge non-conflicting changes, but this usually doesn’t work very well with SSAS files (for reasons I’ll go into in just a minute).&amp;nbsp; There are, however, some things we can do to make the task a bit easier.&lt;/P&gt;
&lt;H1&gt;Challenges with Merging SSAS Files&lt;/H1&gt;
&lt;P&gt;When SSAS objects are persisted to XML, they contain structural information about the objects (which is required) as well as environmental and formatting metadata (which can be helpful in Visual Studio, but is not required for the solution to work correctly when deployed). The environment and formatting metadata elements tend to be extremely volatile, and vary for each developer. Stripping the volatile fields from the XML files will make the merge process easier without affecting the cubes and dimensions that are deployed.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#808080&gt;&lt;EM&gt;Ex. A developer checks out “Adventure Works.cube” , fixes an error in a Description field, then deploys the cube to test. When he checks the file in, he will have to merge large XML file. He has only changed one line, but large sections of the file will be different from copies checked out to other developers due to metadata capturing the state of Visual Studio and the local AS server. By stripping this metadata, the developer can focus on merging the one change that matters without having to verify every other change in the file.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2&gt;SSAS Elements that can be Removed&lt;/H2&gt;
&lt;P&gt;The following represent the environment and formatting metadata elements that are persisted in Analysis Services files. These fields can all be safely stripped from Analysis Services files prior to merging to remove the large number of unimportant conflicts that normally occur.&lt;/P&gt;
&lt;TABLE cellSpacing=0 cellPadding=0&gt;

&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;B&gt;Element&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;B&gt;Description&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;B&gt;CreatedTimestamp&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;When the object was created.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;B&gt;LastSchemaUpdate&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;When the schema was last pushed to a SSAS DB. Updated when an object is deployed using the development environment.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;B&gt;LastProcessed&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;When the object was last processed. Updated when an object is processed using the development environment.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;B&gt;State&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;The state (processed, unprocessed) of the object. Updated based on actions in the development environment.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;B&gt;CurrentStorageMode&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;The current storage mode of the object. Updated based on actions in the development environment.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;B&gt;Annotations&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Annotations and metadata around the positioning of various objects (such as tables) on the canvas. This data is usually updated every time an object is opened. &lt;B&gt;This element does have a user impact&lt;/B&gt;. The annotations section is where the layout of DSV objects is stored, and there is value in arranging those objects. However, this is where most conflicts occur, so it is often worth removing this section and losing custom positioning.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;B&gt;design-time-name&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;A GUID assigned to each object. It is generated when an object is created (either by a user in BIDS or by reverse engineering an existing database.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;
&lt;H2&gt;Programmatically Removing SSAS Elements&lt;/H2&gt;
&lt;P&gt;I’ve create a PowerShell function 'Clean-SsasProject’ that will iterate over all writable SSAS objects in a directory and remove the volatile elements by manipulating the XML.&amp;nbsp; The function will make a copy of every file it modifies.&amp;nbsp; It is written using using PowerShell v2 CTP3, but should be easy to back port if you need to.&amp;nbsp; I’ve included a commented out section that will process the .ASDatabase file as well… this is used for a particular scenario on our team, just including it in case it is handy for anybody.&amp;nbsp; Use the $WhatIf and $Debug flags to know what the function will do before you do it for real.&amp;nbsp; This code is geared to the project I’m working on currently, and you may want to modify it to meet your precise needs.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I would recommend creating a backup of your solution before you try this script, just in case.&amp;nbsp; I’ve been using this for awhile with no ill effects, but you could have a scenario I never dreamed about, so…&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;***DO THIS AT YOUR OWN RISK.&amp;nbsp; IT WORKS ON MY MACHINE.&amp;nbsp; ***&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Consider comparing the cleaned XML side by side with the original to make sure this process works for you… it’s worked fine for every project I’ve used it on, but better safe than sorry.&lt;/P&gt;
&lt;P&gt;You can &lt;A href="http://cid-0deda612a5d5d66e.skydrive.live.com/self.aspx/Public/Blog/Concurrent%20SSAS%20Development/ConcurrentSsasDevelopmentSample.zip" target=_blank&gt;download the source here&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Using Clean-SsasProject (for an individual)&lt;/H2&gt;
&lt;P&gt;I have my environment configured to load all files with the pattern ‘*Library.ps1’ when PowerShell loads via the following script in my ‘Profile.ps1’ file:&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; $powerShellScriptsDirectory = &lt;SPAN style="COLOR:#006080;"&gt;"c:\PowerShellScripts\"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;if&lt;/SPAN&gt; (!$powerShellScriptsDirectory.EndsWith(&lt;SPAN style="COLOR:#006080;"&gt;"\"&lt;/SPAN&gt;)) { $powerShellScriptsDirectory += &lt;SPAN style="COLOR:#006080;"&gt;"\"&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum4&gt;   4:&lt;/SPAN&gt; Write-Host Welcome $Env:Username&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum5&gt;   5:&lt;/SPAN&gt;     &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum6&gt;   6:&lt;/SPAN&gt; foreach($filename &lt;SPAN style="COLOR:#0000ff;"&gt;in&lt;/SPAN&gt; Get-ChildItem $powerShellScriptsDirectory* -Include &lt;SPAN style="COLOR:#006080;"&gt;"*Library.ps1"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum7&gt;   7:&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum8&gt;   8:&lt;/SPAN&gt;     &amp;amp;&lt;SPAN style="COLOR:#008000;"&gt; $filename &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum9&gt;   9:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;I store the .ps1 file with Clean-SsasProject and the other functions it depends on in my PowerShell scripts directory, so it’s loaded every time the PowerShell environment loads.&amp;nbsp; You can then just run ‘Clean-SsasProject’ from the PowerShell prompt.&amp;nbsp; I also have a .Cmd file in my path to automatically clean my normal SSAS project.&amp;nbsp; It just uses the following commands:&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; SET SSAS_PROJECT_LOCATION=C:\Source\MyProject&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt; PowerShell -Command &lt;SPAN style="COLOR:#006080;"&gt;"Clean-SsasProject %SSAS_PROJECT_LOCATION%"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Running that command file will strip the volatile fields out of any file in the directory that is writable (i.e., checked-out of my source control system).&lt;/P&gt;
&lt;H2&gt;Using Clean-SsasProject (for a team)&lt;/H2&gt;
&lt;P&gt;This tool is designed to work when every team member does the following:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Check-out all files required for a change.&amp;nbsp; Remember that modifying one object may require that another object be updated, so make sure and check out all objects that can possibly be affected). &lt;/LI&gt;
&lt;LI&gt;Make the change. &lt;/LI&gt;
&lt;LI&gt;Clean the files. &lt;/LI&gt;
&lt;LI&gt;Merge/Resolve conflicts. &lt;/LI&gt;
&lt;LI&gt;Build project output (if required for your solution… I’ll be posting on how to easy project builds/deployments in a few days) &lt;/LI&gt;
&lt;LI&gt;Check-in all files required for a change. &lt;/LI&gt;&lt;/OL&gt;
&lt;H1&gt;General Best Practices&lt;/H1&gt;
&lt;P&gt;There are some other general things you can do to make concurrent development a little bit easier (most of these go for software development in general, not just Analysis Services).&amp;nbsp; If you’ve attempted to have multiple developers work on a project, you’re probably doing all these things already.&amp;nbsp; Remember that it is always faster and easier not to have to merge when you don’t have to.&lt;/P&gt;
&lt;H2&gt;Do Separate AS Cubes and Databases by Subject Area&lt;/H2&gt;
&lt;P&gt;Including only related objects in a cube/database is a standard best practice. This approach avoids potential performance issues, increases manageability and maintainability, and improves the presentation and understandability for the end user. This design pattern also lessens the chance that multiple developers will need to be working on the same object at the same time.&lt;/P&gt;
&lt;H2&gt;Don’t Combine Unrelated Attributes in a Single Dimension&lt;/H2&gt;
&lt;P&gt;Including unrelated attributes in a single dimension causes problems with performance, maintainability, and general use of the solution. Including unrelated attributes also promotes conflicts by increasing the chance that developers working on unrelated areas will need to work on the same file.&lt;/P&gt;
&lt;H2&gt;Do Communicate and Schedule Work for Minimum Conflicts&lt;/H2&gt;
&lt;P&gt;Make sure to communicate with other developers to avoid working on the same objects when possible. If you need to work on the same object, ensure the design changes are compatible and that there is no way to optimize the work.&lt;/P&gt;
&lt;P&gt;Major changes that will dramatically affect source merging should be performed with an exclusive lock on the file.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT color=#808080&gt;Ex. A developer wants to re-order the 200 calculated members in the calculate script. The developer should wait until everyone else has submitted their changes, then make the change and submit it.&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;Do Check-out late and Check-in Early&lt;/H2&gt;
&lt;P&gt;Minimize the time you keep AS files checked out. While it may take some time to develop new functionality for AS (modifying the source database, creating an ETL to load the database from a source system, etc.) the work in AS is typically fairly quick to do if properly designed and prepared for. Complete the design and other development before checking out the Analysis Services files.&lt;/P&gt;
&lt;H2&gt;Do Use Tools to Help Merge&lt;/H2&gt;
&lt;P&gt;Use a side-by-side differencing tool to compare and merge different versions of Analysis Services files. A good diffing tool will have features to make this operation significantly easier. Consider using a tool such as &lt;A href="http://www.scootersoftware.com/" target=_blank&gt;Beyond Compare&lt;/A&gt; for this task.&amp;nbsp; You can use this process to verify that Clean-SsasProject works for your solution the first time you it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Next Steps&lt;/H1&gt;
&lt;P&gt;Modify the provided source/process to meet your needs and environment.&amp;nbsp; There is no 100% “right way" to handle development like this… everyone’s situation will be just a little bit different, and require a little bit of customization.&amp;nbsp; I’m just trying to give you the tools to make it a little bit easier.&lt;/P&gt;
&lt;H1&gt;Conclusion&lt;/H1&gt;
&lt;P&gt;That’s all there is.&amp;nbsp; If you use the tools, techniques, and approach above it should make developing Analysis Services solutions with multiple developers a bit easier for for you.&amp;nbsp; You’ll still have some of the headaches normally associated with this type of work, but hopefully you’ll have an easier time of it.&lt;/P&gt;
&lt;P&gt;Cheers,&lt;/P&gt;
&lt;P&gt;David&lt;/P&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=312" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="Analysis Services" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Analysis+Services/default.aspx" /><category term="Development Patterns" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Development+Patterns/default.aspx" /></entry><entry><title>SQL Database Tuning Advisor Output Renamer</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2009/05/19/sql-database-tuning-advisor-output-renamer.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2009/05/19/sql-database-tuning-advisor-output-renamer.aspx</id><published>2009-05-19T05:28:00Z</published><updated>2009-05-19T05:28:00Z</updated><content type="html">&lt;P&gt;I’ve uploaded the ‘Database Tuning Advisor Output Renamer’ at &lt;A href="http://dtaoutputrenamer.codeplex.com/" target=_blank&gt;http://DtaOutputRenamer.codeplex.com/&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;OK… so Friday marked the first day I’ve ever gotten sunburned while coding.&amp;nbsp; I had a little bit of free time while at an outdoor event, and whipped up a a little utility to help apply standards to to DTA recommendations.&lt;/P&gt;
&lt;P&gt;I use the SQL Database Tuning Advisor (DTA) a lot to generate basic recommendations for indexes and statistics based on a workload.&amp;nbsp; In my team, we store all index and statistics creation scripts in .SQL files, which are then run as part of our deployments.&amp;nbsp; We use a standard naming convention for each of the objects to enhance the maintainability.&lt;/P&gt;
&lt;P&gt;Last week I ran the DTA against a workload I generated based on running reports on some new schema… not surprisingly, quite a few recommendations were generated.&amp;nbsp; It occurred to me my time could be better spent doing something besides renaming 50 database objects based on their definitions.&amp;nbsp; I decided to write a small application to help change the default names (such as ‘_dta_index_SsasProcessingRunArchive_c_7_1677965054__K10’) to something a little more user friendly (like ‘IX_dbo_SsasProcessingRunArchive_ObjectType_EventClass_SessionID_I_StartTime’).&amp;nbsp; You’ll want to modify the application to match your local coding standards, but it should be pretty straight forward to do.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;This application only handles a few cases, but does cover Clustered/Non-Clustered Indexes (with and without INCLUDE columns) and Statistics.&amp;nbsp; It should be easy to extend it if you need to.&amp;nbsp; This app is just something I whipped up in an hour or two, so it isn’t the most robust thing ever created. &lt;/P&gt;
&lt;P&gt;I created the following regex (remove the line breaks… I just used those for presentation) to capture the index name, table name, and column/include lists for the indexes:&lt;/P&gt;
&lt;DIV&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; CREATE\s(?&amp;lt;&lt;SPAN style="COLOR:#008000;"&gt;NonClustered&amp;gt;NON)?CLUSTERED\sINDEX\s\[(?&amp;lt;IndexName&amp;gt;.*?)\].*?ON\s\&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt; [(?&amp;lt;&lt;SPAN style="COLOR:#008000;"&gt;Schema&amp;gt;.*?)\]\.\[(?&amp;lt;Table&amp;gt;.*?)\].*?\((?&amp;lt;ColumnList&amp;gt;.*?)\)\s*?(?:INCLUDE\s&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum3&gt;   3:&lt;/SPAN&gt; \((?&amp;lt;&lt;SPAN style="COLOR:#008000;"&gt;IncludeList&amp;gt;.*?)\))??\s*?(?:WITH\s*?\(.*?\)\s*?ON\s\[.*?\])&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;I created the following regex (remove the line breaks… I just used those for presentation) to capture the statistics name, table name, and column list for the statistics:&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; CREATE\sSTATISTICS\s\[(?&amp;lt;&lt;SPAN style="COLOR:#008000;"&gt;StatisticsName&amp;gt;.*?)\].*?ON\s\[(?&amp;lt;Schema&amp;gt;.*?)\]&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum2&gt;   2:&lt;/SPAN&gt; \.\[(?&amp;lt;Table&amp;gt;.*?)\].*?\((?&amp;lt;ColumnList&amp;gt;.*?)\&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;I then just update the object names with a new name created based column lists and such.&amp;nbsp; I also through in the functionality to strip ‘go’ statements from input.&lt;/P&gt;
&lt;P&gt;Enjoy…&lt;/P&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=305" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="Automation Tools" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Automation+Tools/default.aspx" /><category term="Performance Tuning" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Performance+Tuning/default.aspx" /><category term="SQL Server" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>PowerShell Script to reset the local instance of SQL Server</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2009/04/06/powershell-script-to-reset-the-local-instance-of-sql-server.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2009/04/06/powershell-script-to-reset-the-local-instance-of-sql-server.aspx</id><published>2009-04-06T14:37:00Z</published><updated>2009-04-06T14:37:00Z</updated><content type="html">&lt;P&gt;I use virtual machines a lot for development and testing.&amp;nbsp; I typically start with a sysprepped base image that I then initialize every time I need a new machine.&amp;nbsp; One issue is that SQL Server doesn’t know it has been sysprepped… if you execute&lt;/P&gt;
&lt;DIV id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:'Courier New', courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;&lt;SPAN style="COLOR:#606060;" id=lnum1&gt;   1:&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;SELECT&lt;/SPAN&gt; &lt;SPAN style="COLOR:#cc6633;"&gt;@@SERVERNAME&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You will get the name of the machine from when you installed SQL Server.&lt;/P&gt;
&lt;P&gt;I use the following PowerShell script to reset the name of the local instance to the current name of the machine:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:green;"&gt;# Load Assemblies we need to access SMO
&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$asm &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;reflection.assembly&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]::&lt;/SPAN&gt;&lt;SPAN style="COLOR:#8b4513;"&gt;LoadWithPartialName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Microsoft.SqlServer.ConnectionInfo"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)
&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$asm &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;reflection.assembly&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]::&lt;/SPAN&gt;&lt;SPAN style="COLOR:#8b4513;"&gt;LoadWithPartialName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Microsoft.SqlServer.Smo"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)
&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$asm &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;reflection.assembly&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]::&lt;/SPAN&gt;&lt;SPAN style="COLOR:#8b4513;"&gt;LoadWithPartialName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Microsoft.SqlServer.SmoEnum"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)
&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$asm &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;reflection.assembly&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]::&lt;/SPAN&gt;&lt;SPAN style="COLOR:#8b4513;"&gt;LoadWithPartialName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Microsoft.SqlServer.SqlEnum"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)
&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$asm &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;reflection.assembly&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]::&lt;/SPAN&gt;&lt;SPAN style="COLOR:#8b4513;"&gt;LoadWithPartialName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Microsoft.SqlServer.WmiEnum"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)
&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$asm &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;[&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;reflection.assembly&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]::&lt;/SPAN&gt;&lt;SPAN style="COLOR:#8b4513;"&gt;LoadWithPartialName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Microsoft.SqlServer.SqlWmiManagement"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:green;"&gt;##############################################################################
# Description:
# Change the name SQL Server instance name (stored inside SQL Server) to the name 
# of the machine.  When a machine is unboxed after being sysprepped, it will still
# use the original SQL Server name as the instance name for SQL Server
# 
# Input:
#
# Output:
# 
# Author: DDarden
# Date  : 200904030748
# 
# Change History
# Date        Author          Description
# --------    --------------  -------------------------------------------------
# 
###############################################################################
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;function &lt;/SPAN&gt;&lt;SPAN style="COLOR:#5f9ea0;"&gt;global:Set-SqlServerInstanceName&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;{
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:#5f9ea0;"&gt;Write &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Renaming SQL Server Instance"
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$smo &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;'Microsoft.SqlServer.Management.Smo.'
    
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$server &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:#5f9ea0;"&gt;new-object &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$smo &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;'server'&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;) .
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$database &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$server&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Databases[&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"master"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;]
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$mc &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:#5f9ea0;"&gt;new-object &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$smo &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;'WMI.ManagedComputer'&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;) .
    
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$newServerName &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$mc&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Name
    
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$database&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.ExecuteNonQuery(&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"EXEC sp_dropserver @@SERVERNAME"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:purple;"&gt;$database&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.ExecuteNonQuery(&lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"EXEC sp_addserver '$newServerName', 'local'"&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;)
    
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:#5f9ea0;"&gt;Write-Host &lt;/SPAN&gt;&lt;SPAN style="COLOR:maroon;"&gt;"Renamed server to '$newServerName'`n"
&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:green;"&gt;# Set the SQL Server instance name to the current machine name
# MSSQLSERVER service needs to be restarted after this change&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:green;"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;Set-SqlServerInstanceName&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=297" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="PowerShell" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/PowerShell/default.aspx" /><category term="SQL Server" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>Analysis Services Error: The attribute key cannot be found when processing a dimension</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2009/01/05/analysis-services-error-the-attribute-key-cannot-be-found-when-processing-a-dimension.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2009/01/05/analysis-services-error-the-attribute-key-cannot-be-found-when-processing-a-dimension.aspx</id><published>2009-01-06T02:36:00Z</published><updated>2009-01-06T02:36:00Z</updated><content type="html">&lt;P&gt;I was processing a SSAS database to test some aggregations today, and I noticed some errors and came across some unexpected behavior.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;When I was processing the User dimension (among others), I got an error similar to the following:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;Errors in the OLAP storage engine: The attribute key cannot be found when processing: Table: 'dbo_DimUser', Column: 'Country', Value: 'US'; Table: 'dbo_DimUser', Column: 'Region', Value: 'NY'; Table: 'dbo_DimUser', Column: 'City', Value: 'Albany '. The attribute is 'City'. Errors in the OLAP storage engine: The attribute key was converted to an unknown member because the attribute key was not found. Attribute User of Dimension: User from Database: OfficeLive, Record: 1234.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Now, if I was processing a cube and saw this, I would immediately think a referential integrity issue.&amp;nbsp; Not so in this case.&amp;nbsp; So I looked at the missing key value, in this case ‘Albany ‘.&amp;nbsp; The string had some trailing spaces… but that shouldn’t be a big deal, since the Key property in BIDS was set to perform right trimming.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;But with a little sleuthing, I found something interesting:&amp;nbsp; the error message was &amp;lt;gasp&amp;gt; a lie!&amp;nbsp; When I looked at the database, it wasn’t a trailing space (which is what appeared in the error message), it was a trailing tab.&amp;nbsp; The character were automagically converted in the error message.&amp;nbsp; So it wasn’t getting trimmed and matching the already existing ‘Albany’ key.&amp;nbsp; The weird thing was that it was just failing, because of the tab character in the key.&amp;nbsp;&amp;nbsp; I actually would have expected to see two entries for ‘Albany’ (one with some whitespace, if you looked hard enough) in the dimension.&amp;nbsp; I actually prefer this, but it did take me a little by surprise…&lt;/P&gt;
&lt;P&gt;Cheers,&lt;/P&gt;
&lt;P&gt;David&lt;/P&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=259" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="Analysis Services" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Analysis+Services/default.aspx" /><category term="Bugs" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Bugs/default.aspx" /></entry><entry><title>New Features for Visual Studio Team System 2008 Database Edition</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2008/12/11/new-features-for-visual-studio-team-system-2008-database-edition.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2008/12/11/new-features-for-visual-studio-team-system-2008-database-edition.aspx</id><published>2008-12-12T02:24:57Z</published><updated>2008-12-12T02:24:57Z</updated><content type="html">&lt;p&gt;Today I was creating a new project in Studio Team System 2008 Database Edition, and needed to import a SQL Server 2008 DB.&amp;#160; I went looking for a SQL Server 2008 template for Visual Studio… instead, I found the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=BB3AD767-5F69-4DB9-B1C9-8F55759846ED&amp;amp;displaylang=en"&gt;Microsoft® Visual Studio Team System 2008 Database Edition GDR&lt;/a&gt; that was release a few weeks ago.&amp;#160; With this General Distribution Release (GDR), you get support for SQL Server 2008 as well as a number of cool features.&amp;#160; If you’re using VSTS Database Edition, definitely check it out…&lt;/p&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=253" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author></entry><entry><title>SQL Load Generator Tool</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2008/12/09/sql-load-generator-tool.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2008/12/09/sql-load-generator-tool.aspx</id><published>2008-12-10T02:35:00Z</published><updated>2008-12-10T02:35:00Z</updated><content type="html">&lt;P&gt;A few weeks ago I spoke at PASS on using the Resource Governor in SQL Server 2008.&amp;nbsp; For my demo, I created a little application that could fire off multiple queries against SQL Server to simulate different users/applications.&amp;nbsp; This tool… gasp… creates a load on SQL Server.&amp;nbsp; People seemed interested in the application, so I’ve decided to release it on CodePlex.&amp;nbsp; &lt;A href="http://www.codeplex.com/SqlLoadGenerator"&gt;You can find the project here.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;For anyone that saw that demo, this tool has gotten a a bit of a face lift… I sort of got bored over the holidays, and added a few features that I wished I had when I was using it to demo, as well as just playing around.&amp;nbsp; It’s nothing fancy… I just put it together one Saturday for my presentation, then gave into some feeping creaturism a couple of nights. &lt;/P&gt;
&lt;P&gt;I originally created this to test settings for the SQL Server 2008 Resource Governor.&amp;nbsp;&amp;nbsp; You can also use it as a (very) light weight load testing tool, but no promises on that.&amp;nbsp; I’m not planning on adding any features to it, or supporting it much, but I thought I’d put it out there.&lt;/P&gt;
&lt;P&gt;Here’s what it looks like:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://agilebi.com/cs/blogs/ddarden/SqlLoadGenerator1_7E3206EB.jpg"&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=SqlLoadGenerator1 border=0 alt=SqlLoadGenerator1 src="http://agilebi.com/cs/blogs/ddarden/SqlLoadGenerator1_thumb_1438727E.jpg" width=558 height=364&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Here’s a summary of the features:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Runs multiple queries against SQL Server.&amp;nbsp; You can add as many as you like.&lt;/LI&gt;
&lt;LI&gt;Each query can be either a SQL User or Domain User.&lt;/LI&gt;
&lt;LI&gt;You can specify an Application name for the connection.&lt;/LI&gt;
&lt;LI&gt;You can specify the new of concurrent threads to use for each query.&lt;/LI&gt;
&lt;LI&gt;You can start all queries, stop all queries, remove all queries.&lt;/LI&gt;
&lt;LI&gt;There is logging (you can toggle on and off… it isn’t precisely thread safe, and can cause crashes when there are lots of failures on multiple threads) for failed queries.&lt;/LI&gt;
&lt;LI&gt;You can set all the defaults on a per user basis, and persist them.&lt;/LI&gt;
&lt;LI&gt;Each query has a # of Runs and a # of Fails counter.&amp;nbsp; You can use the ‘Reset Counters’ feature to reset the total counts (not the per query counts).&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;You can save your settings via the ‘Options’ menu.&amp;nbsp; You can add default items to the different dropdowns, provide default query settings, change the log locations, etc.&amp;nbsp; You can also modify the stock connection string… though keep in mind some of the settings (particularly ‘pooling=false’ will affect the way the application works… namely, the connections to SQL Server won’t be closed).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://agilebi.com/cs/blogs/ddarden/SqlLoadGenerator2_0836824A.jpg"&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=SqlLoadGenerator2 border=0 alt=SqlLoadGenerator2 src="http://agilebi.com/cs/blogs/ddarden/SqlLoadGenerator2_thumb_003EDFE8.jpg" width=478 height=479&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That’s about it… enjoy!&lt;/P&gt;
&lt;P&gt;David&lt;/P&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=252" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="Automation Tools" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Automation+Tools/default.aspx" /><category term="SQL Server" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/SQL+Server/default.aspx" /><category term="Testing" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Testing/default.aspx" /><category term="PASS" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/PASS/default.aspx" /></entry><entry><title>Troubleshooting Writeable Regions in PerformancePoint Plan</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2008/10/29/troubleshooting-writeable-regions-in-performancepoint-plan.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2008/10/29/troubleshooting-writeable-regions-in-performancepoint-plan.aspx</id><published>2008-10-29T18:09:00Z</published><updated>2008-10-29T18:09:00Z</updated><content type="html">&lt;P&gt;Only certain cells are considered “writeable” in a PPS Plan Excel form. A writeable region is a region where the user can enter data. Here is a checklist of reasons why a region that you expect to be writeable is not.&lt;/P&gt;
&lt;P&gt;I put this list together based on some correspondence with the PPS Team, as well as adding in everything I found on the forums... this isn't my work.&amp;nbsp; I just wanted to post it somewhere that I wouldn't always have to go looking for it...&lt;/P&gt;
&lt;P&gt;1. Verify your form.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;1. Verify that you have authored a form in Excel that uses every dimension/hierarchy that's in your model (as a column, row, or filter). &lt;/P&gt;
&lt;P&gt;2. Verify that the ‘Allow Data Entry’ property is set to true for the matrix.&lt;/P&gt;
&lt;P&gt;3. Note that you can only write to cells that match the model's member set view for time so the form should be authored with the same time hierarchy as the model's member set view.&lt;/P&gt;
&lt;P&gt;4. Verify that the matrix is using the correct model for the cycle.&lt;/P&gt;
&lt;P&gt;5. Verify that the matrix is using the correct scenario for the cycle.&lt;/P&gt;
&lt;P&gt;6. Check that the cell style "Data Entry Cell - PerformancePoint" has distinct formatting from the cell style "Data Cell - PerformancePoint", and type directly into a cell expected to be writeable to confirm that the add-in is preventing data entry. (Use the "Reset Default Cell Style" button in the PerformancePoint options dialog to restore default settings for the styles) &lt;/P&gt;
&lt;P&gt;7. If you use Custom MDX: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Verify you have crossjoined [Measures].[Value] to the columns. &lt;/LI&gt;
&lt;LI&gt;If you want annotations, you have crossjoined [Measures]. [Model_MeasureGroup_AnnotationCount]. &lt;/LI&gt;
&lt;LI&gt;No level that you're entering data into is aliased with the With Member statement.&lt;/LI&gt;&lt;/OL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;2. Verify your cycles.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;1. Verify you've published the form as a Form Template from Excel. &lt;/P&gt;
&lt;P&gt;2. Verify that your form shows up under "Forms" in the "Forms and Reports" section. &lt;/P&gt;
&lt;P&gt;3. Verify that the cycle and assignment status is started.&lt;/P&gt;
&lt;P&gt;4. Check the Model | Summary page and note down the Current Period; this may affect the time range for the form.&lt;/P&gt;
&lt;P&gt;5. Verify the cycle has the correct start and end dates (and that the current date/time is between them).&lt;/P&gt;
&lt;P&gt;6. Verify the cycle has the correct scenario. &lt;/P&gt;
&lt;P&gt;7. Verify that you've assigned the correct form to the Cycle and assigned the correct people as Contributors/Reviewers/Approvers.&lt;/P&gt;
&lt;P&gt;8. Verify in Process Management | Cycle Instance | Forms Assignment that the status is started for the user.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;3. Verify your security.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;1. Verify that user permissions for the roles used in the assignment are set properly. This includes being able to Write data to all leaf nodes, as well as ensuring that the role is turned on for the model.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;4. Verify you’re running the form correctly.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;1. Verify that you've opened the form as a Contributor (i.e. with appropriate credentials), and have opened the Assignment and not just gone to Reports&amp;gt;Open. &lt;/P&gt;
&lt;P&gt;2. Verify that you have put all filters to a leaf level. &lt;/P&gt;
&lt;P&gt;3. Verify that you are entering in at the correct scenario at a leaf level of all dimensions (unless you have enabled input at all levels, in which case, only the filters must be at leaf levels). &lt;/P&gt;
&lt;P&gt;4. Verify that the matrix is showing data at a leaf level for all dimensions in the measure group. Alternately, turn spreading on to see where non-leaf data entry is possible – but note spreading does not work across time.&lt;/P&gt;
&lt;P&gt;5. If the writeable region appears for a contributor but not for an approver, check that the option "Allow the approver to edit submissions" was set on the assignment definition. Also be sure that the approver is using the individual assignment (from the review/approve dialog) rather than the grouped assignment.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=233" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="PPS Plan" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/PPS+Plan/default.aspx" /></entry><entry><title>Repeated Dimension Names in PerformancePoint Server Monitor &amp; Analyze</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2008/10/27/repeated-dimension-names-in-performancepoint-server-monitor-analyze.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2008/10/27/repeated-dimension-names-in-performancepoint-server-monitor-analyze.aspx</id><published>2008-10-27T14:36:00Z</published><updated>2008-10-27T14:36:00Z</updated><content type="html">&lt;P&gt;A colleague came to me recently with a problem.&amp;nbsp; She was implementing a Dashboard in PPS M&amp;amp;A, and she was seeing some unexpected dimension names.&amp;nbsp; The behavior was specifically affecting her when she was creating a report using an Analytic Grid, but it was consistent inside of PPS M&amp;amp;A everywhere I looked.&amp;nbsp; The problem seemed to be present with several other hierarchies.&lt;/P&gt;
&lt;P&gt;Basically, her hierarchy/dimension names were not being presented to the user as expected.&amp;nbsp; For example, in her SSAS DB she had a dimension named 'Revenue Indicator' and a user hierarchy named 'Revenue Indicators'.&amp;nbsp; In the Analytic grid, it looked like the word 'Indicator' was repeating... the hierarchy was being displayed as 'Revenue Indicator Indicators'.&amp;nbsp; This naming was a bit confusing, and a little unexpected, so I dug into it a little bit.&lt;/P&gt;
&lt;H2&gt;Evaluate the Problem&lt;/H2&gt;
&lt;P&gt;My first step was to check the Analytic Grid in question, as well as the dimension in SSAS.&amp;nbsp; Not that I thought my coworker was lying to me, but I wanted to make sure that what was being displayed to the user was NOT what I expected to see.&amp;nbsp; Nope, I was not being lied to and deceived... my faith in humanity can continue unabated.&amp;nbsp; Some transformation was definitely going on between SSAS and PPS.&lt;/P&gt;
&lt;H2&gt;Determine how PPS is getting the Hierarchy name&lt;/H2&gt;
&lt;P&gt;Next, I wanted to see how PPS retrieves the names of all the hierarchies and attributes to display to the user.&amp;nbsp; I fired up Profiler, and captured a trace when I loaded up the Analytic Grid.&amp;nbsp; I saw PPS using several Discover commands... so I fired off a Discover command based on what I saw in the trace.&amp;nbsp; It looked something like this:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  1: &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Discover&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;xmlns&lt;/SPAN&gt;=&lt;SPAN style="COLOR:#0000ff;"&gt;"urn:schemas-microsoft-com:xml-analysis"&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  2:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;RequestType&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;MDSCHEMA_HIERARCHIES&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;RequestType&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  3:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Restrictions&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  4:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Properties&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  5:     &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;PropertyList&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  6:       &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Catalog&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;MyCube&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Catalog&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  7:       &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Content&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;SchemaData&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Content&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  8:       &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Format&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;Tabular&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Format&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  9:     &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;PropertyList&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 10:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Properties&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 11: &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;Discover&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;That discover command gave me back the schema for the Cube.&amp;nbsp; I took a look at the XML... here is the relevant section:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  1: ...
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  2: &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;row&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  3:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;CATALOG&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_NAME&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;MyCube&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;CATALOG&lt;/SPAN&gt;_NAME&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  4:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;CUBE&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_NAME&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;My Cube&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;CUBE&lt;/SPAN&gt;_NAME&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  5:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_UNIQUE_NAME&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;[Revenue Indicator]&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;_UNIQUE_NAME&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  6:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_NAME&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;Revenue Indicators&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;_NAME&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  7:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_UNIQUE_NAME&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;[Revenue Indicator].[Revenue Indicators]&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;_UNIQUE_NAME&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  8:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_CAPTION&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;Revenue Indicators&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;_CAPTION&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  9:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_TYPE&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;3&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;_TYPE&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 10:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_CARDINALITY&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;26&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;_CARDINALITY&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 11:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DEFAULT&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_MEMBER&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;[Revenue Indicator].[Revenue Indicators].[All]&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DEFAULT&lt;/SPAN&gt;_MEMBER&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 12:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ALL&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_MEMBER&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;[Revenue Indicator].[Revenue Indicators].[All]&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;ALL&lt;/SPAN&gt;_MEMBER&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 13:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DESCRIPTION&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 14:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;STRUCTURE&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;1&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;STRUCTURE&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 15:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;IS&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_VIRTUAL&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;false&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;IS&lt;/SPAN&gt;_VIRTUAL&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 16:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;IS&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_READWRITE&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;false&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;IS&lt;/SPAN&gt;_READWRITE&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 17:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_UNIQUE_SETTINGS&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;1&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;_UNIQUE_SETTINGS&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 18:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_IS_VISIBLE&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;true&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;_IS_VISIBLE&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 19:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_ORDINAL&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;1&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;_ORDINAL&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 20:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_IS_SHARED&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;true&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;DIMENSION&lt;/SPAN&gt;_IS_SHARED&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 21:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_IS_VISIBLE&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;true&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;_IS_VISIBLE&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 22:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_ORIGIN&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;1&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;_ORIGIN&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 23:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;HIERARCHY&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_DISPLAY_FOLDER&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 24:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;GROUPING&lt;/SPAN&gt;&lt;SPAN style="COLOR:#ff0000;"&gt;_BEHAVIOR&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;1&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;GROUPING&lt;/SPAN&gt;_BEHAVIOR&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 25: &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;row&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 26: ...&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;So, precisely what I would expect... but not what is coming out of PPS.&amp;nbsp; &lt;/P&gt;
&lt;H2&gt;Determining how PPS is transforming the Hierarchy name&lt;/H2&gt;
&lt;P&gt;I then tried a little experiment... I added a few more hierarchies, to see how PPS would present them:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/RepeatedDimensionNamesinPerformancePoint_94A9/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH:0px;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" border=0 alt=image src="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/RepeatedDimensionNamesinPerformancePoint_94A9/image_thumb_1.png" width=651 height=212&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;After deploying the changes, I saw the following hierarchies in my Analytic Grid:&lt;/P&gt;
&lt;TABLE cellSpacing=0 cellPadding=2&gt;

&lt;TR&gt;
&lt;TD&gt;SSAS Hierarchy&lt;/TD&gt;
&lt;TD&gt;PPS Name&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;[Revenue Indicator].[Revenue Indicators]&lt;/TD&gt;
&lt;TD&gt;Revenue Indicator Indicators&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;[Revenue Indicator].[Revenue Indicator Types]&lt;/TD&gt;
&lt;TD&gt;Revenue Indicator Types&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;[Revenue Indicator].[Types]&lt;/TD&gt;
&lt;TD&gt;Revenue Indicator Types&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;
&lt;H2&gt;Result&lt;/H2&gt;
&lt;P&gt;PPS is retrieving the Dimension name and Hierarchy name, then concatenating them together while removing any duplicated words from the Hierarchy name.&amp;nbsp; I checked this behavior out in several places inside of PPS (not just in the Analytic Chart)... it appears to be common functionality.&lt;/P&gt;
&lt;P&gt;This is actually pretty helpful.&amp;nbsp; Most of the time when we create SSAS DB's, they're accessible using a variety of tools... PPS M&amp;amp;A for Dashboards, via Excel for power users, etc.&amp;nbsp; The dimensions and hierarchies are rendered in different ways for each tool.&amp;nbsp; Some will concatenate the Dimension name with the Hierarchy name, and some won't.&amp;nbsp; Some will give you a nice hierarchy, some you just get an ugly list.&amp;nbsp; Naming your dimension appropriately will give you the most user friendly names in each of the tools... in this case, using 'Revenue Indicator Types' gives you a user friendly name in both Excel and in PPS, which is what we needed.&lt;/P&gt;
&lt;P&gt;This is some pretty handy functionality, but I didn't find it with a quick search of the 'net and BOL (which doesn't mean it's not there).&amp;nbsp; If you're surfacing your SSAS DB through PPS, I would definitely take this into account when determining your naming conventions.&lt;/P&gt;
&lt;P&gt;Cheers,&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;David&lt;/P&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=231" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="PerformancePoint Server" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/PerformancePoint+Server/default.aspx" /><category term="PPS M&amp;amp;A" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/PPS+M_2600_amp_3B00_A/default.aspx" /></entry><entry><title>Testing and Tuning an Internet Facing PerformancePoint M&amp;A Dashboard</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2008/10/27/testing-and-tuning-an-internet-facing-performancepoint-m-a-dashboard.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2008/10/27/testing-and-tuning-an-internet-facing-performancepoint-m-a-dashboard.aspx</id><published>2008-10-27T13:19:00Z</published><updated>2008-10-27T13:19:00Z</updated><content type="html">






&lt;P&gt;I've spent the past 15 months, off and on, working as the technical lead on a performance management project using PerformancePoint Server.&amp;nbsp; The project was to create a SharePoint Portal where users could view the performance of a school system.&amp;nbsp; The portal was initially internally facing, but the goal was to make it publicly accessible.&amp;nbsp; My last project with this particular client was to implement an Internet facing version of the portal.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Since the school system in question has more than 120,000 students, scalability and performance was definitely an issue.&amp;nbsp; I spent a week at the Microsoft Technology Center in Atlanta, GA testing and tuning the solution.&amp;nbsp; We performed our testing in a lab with seven desktop machines (to test with) and three servers to simulate our production environment.&amp;nbsp; I was joined for the week by one of the PPS M&amp;amp;A Architects, who helped me evaluate the solution.&amp;nbsp; Everyone at the MTC was super helpful and friendly, and we got a lot of really good advice.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I want to share some of the things I learned during the performance testing of the solution.&lt;/P&gt;
&lt;H1&gt;Recommended Reading&lt;/H1&gt;
&lt;P&gt;A few good things to read before getting started on a venture like this (among all the other white papers about scaling SQL Server, SharePoint, and the like).&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=100208&amp;amp;clcid=0x409"&gt;Performance Tuning and Capacity Planning for PerformancePoint Monitoring Server&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/kb/821268"&gt;Contention, poor performance, and deadlocks when you make Web service requests from ASP.NET applications&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;H1&gt;Steps&lt;/H1&gt;
&lt;P&gt;To performance test and tune our SharePoint site, we needed to...&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Deploy the site in the test lab. &lt;/LI&gt;
&lt;LI&gt;Create load tests. &lt;/LI&gt;
&lt;LI&gt;Tune Windows Server, SharePoint, IIS, PerformancePoint Server, SQL Server, and Analysis Services as needed. &lt;/LI&gt;
&lt;LI&gt;Run and analyze the load tests. &lt;/LI&gt;
&lt;LI&gt;Modify the PPS design as required. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Just five little items on the list... how hard can that be, right?&amp;nbsp; Items #2 through #5 were done in iterations.&lt;/P&gt;
&lt;H1&gt;System Under Test&lt;/H1&gt;
&lt;P&gt;The application we created uses SharePoint Enterprise Server 2007 (MOSS), PerformancePoint Server Monitor &amp;amp; Analyze 2007 (SP1), and SQL Server 2005 (SP2 CU8).&amp;nbsp; Both SQL Server RDBMS and SSAS reside on the same server.&amp;nbsp; The RDBMS supports only SharePoint and PerformancePoint.&amp;nbsp; Analysis Services is dedicated to the Dashboards.&amp;nbsp; &lt;/P&gt;
&lt;H2&gt;Data Source Design&lt;/H2&gt;
&lt;P&gt;The data source is a SQL Server Analysis Services DB.&amp;nbsp; It uses a straightforward star schema design.&amp;nbsp; All of the KPI's that we're using in the PPS Dashboards are surfaced using calculated measures in the cube.&amp;nbsp; This is definitely a good way to go.&amp;nbsp; This design makes developing the dashboards very easy, it encapsulates the logic of the KPIs, and it helps with efficient caching inside of SSAS.&amp;nbsp; The cube was less than 1 GB in size for this phase of the project.&amp;nbsp; Some default aggregations were built, and usage based aggregations were applied against the cube.&amp;nbsp; Query performance was base lined at a few dozen milliseconds for the largest/most complex queries once the cache was warmed.&lt;/P&gt;
&lt;H2&gt;Dashboard Design&lt;/H2&gt;
&lt;P&gt;Our portal has seven dashboards.&amp;nbsp; Each dashboard has several pages.&amp;nbsp; &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;The Overall view contains a scorecard with a Year Member Selection filter.&amp;nbsp; Each KPI on the scorecard conditionally displays an Analytic Grid and a Web Page report (pointing to a HTML file in SharePoint). &lt;/LI&gt;
&lt;LI&gt;The Compare view contains two scorecards, with up to 14 filters (primarily Member Selection... more on this later).&amp;nbsp; Seven filters apply to each scorecard; users can make different selections, and compare the two views. &lt;/LI&gt;
&lt;LI&gt;The Look Inside the Data view contains a single scorecard with up to 12 filters (and a few more columns than the Compare view, to show historical values). &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The Analytic Charts were all fairly straightforward, with a default view of a calculated measure against time.&amp;nbsp; The users can drill into the charts.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The filters were primarily Member Selection, with at most a few dozen members.&amp;nbsp; We have one MDX filter (for Schools), that returns about 400 members (this will come into play later).&lt;/P&gt;
&lt;P&gt;The Dashboard was implemented using Application Security.&lt;/P&gt;
&lt;H2&gt;SharePoint&lt;/H2&gt;
&lt;P&gt;I enabled Anonymous Authentication for SharePoint.&amp;nbsp; The site basically supports all of our Dashboards, as well as a number of Help files and some content to help people use the site and the data.&amp;nbsp; I customized some of the master pages (to remove features such as SharePoint Help, Search, the breadcrumb trail, and stuff like that), but the site design was fairly trivial for this version of the site.&amp;nbsp; Excel Services and other MOSS features were not used.&lt;/P&gt;
&lt;H1&gt;Deploying to a Test Environment&lt;/H1&gt;
&lt;P&gt;Our friendly neighborhood Microsoft rep arranged for us to have some time in the Microsoft Technology Center in Atlanta, GA.&amp;nbsp; The provided an environment for us to test in, and they provided three servers (to mimic our production hardware) and seven desktop machines for us to run load tests on.&amp;nbsp; It took a bit ~1.5 days to install/configure the software, install service packs, and deploy our solution (include a SharePoint site collection, PPS M&amp;amp;A Dashboards, and SSAS DB).&lt;/P&gt;
&lt;H2&gt;Hardware Under Test&lt;/H2&gt;
&lt;P&gt;We tested our solution on the following hardware.&amp;nbsp; Our production hardware was similar.&amp;nbsp; A hardware network load balancing appliance was used for the web front ends.&lt;/P&gt;
&lt;P&gt;Web Front End (1)&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;DL380 G5 &lt;/LI&gt;
&lt;LI&gt;Dual Core x 2 - 2.66 GHz - 64 bit &lt;/LI&gt;
&lt;LI&gt;8 GB RAM &lt;/LI&gt;
&lt;LI&gt;Windows Server 2003 (SP2) &lt;/LI&gt;
&lt;LI&gt;IIS 6.0 &lt;/LI&gt;
&lt;LI&gt;SharePoint Enterprise Server 2007 (SP1+Infrastructure update) &lt;/LI&gt;
&lt;LI&gt;PerformancePoint Server Monitor &amp;amp; Analyze (SP1) &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Web Front End (2)&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;DL 382 G5 &lt;/LI&gt;
&lt;LI&gt;Dual Core x 2 - 2.6 GHz - 64 bit &lt;/LI&gt;
&lt;LI&gt;4 GB RAM &lt;/LI&gt;
&lt;LI&gt;Windows Server 2003 (SP2) &lt;/LI&gt;
&lt;LI&gt;IIS 6.0 &lt;/LI&gt;
&lt;LI&gt;SharePoint Enterprise Server 2007 (SP1+Infrastructure update) &lt;/LI&gt;
&lt;LI&gt;PerformancePoint Server Monitor &amp;amp; Analyze (SP1) &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;SQL Server (RDBMS and SSAS)&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;DL 585 G2 &lt;/LI&gt;
&lt;LI&gt;Dual Core x4 - 2.66 GHZ - 64 bit &lt;/LI&gt;
&lt;LI&gt;16 GB RAM &lt;/LI&gt;
&lt;LI&gt;Windows Server 2003 (SP2) &lt;/LI&gt;
&lt;LI&gt;SQL Server (SP2 CU8) &lt;/LI&gt;
&lt;LI&gt;RAID10 disk array &lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;Test Rig&lt;/H2&gt;
&lt;P&gt;We used Visual Studio 2008 (SP1) Team Systems for Testers (VSTT) to perform our testing.&amp;nbsp; We used one machine as a Controller and four machines as Agents.&amp;nbsp; We saved our test results to SQL Server on a separate machine.&lt;/P&gt;
&lt;P&gt;Test Machines (x5)&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Dual core 64 bit &lt;/LI&gt;
&lt;LI&gt;2 GB RAM &lt;/LI&gt;
&lt;LI&gt;Vista &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This configuration let us scale to 4,000+ users without severely taxing any of the machines.&amp;nbsp; Due to the network appliance being used for our load balancing, IP Spoofing was not required for our test machines.&amp;nbsp; We had some issues with using Vista for the agents... it was just a little bit trickier to configure than XP.&amp;nbsp; We were never able to get the counter collection working for those machines (annoying, but not really an issue since we had so much capacity and all the machines were in the same room).&amp;nbsp; We didn't run into any major issues getting our test rig up and running, but it definitely took some time.&lt;/P&gt;
&lt;H1&gt;Creating the Load Tests&lt;/H1&gt;
&lt;P&gt;In order to do our tuning and performance testing, we first had to create everything needed to create a load test.&amp;nbsp; VSTT is a good tool for load testing, but be aware that there is a learning curve.&amp;nbsp; If you don't have any experience performing web based load testing, then this could be a significant hurdle.&amp;nbsp; Luckily, in a previous life I was a Load Test Architect, and I had experience with the tool.&lt;/P&gt;
&lt;H2&gt;Test Design&lt;/H2&gt;
&lt;P&gt;I first identified several use cases that I thought would be common for users of our portal.&amp;nbsp; These consisted of actions such as viewing the top level summary Dashboards, using filters to change the view of the scorecards, clicking on analytic grids, and things like that.&amp;nbsp; I created a mixture of coded and graphical Web Tests for each small work flow (such as changing a filter four times on a certain Dashboard, or clicking through eight charts on a Dashboard).&amp;nbsp; I then used Web Tests that call other Web Tests to build up my use cases.&amp;nbsp; The use cases were then combined in different ratios in each of my load tests so I could simulate a variety of user populations.&lt;/P&gt;
&lt;P&gt;Designing your tests correctly is crucial.&amp;nbsp; If you're way off on what the users will be doing, all of your performance tuning could be for naught.&amp;nbsp; I would recommend using a pilot group, or at least some test subjects, to figure out how people will use your portal.&lt;/P&gt;
&lt;H2&gt;Web Test Implementation&lt;/H2&gt;
&lt;P&gt;Microsoft Consulting Services provided a test harness for PPS.&amp;nbsp; The test harness is a coded web test that can parse the XML snippets used by PPS, and perform actions such as changing filter values, activating charts, etc.&amp;nbsp; It's a pretty cool tool, and was very helpful.&amp;nbsp; Unfortunately, it is proprietary, so I can't share it... you'll have to get engage MCS if you want to use it.&amp;nbsp; I did make some modifications to it to change the way it would use filters, to make it work when Web Tests called other Web Tests, etc.&amp;nbsp; If anyone is using this test harness (or if it does become publicly available), I can share the (minor) modifications that I made.&lt;/P&gt;
&lt;P&gt;I constructed all of the visual web tests using &lt;A href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler 2&lt;/A&gt; (in conjunction with a home grown helper application to insert comments, and do a few other useful tasks).&amp;nbsp; Thanks to the MCS test harness, a few extra tools, and the way the web tests were constructed, the actual test generation was very straightforward. &lt;/P&gt;
&lt;H2&gt;Testing Considerations&lt;/H2&gt;
&lt;P&gt;One of the key elements to consider when performing a load test against PPS is that, due to the architecture, the process of loading a single page may involve dozens of calls.&amp;nbsp; For example, a dashboard that has 15 filters, two scorecards, and two charts would actually make 20 http requests... so if each request takes 1 second, it takes 20 seconds to load the page.&amp;nbsp; I was primarily interested in the time to last byte for each page, so I used comments while recording my tests to know where to place the transactions, so I could analyze those instead of individual calls. &lt;/P&gt;
&lt;P&gt;I implemented reasonable timing and pacing for the individual steps in each of the tests, and made sure to gradually ramp up my users when applying the load.&amp;nbsp; Testing was slightly weighted towards the Dashboards that were the largest and would have the heaviest usage, though another use case was used to randomly hit every part of the site to bust the cache if possible.&lt;/P&gt;
&lt;H1&gt;System Tuning&lt;/H1&gt;
&lt;P&gt;We tuned a few things, or at least reviewed the settings, out of the gate.&amp;nbsp; During our testing we continuously monitored the servers (and test machines), identified bottlenecks, tweaked settings, then did it all again.&lt;/P&gt;
&lt;P&gt;During our initial testing, we found SSAS to be the bottleneck for our solution.&amp;nbsp; I suspect that our web front ends (SharePoint and/or IIS) could be tweaked a little more, but it wasn't really necessary in our scenario. &lt;/P&gt;
&lt;H2&gt;ASP.NET Tuning&lt;/H2&gt;
&lt;P&gt;We started tuning ASP.NET with some of the suggestions in the article &lt;A href="http://support.microsoft.com/kb/821268"&gt;Contention, poor performance, and deadlocks when you make Web service requests from ASP.NET applications&lt;/A&gt;.&amp;nbsp; In the end, I found the performance to be good using the autoConfig="true" (the formulas listed in the article are automagically applied) with a few tweaks.&amp;nbsp; I increased the number of threads available significantly... that was a major bottleneck for awhile.&amp;nbsp; I also increased the minWorkThreads to 50 (otherwise SharePoint stalled after adding a few hundred users while spinning up more threads, even when ramping users up fairly slowly).&amp;nbsp; I also increased the minFreeThreads and minLocalRequestFreeThreads.&amp;nbsp; I increased the number of connections to the DB server.&amp;nbsp; Don't just blindly apply any of these settings... your mileage will vary.&amp;nbsp; I went through a number of test iterations carefully monitoring each of the servers and testing these settings.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I made the following change to the machine.config (on all web front ends):&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  1: …   
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  2:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;system.web&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;   
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  3:     &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;processModel&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;autoConfig&lt;/SPAN&gt;=&lt;SPAN style="COLOR:#0000ff;"&gt;"true"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;maxWorkerThreads&lt;/SPAN&gt;=&lt;SPAN style="COLOR:#0000ff;"&gt;"400"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;maxIoThreads&lt;/SPAN&gt;=&lt;SPAN style="COLOR:#0000ff;"&gt;"400"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;minWorkerThreads&lt;/SPAN&gt;=&lt;SPAN style="COLOR:#0000ff;"&gt;"50"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/SPAN&gt;   
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  4:     &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;httpRuntime&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;minFreeThreads&lt;/SPAN&gt;=&lt;SPAN style="COLOR:#0000ff;"&gt;"352"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;minLocalRequestFreeThreads&lt;/SPAN&gt;=&lt;SPAN style="COLOR:#0000ff;"&gt;"304"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/SPAN&gt;   
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  5:     …   
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  6:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;system.web&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;   
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  7: …   
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  8:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;system.net&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;   
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  9:    &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;connectionManagement&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;  
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 10:      &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;add&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;address&lt;/SPAN&gt;=&lt;SPAN style="COLOR:#0000ff;"&gt;"10.1.11.11"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;maxconnection&lt;/SPAN&gt;=&lt;SPAN style="COLOR:#0000ff;"&gt;"48"&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/SPAN&gt;       ? Database server ip address  
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 11:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;connectionManagement&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;  
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 12:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;system.net&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;  
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 13: …  
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 14: &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;configuration&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;/PRE&gt;&lt;/PRE&gt;
&lt;H2&gt;IIS Tuning&lt;/H2&gt;
&lt;P&gt;I adjusted the application pool (for both the Performance Management site as well as the Central Administration page). Pinging and Rapid Failure were turned off on the Health tab. I did NOT use web gardens in this configuration, even though I have seen it recommended.&amp;nbsp; I did not see a difference in performance between using them and not, and was advised by one of the local IIS gurus not to use them.&lt;/P&gt;
&lt;H2&gt;SQL Server 2005 Tuning&lt;/H2&gt;
&lt;P&gt;We updated SQL Server to Service Pack 2 – Cumulative Update 8 (build 3257). Before applying the CU, we ran into some significant performance issues.&amp;nbsp; SSAS did not like some of our very small dimensions, and performance was severely degraded.&amp;nbsp; The CU resolved the issues.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Data files, transaction logs, and the Temp DB were spread out over multiple disks.&amp;nbsp; Our usage of the RDBMS was very light, so we needed minimal tuning here.&lt;/P&gt;
&lt;H2&gt;SQL Server Analysis Services 2005 Tuning&lt;/H2&gt;
&lt;P&gt;I updated the Query \ Max Threads element of Analysis Services to 20 to provide additional threads for querying. Adjusting this element needs to be done carefully, as it can improve the performance of the web front ends at the expense of maxing out SQL Server.&amp;nbsp; I actually ramped this number up quite a bit during testing (with good effect), but found 20 to be adequate after resolving some other issues.&amp;nbsp; I suggest monitoring the queued requests in IIS along with the queued and active threads in SSAS to determine a good balance here.&amp;nbsp; I initially found a lot of queuing in the Long Parsing Jobs and Short Parsing Jobs as well, due to some filters.&lt;/P&gt;
&lt;H2&gt;PerformancePoint Server M&amp;amp;A Tuning&lt;/H2&gt;
&lt;P&gt;OK, this is important.&amp;nbsp; Since we Internet facing, we're supporting anonymous users... a decent number of them, in fact.&amp;nbsp; I updated the stored procedure [PPSMonitoring]. [dbo].[ParameterValuesCreate] to comment out a section that is not needed for an anonymous site, but that has an extremely negative impact on performance.&amp;nbsp; This is the piece that stores the current filter selections.&amp;nbsp; In addition to not being necessary, it was totally thrashing our transaction log.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I made the following change to the [PPSMonitoring]. [dbo].[ParameterValuesCreate]&amp;nbsp; sproc:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  1: &lt;SPAN style="COLOR:#008000;"&gt;-- init &lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  2:     &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SET&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SET&lt;/A&gt; @TransactionIsOurs = 0
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  3:     &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=IF&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;IF&lt;/A&gt; @@TRANCOUNT = 0
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  4:     &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BEGIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BEGIN&lt;/A&gt; &lt;SPAN style="COLOR:#008000;"&gt;-- only if @@TRANCOUNT is 0, we do BEGIN TRAN&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  5:         &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BEGIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BEGIN&lt;/A&gt; &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=TRANSACTION&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;TRANSACTION&lt;/A&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  6:         &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SET&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SET&lt;/A&gt; @TransactionIsOurs = 1
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  7:     &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=END&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;END&lt;/A&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  8: &lt;SPAN style="COLOR:#008000;"&gt;-- DD – 20080821 – Commented out the following section to increase performance&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  9: &lt;SPAN style="COLOR:#008000;"&gt;--    --If this parameter value already exists (for this login), update. Otherwise, insert.&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 10: &lt;SPAN style="COLOR:#008000;"&gt;--    IF(EXISTS(SELECT * FROM [ParameterValues] WHERE Login = @Login AND [ParameterUniqueName] = @ParameterUniqueName))&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 11: &lt;SPAN style="COLOR:#008000;"&gt;--    BEGIN&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 12: &lt;SPAN style="COLOR:#008000;"&gt;--        SELECT 1&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 13: &lt;SPAN style="COLOR:#008000;"&gt;--        UPDATE [ParameterValues]&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 14: &lt;SPAN style="COLOR:#008000;"&gt;--        SET &lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 15: &lt;SPAN style="COLOR:#008000;"&gt;--            [LastUpdated] = GETDATE(),&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 16: &lt;SPAN style="COLOR:#008000;"&gt;--            [SerializedXml] = @SerializedXml&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 17: &lt;SPAN style="COLOR:#008000;"&gt;--        WHERE [Login] = @Login AND [ParameterUniqueName] = @ParameterUniqueName&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 18: &lt;SPAN style="COLOR:#008000;"&gt;--        IF @@ERROR &amp;lt;&amp;gt; 0 &lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 19: &lt;SPAN style="COLOR:#008000;"&gt;--        BEGIN&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 20: &lt;SPAN style="COLOR:#008000;"&gt;--           RAISERROR (5580001, 16, 1, @tErrMsg, 7, N'ParameterValues') WITH LOG&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 21: &lt;SPAN style="COLOR:#008000;"&gt;--           SET @ReturnCode = -1&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 22: &lt;SPAN style="COLOR:#008000;"&gt;--           GOTO exit_label&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 23: &lt;SPAN style="COLOR:#008000;"&gt;--        END&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 24: &lt;SPAN style="COLOR:#008000;"&gt;--    END&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 25: &lt;SPAN style="COLOR:#008000;"&gt;--    ELSE&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 26: &lt;SPAN style="COLOR:#008000;"&gt;--    BEGIN&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 27: &lt;SPAN style="COLOR:#008000;"&gt;--        --Insert record&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 28: &lt;SPAN style="COLOR:#008000;"&gt;--        INSERT INTO [ParameterValues]&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 29: &lt;SPAN style="COLOR:#008000;"&gt;--            ([Login], [ParameterUniqueName],[LastUpdated],[SerializedXml])&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 30: &lt;SPAN style="COLOR:#008000;"&gt;--        VALUES     &lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 31: &lt;SPAN style="COLOR:#008000;"&gt;--            (@Login, @ParameterUniqueName, GETDATE(), @SerializedXml)&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 32: &lt;SPAN style="COLOR:#008000;"&gt;--        IF @@ERROR &amp;lt;&amp;gt; 0 &lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 33: &lt;SPAN style="COLOR:#008000;"&gt;--        BEGIN&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 34: &lt;SPAN style="COLOR:#008000;"&gt;--           RAISERROR (5580002, 16, 1, @tErrMsg, 8, N'ParameterValues') WITH LOG&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 35: &lt;SPAN style="COLOR:#008000;"&gt;--           SET @ReturnCode = -1&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 36: &lt;SPAN style="COLOR:#008000;"&gt;--           GOTO exit_label&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 37: &lt;SPAN style="COLOR:#008000;"&gt;--        END&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 38: &lt;SPAN style="COLOR:#008000;"&gt;--    END&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 39:  
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 40:     &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=IF&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;IF&lt;/A&gt; @TransactionIsOurs = 1
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 41:     &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BEGIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BEGIN&lt;/A&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 42:         &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=COMMIT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;COMMIT&lt;/A&gt; &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=TRANSACTION&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;TRANSACTION&lt;/A&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 43:     &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=END&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;END&lt;/A&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt; 44:     &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=RETURN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;RETURN&lt;/A&gt; 0&lt;/PRE&gt;&lt;/PRE&gt;
&lt;DIV class=csharpcode&gt;
&lt;H2&gt;SharePoint Tuning&lt;/H2&gt;&lt;/DIV&gt;
&lt;P&gt;There is a lot of tuning that can be done to SharePoint; tuning SharePoint was not a focus for us.&amp;nbsp; We did perform a few changes.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Allowing the SharePoint Server worker process to consume large amounts of memory can decrease performance. For computers that have more than 4 GB of RAM, the ASP.NET cache size can be constrained with the privateBytesLimit attribute, set on the cache element of the Web.config file. By setting privateBytesLimit=”2576980378” (that is, 60% of 4 GB), you can avoid a scenario in which a server that has more than 4 GB of memory creates an oversized cache.&lt;/P&gt;
&lt;P&gt;For a machine with 8 GB of RAM with a limit of 60% of the memory, we would add the following to the web.config. The private bytes limit number is calculated via the formula (&amp;lt;&lt;I&gt;gigabytes of RAM available&amp;gt;&lt;/I&gt; * &lt;I&gt;&amp;lt;percentage of RAM to use&amp;gt;&lt;/I&gt;* 1,024^3).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I made the following change to my web.config file for the SharePoint site:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  1: ...
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  2: &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;system.web&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  3: ...
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  4: &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;caching&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  5:   &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;cache&lt;/SPAN&gt; &lt;SPAN style="COLOR:#ff0000;"&gt;privateBytesLimit&lt;/SPAN&gt; = &lt;SPAN style="COLOR:#0000ff;"&gt;"5153960755"&lt;/SPAN&gt; &lt;SPAN style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  6: &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;caching&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  7: ...
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  8: &lt;SPAN style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#800000;"&gt;system.web&lt;/SPAN&gt;&lt;SPAN style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  9: ...&lt;/PRE&gt;&lt;/PRE&gt;
&lt;H1&gt;Tweaking the Dashboard Design&lt;/H1&gt;
&lt;P&gt;Overall, I was expecting to be able to support about 500 concurrent users on each of the front end servers.&amp;nbsp; I expected the WFE's to be the bottleneck.&amp;nbsp; With the original implementation of the Dashboard, I found we could support up to about 2,000 users... as long as they weren't using our Comparison and Look Inside the Data pages.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;When testing those pages, SSAS was getting slammed.&amp;nbsp; I was able to support 1,000 users... but SSAS was at 80% utilization constantly, with occasional spikes and severe performance degradation.&amp;nbsp; Not a really good situation. &lt;/P&gt;
&lt;P&gt;Through testing and profiling, I identified the culprit... it was the School filter.&lt;/P&gt;
&lt;P&gt;The School filter is an MDX filter, and it looks like this:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  1: FILTER(
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  2:   DESCENDANTS(
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  3:     [Entity].[Entity]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  4:     ,[Entity].[Entity]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  5:     ,SELF_AND_BEFORE
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  6:   )
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  7:   ,[Entity].[Entity Type] = [Entity].[Entity Type].&amp;amp;[SCHOOL]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  8: )&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;No big deal, right?&amp;nbsp; Except... each time it is loaded (i.e., a lot) it fires off a few other MDX statements.&amp;nbsp; They look like this:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  1: &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/A&gt; 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  2:   {   [Entity].[Entity].[&lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=All&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;All&lt;/A&gt;]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  3:     ,[Entity].[Entity].&amp;amp;[School A]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  4:     ,[Entity].[Entity].&amp;amp;[School B]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  5:     //...about 400 more
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  6:   } DIMENSION PROPERTIES MEMBER_TYPE &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=on&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;on&lt;/A&gt; 0 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  7: &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/A&gt; [MetricsDatamart]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  8: &lt;/PRE&gt;&lt;/PRE&gt;
&lt;DIV class=csharpcode&gt;and this:&lt;/DIV&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  1: &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/A&gt; 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  2:   { 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  3:    IIF([Entity].[Entity].[&lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=All&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;All&lt;/A&gt;].Parent &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=IS&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;IS&lt;/A&gt; &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=NULL&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;NULL&lt;/A&gt;,[Entity].[Entity].[&lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=All&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;All&lt;/A&gt;],[Entity].[Entity].[&lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=All&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;All&lt;/A&gt;].Parent)
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  4:   ,IIF([Entity].[Entity].&amp;amp;[School A].Parent &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=IS&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;IS&lt;/A&gt; &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=NULL&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;NULL&lt;/A&gt;,[Entity].[Entity].&amp;amp;[School A],[Entity].[Entity].&amp;amp;[School A].Parent)
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  5:     // ... about 400 more
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  6:  } DIMENSION PROPERTIES MEMBER_TYPE &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=on&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;on&lt;/A&gt; 0 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#dddddd;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  7: &lt;A style="COLOR:#0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/A&gt; [MetricsDatamart]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR:#ffffff;MARGIN:0em;WIDTH:100%;FONT-FAMILY:consolas,'Courier New',courier,monospace;FONT-SIZE:10px;"&gt;  8: &lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;These are fairly long statements, and they are expensive to run.&amp;nbsp; SSAS was having to queue dozens of these statements just to parse them when under load.&amp;nbsp; They are fired for each page load, even though our data is static (i.e., no caching is occurring).&amp;nbsp; All those inline IIF's did horrible, terrible things to SSAS.&amp;nbsp; SSAS was getting very backed up, which caused IIS to queue, which caused extremely long waits on the front end.&lt;/P&gt;
&lt;P&gt;To fix the problem, I switched that filter to use a SQL Server RDBMS source.&amp;nbsp; The data was static, so no big deal there.&amp;nbsp; I did find that using more than 1 tabular source gave me an error in PPS... I wasn't able to resolve that on our timeline, and I was able to fix the performance issue anyway.&lt;/P&gt;
&lt;H1&gt;Final Results&lt;/H1&gt;
&lt;P&gt;After that one change, the performance of the whole system skyrocketed.&amp;nbsp; With our heaviest test case, I was able to run 1,500 concurrent users. The WFE processor was at ~70% utilization, averaging 300 requests per second with no contention or queuing. The database server was at ~20 utilization, no issues. Responses were &amp;lt; 1 second, with an average response time of ~.3 seconds. User experience excellent. Even when the response times would increase, page load times were still reasonable (under 10 seconds for pages with more 15 objects).&lt;/P&gt;
&lt;H1&gt;Next Steps&lt;/H1&gt;
&lt;P&gt;We got everything pretty much humming for this phase of the project... but we're building a much larger version for our client in the very near future.&amp;nbsp; Here are some thoughts on making our solution bigger, faster, better.&lt;/P&gt;
&lt;H2&gt;SharePoint&lt;/H2&gt;
&lt;P&gt;We can tune SharePoint quite a bit to increase performance.&amp;nbsp; This includes lightening some of the templates and base pages, optimizing images and web pages, and making sure all the user supplied content is fairly lean (i.e., not using a 300kb file produced by Word when a 20kb html file could be used).&amp;nbsp; We can use some of the caching features available in MOSS to improve the performance on the web servers.&lt;/P&gt;
&lt;H2&gt;PerformancePoint Filters&lt;/H2&gt;
&lt;P&gt;OK, I saw our filters as a bit of a bottleneck.&amp;nbsp; For a large installation, I think performance could be significantly improved by building a custom filter using the Monitor SDK.&amp;nbsp; Some of the key features would be enabling caching and perhaps using XMLA discover queries instead of some of the MDX.&amp;nbsp; I'd also make the ordering of the elements a little more configurable, and perhaps try and implement a way to create a 'global filter' (I find I use a single filter on many different Dashboards... and I'd like to reduce the maintenance/development time/improve consistency.&lt;/P&gt;
&lt;H2&gt;Servers&lt;/H2&gt;
&lt;P&gt;Scaling out the web servers and scaling up the SQL Servers looks like a fairly effective strategy here.&amp;nbsp; Coupled with some custom components and a well thought out design, this looks like an effective strategy with fairly predictable performance characteristics.&amp;nbsp; We could easily double our capacity right now by snagging two extra WFEs.&amp;nbsp; To scale by a factor of 10, we'd probably need an extra SQL Server and some minor changes to our strategy. &lt;/P&gt;
&lt;H1&gt;Key Takeaways&lt;/H1&gt;
&lt;P&gt;Our testing went well, and we were able to exceed the performance we were expecting.&amp;nbsp; Here are a few key takeaways from this exercise.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Plan on hunting down some performance bottlenecks.&amp;nbsp; In a PPS deployment, they can be located on any tier, and it may take a little time to find and fix them.&amp;nbsp; We had to make adjustments to basically every technology in this instance. &lt;/LI&gt;
&lt;LI&gt;You're going to want to tune your servers.&amp;nbsp; It took a little over a week for me to go through that exercise, but I had help, a lab, and experience with all the various components. You're mileage may vary.&amp;nbsp; We identified and corrected a number of significant performance issues... everything from tweaking IIS and SQL Server to ensuring the correct Cumulative Update was applied.&amp;nbsp; Make only small changes for each test iteration, and analyze carefully.&amp;nbsp; And document the changes you make. &lt;/LI&gt;
&lt;LI&gt;The components you use, and your design, will have extreme ramifications on performance.&amp;nbsp; If your dashboards heavily use PAS views vs. Excel Services vs. Analytic Charts, your performance characteristics will change dramatically.&amp;nbsp; Carefully consider the ramifications of the different technologies, and look at where the work is being done in your configuration. &lt;/LI&gt;
&lt;LI&gt;Overall, scalability and performance was good, and everything was pretty much in line with what I saw in the &lt;A href="http://go.microsoft.com/fwlink/?LinkId=100208&amp;amp;clcid=0x409"&gt;Performance Tuning and Capacity Planning for PerformancePoint Monitoring Server&lt;/A&gt;.&amp;nbsp; Keep in mind that your implementation will probably be be somewhat different than the PPS Team's test installation, so keep that in mind in your planning. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Happy PerformancePointing...&lt;/P&gt;
&lt;P&gt;David&lt;/P&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=230" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="PerformancePoint Server" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/PerformancePoint+Server/default.aspx" /><category term="Analysis Services" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Analysis+Services/default.aspx" /><category term="Development Patterns" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Development+Patterns/default.aspx" /><category term="Automation Tools" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Automation+Tools/default.aspx" /><category term="Performance Tuning" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Performance+Tuning/default.aspx" /><category term="SQL Server" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/SQL+Server/default.aspx" /><category term="Testing" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Testing/default.aspx" /><category term="PPS M&amp;amp;A" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/PPS+M_2600_amp_3B00_A/default.aspx" /></entry><entry><title>How to implement cascading parameters in a SQL Services Reporting Services MDX Report</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2008/05/18/how-to-implement-cascading-parameters-in-a-sql-services-reporting-services-mdx-report.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2008/05/18/how-to-implement-cascading-parameters-in-a-sql-services-reporting-services-mdx-report.aspx</id><published>2008-05-18T23:44:52Z</published><updated>2008-05-18T23:44:52Z</updated><content type="html">&lt;h1&gt;Background&lt;/h1&gt;  &lt;p&gt;Last week, I needed to prototype a report against an Analysis Services 2005 cube for a client.&amp;#160; The report wasn't too complicated... I just had the requirement to allow a user to drill down a hierarchy by selecting a member at one level, then displaying all the children for that member, etc.&amp;#160; This is really easy to do in SSRS... but I wouldn't go so far as to call it super intuitive.&amp;#160; It had been awhile since I wrote a MDX report, and it took me a few minutes to remember just how to do it... so I thought I'd document the steps, for my own benefit if no one else's.&lt;/p&gt;  &lt;p&gt;The sample requires the &lt;a href="http://www.ssas-info.com/analysis-services-faq/29-mgmt/242-how-install-adventure-works-dw-database-analysis-services-2005-sample-database" target="_blank"&gt;Adventure Works AS DB&lt;/a&gt;.&amp;#160; You can download the sample &lt;a href="http://cid-0deda612a5d5d66e.skydrive.live.com/self.aspx/Public/Blog/CascadingMdxParameters/SsrsCascadingMdxParamsSample.zip" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;h1&gt;Scenario&lt;/h1&gt;  &lt;p&gt;So, I want to create a report that returns the Order Count by Product.&amp;#160; The users need to select a particular Category, and then Subcategory for the products they want to see.&amp;#160; The report also needs to return summary information for both the Category and Subcategory level, and it needs to contain the Category and Subcategory on the report.&amp;#160; This can be a pretty standard business case for reports where the potential data set is to large to report on.&lt;/p&gt;  &lt;h1&gt;Underlying Data&lt;/h1&gt;  &lt;p&gt;In order for this to work, I need a hierarchy to drill down.&amp;#160; Here, I'm going to use the Product Categories hierarchy of the Product dimension in the Adventure Works DW. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step1_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="109" alt="Step1" src="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step1_thumb.jpg" width="186" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h1&gt;The Report&lt;/h1&gt;  &lt;p&gt;Next, I'm going to create a data set to use in my report.&amp;#160; I'm going to go ahead and switch to the MDX view for the data set.&amp;#160; Now, I'm going to go ahead and create a few parameters.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step2_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="166" alt="Step2" src="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step2_thumb.jpg" width="580" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, I'm going to go to the Report Layout tab,&amp;#160; right-click off the report, and choose to view my parameters.&amp;#160; Yup, they're there.&amp;#160; Now, I'm going to go back to the Data tab, and look at my list of available data sets...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step3_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="80" alt="Step3" src="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step3_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Cool!&amp;#160; BIDS just created two new data sets for me, based on the parameters I created.&amp;#160; Note that you have to view your Report Parameters on the Layout tab for these data sets to be created (you just have to open the dialog, you don't have to do anything).&amp;#160; This seems to be the part that I always forget.&lt;/p&gt;  &lt;p&gt;Let's look at the ParameterCategory data set first.&amp;#160; The MDX that BIDS created looks like this:&lt;/p&gt;  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; WITH MEMBER [Measures].[ParameterCaption] AS &lt;span style="color:#006080;"&gt;'[Product].[Product Categories].CURRENTMEMBER.MEMBER_CAPTION'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; MEMBER [Measures].[ParameterValue] AS &lt;span style="color:#006080;"&gt;'[Product].[Product Categories].CURRENTMEMBER.UNIQUENAME'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; MEMBER [Measures].[ParameterLevel] AS &lt;span style="color:#006080;"&gt;'[Product].[Product Categories].CURRENTMEMBER.LEVEL.ORDINAL'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; SELECT &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         [Measures].[ParameterCaption]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         , [Measures].[ParameterValue]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         , [Measures].[ParameterLevel]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     } ON COLUMNS , &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     [Product].[Product Categories].ALLMEMBERS ON ROWS &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; FROM &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     [Adventure Works]&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;But when we run that, it returns everything in the hierarchy... including that nasty 'All Products', which we don't want our users selecting.&amp;#160; So, we'll make a slight modification, and change '[Product].[Product Categories].ALLMEMBERS' to '[Product].[Product Categories].Children'.&amp;#160; Now, we get just the Categories that we want our users to select.&lt;/p&gt;

&lt;p&gt;Now, we want to look at the ParameterSubCategory dataset.&amp;#160; The MDX looks like this:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; WITH MEMBER [Measures].[ParameterCaption] AS &lt;span style="color:#006080;"&gt;'[Product].[Product Categories].CURRENTMEMBER.MEMBER_CAPTION'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; MEMBER [Measures].[ParameterValue] AS &lt;span style="color:#006080;"&gt;'[Product].[Product Categories].CURRENTMEMBER.UNIQUENAME'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; MEMBER [Measures].[ParameterLevel] AS &lt;span style="color:#006080;"&gt;'[Product].[Product Categories].CURRENTMEMBER.LEVEL.ORDINAL'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; SELECT &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         [Measures].[ParameterCaption]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         , [Measures].[ParameterValue]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         , [Measures].[ParameterLevel]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     } ON COLUMNS , &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     [Product].[Product Categories].ALLMEMBERS ON ROWS &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; FROM &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     [Adventure Works]&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Again, not precisely what we want... plus, we want this one to be parameter driven.&amp;#160; &lt;/p&gt;

&lt;p&gt;First, we need to add the ParameterCategory (re-use the original Parameter name to keep an extra data set from being created later) to the report:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step4_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="134" alt="Step4" src="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step4_thumb.jpg" width="608" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Then, we change '[Product].[Product Categories].ALLMEMBERS' to 'STRTOMEMBER(@ParameterCategory).Children'.&amp;#160; Now, our MDX looks like this:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; WITH MEMBER [Measures].[ParameterCaption] AS &lt;span style="color:#006080;"&gt;'[Product].[Product Categories].CURRENTMEMBER.MEMBER_CAPTION'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; MEMBER [Measures].[ParameterValue] AS &lt;span style="color:#006080;"&gt;'[Product].[Product Categories].CURRENTMEMBER.UNIQUENAME'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; MEMBER [Measures].[ParameterLevel] AS &lt;span style="color:#006080;"&gt;'[Product].[Product Categories].CURRENTMEMBER.LEVEL.ORDINAL'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; SELECT &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         [Measures].[ParameterCaption]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         , [Measures].[ParameterValue]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         , [Measures].[ParameterLevel]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     } ON COLUMNS , &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     STRTOMEMBER(@ParameterCategory).Children ON ROWS &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; FROM &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     [Adventure Works]&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;and it will only return the Children of the selected category.&amp;#160; You could also create your MDX using an expression, and directly use the the 'Parameters!ParameterCategory.Value' embedded in a quoted string.&amp;#160; There is a performance hit for using anything like STRTOMEMBER, but in this case it isn't worth the trouble to me to do it that way.&lt;/p&gt;

&lt;p&gt;Almost done.&amp;#160; Except that we haven't gotten around to writing the actual query that drives the report...&amp;#160; so we go back to our main data set.&lt;/p&gt;

&lt;p&gt;Now, when we create our query, we might be tempted to return the children of the Subcategory... but this won't get us summary information at the Category and Subcategory levels.&amp;#160; So we're going to write some MDX using the &lt;a href="http://msdn.microsoft.com/en-us/library/ms145981.aspx" target="_blank"&gt;Hierarchize&lt;/a&gt; function to make sure our data set contains the selection at the Category level, at the Subcategory level, and all of the Products underneath the selected subcategory:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; SELECT&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     [Measures].[Order Count] ON 0,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     HIERARCHIZE(&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;             STRTOMEMBER(@ParameterCategory),&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;             STRTOMEMBER(@ParameterSubCategory),&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;             STRTOMEMBER(@ParameterSubCategory).Children&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     ) ON 1&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; FROM&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     [Adventure Works]  &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now I'm going to go back to the Layout tab, right-click off the report, pull up my Report Parameters, and change the Default value to Null (so the user will always have to make a selection... though you can make this part as clever as you'd like).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step5_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="477" alt="Step5" src="http://agilebi.com/cs/blogs/ddarden/WindowsLiveWriter/HowtoimplementcascadingparametersinaSQLS_FA26/Step5_thumb.jpg" width="588" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In your report, you may need to use some expressions, filters or other logic to format your results, suppress rows (i.e., the Category will have a Null for both Subcategory and Product... how you want to handle this is up to you).&amp;#160; For this sample, I just wrote a little VB&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; _Indent &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#006080;"&gt;&amp;quot;  &amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; FormatProduct(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; Category &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; SubCategory &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; Product &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; ret &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;.Empty&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Not&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;.IsNullOrEmpty(Product) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         ret = _Indent &amp;amp; _Indent &amp;amp; Product&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;.IsNullOrEmpty(Product) &lt;span style="color:#0000ff;"&gt;And&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Not&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;.IsNullOrEmpty(SubCategory) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         ret = _Indent &amp;amp; SubCategory&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         ret = Category&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; ret&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Function&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And used an expression to format my Product column in the report.&lt;/p&gt;

&lt;h1&gt;Summary&lt;/h1&gt;

&lt;p&gt;That's about it.&amp;#160; We now have a simple report with some cascading parameters.&lt;/p&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=176" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author></entry><entry><title>MDX Filters in PPS Monitor</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2008/04/26/mdx-filters-in-pps-monitor.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2008/04/26/mdx-filters-in-pps-monitor.aspx</id><published>2008-04-26T22:44:42Z</published><updated>2008-04-26T22:44:42Z</updated><content type="html">&lt;p&gt;I had a question on how to implement MDX Filters in PerformancePoint Monitor awhile back.&amp;#160; &lt;a href="http://nickbarclay.blogspot.com/" target="_blank"&gt;Nick Barclay&lt;/a&gt;&amp;#160; provided an answer &lt;a href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2686577&amp;amp;SiteID=17" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Some samples Nick provided were:&lt;/p&gt;  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; [Time].[Fiscal Year].Children&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; DESCENDANTS(&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;   [Geography].[Geography].[All Geographies]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;  ,[Geography].[Geography].[Country]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;  ,SELF_AND_BEFORE) &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Depending on how you have implemented your cube, you can also do some other clever things.&amp;#160; On a recent project, I had a Date dimension with a hierarchy that would present the current month as 'Current Month', so MDX such as the following :&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; {[Dim Date].[Calendar].[Month Name].&amp;amp;[Current Month].Lag(6):[Dim Date].[Calendar].[Month Name].&amp;amp;[Current Month]}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;could be used to provide the last 6 months contained in the cube as a drop down list:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; Nov 2007&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; Dec 2007&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; Jan 2008&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; Feb 2008&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; Mar 2008&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; Current Month&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Another useful possibility is to provide a filter based on a hierarchy, but an individual member (in this case the 'Unknown' member) should not be displayed in the pick list:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; FILTER(&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     DESCENDANTS(&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;          [Entity].[Entity]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         ,[Entity].[Entity]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         ,SELF_AND_BEFORE&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     )&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     ,NOT [Entity].[Entity].CURRENTMEMBER IS [Entity].[Entity].&amp;amp;[Unknown]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; )&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=164" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author></entry><entry><title>Creating a Scorecard Transform in PerformancePoint Server Monitor</title><link rel="alternate" type="text/html" href="http://agilebi.com/cs/blogs/ddarden/archive/2008/04/26/creating-a-scorecard-transform-in-performancepoint-server-monitor.aspx" /><id>http://agilebi.com/cs/blogs/ddarden/archive/2008/04/26/creating-a-scorecard-transform-in-performancepoint-server-monitor.aspx</id><published>2008-04-26T21:26:06Z</published><updated>2008-04-26T21:26:06Z</updated><content type="html">&lt;h1&gt;&lt;/h1&gt;  &lt;h1&gt;Overview&lt;/h1&gt;  &lt;p&gt;I've spent a couple of days doing some prototyping around PerformancePoint Monitor... there have been a few things that I've wanted to accomplish, so when the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb848116.aspx" target="_blank"&gt;PerformancePoint Monitoring SDK&lt;/a&gt; was released, it seemed like the way to do it.&amp;#160; However, there aren't a lot of resources around Scorecard Transforms out there, so I thought I'd document some of the things I found.&amp;#160; This documentation won't be exhaustive, but it will hopefully point everyone in the right direction.&amp;#160; Keep in mind this is just prototype code... a number of enhancements should be made before putting this into production.&lt;/p&gt;  &lt;p&gt;I've created a sample project (and a simple dashboard) to do the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Perform a Magic Number transformation - I've had clients want a message to be returned to the user instead of a value... such has having conditional logic in a calculated member that returns percentages between 0 - 1, then -1 if no data exists, -2 if the KPI is invalid in the chosen scenario, etc. &lt;/li&gt;    &lt;li&gt;Display text on the scorecard that is database driven - I have a request to provide database driven, text metadata for KPIs on each scorecard. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The dashboard contains two scorecards ('Sample Scorecard' that the transforms are applied to, and 'Sample Scorecard 2' which the transforms are not applied to), with two KPIs.&amp;#160; You will need to publish the objects in the .bswx file (included in the Visual Studio solution) in order to see the results of the transforms.&lt;/p&gt;  &lt;p&gt;You can download the sample project &lt;a href="http://cid-0deda612a5d5d66e.skydrive.live.com/self.aspx/Public/Blog/ScorecardTransform/ScorecardTransformPrototype.zip" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;h1&gt;Where to Start&lt;/h1&gt;  &lt;p&gt;The first thing to do is to create a DLL containing your transform.&amp;#160; I started with a C# class library.&amp;#160; Remember that your DLL will have to be &lt;a href="http://msdn2.microsoft.com/en-us/library/xwb8f617.aspx" target="_blank"&gt;strongly named&lt;/a&gt;.&amp;#160; The basic steps will be to run SN.exe to create a key file, then using the resulting .snk file in your project.&lt;/p&gt;  &lt;p&gt;Once you've created your project, you'll need to implement a class that inherits from IGridViewTransform, and implement three methods in your class:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;public GridViewTransformType GetTransformType() &lt;/li&gt;    &lt;li&gt;public string GetId() &lt;/li&gt;    &lt;li&gt;public void Execute(GridViewData viewData, PropertyBag parameters, IGlobalCache cache) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The first method is used to determine when in the lifecycle of a scorecard the transform is run.&amp;#160; Your options are PreRender, PreQuery, PostQuery, and PerUser.&amp;#160; Here's a sample:&lt;/p&gt;  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// Returns the type of transform that will be applied&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;returns&amp;gt;Grid view transform type&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; GridViewTransformType GetTransformType()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; GridViewTransformType.PreRender;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The second method simply returns the name of the transform:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// Returns the name of the transform&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;returns&amp;gt;Name of transform&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetId()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;TransformMagicNumberToText&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The Execute method is what we're really interested in... this is run every time a scorecard is displayed.&amp;#160; OK, that's not quite true... week in mind that every time a scorecard is run for an individual for a particular set of parameters, it get's cached for awhile... keep that in mind when debugging.&amp;#160; An IISRESET will make sure the transform is run again.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// This method is called each time a Scorecard is rendered&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;param name=&amp;quot;viewData&amp;quot;&amp;gt;Scorecard view that the transform acts on&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;param name=&amp;quot;parameters&amp;quot;&amp;gt;Parameters passed to the method&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;param name=&amp;quot;cache&amp;quot;&amp;gt;Global cache of objects&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Execute(GridViewData viewData, PropertyBag parameters, IGlobalCache cache)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;First, we'll set up some variables that we'll use later.&amp;#160; The idea is that there are some of these transforms that should only be run on certain scorecards, columns, KPIs, etc.&amp;#160; I'm prototyping these for a publicly accessible dashboard... so I want to keep performance in mind.&amp;#160; The final version will probably utilize caching in order to increase performance.&amp;#160; Right now, I just threw in some basic functionality to make the transform a little more 'selective'.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// These will be read from a config file or a database in production&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Use to limit the columns in a Scorecard that this transform will run on&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; columnNames = &lt;span style="color:#006080;"&gt;&amp;quot;|Magic Column|Another Column|&amp;quot;&lt;/span&gt;;  &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Use to limit what scorecards this transform will run on&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; scorecardNames = &lt;span style="color:#006080;"&gt;&amp;quot;|Sample Scorecard|Another Scorecard|&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Value to replace, and text to replace it with; this would probably really be a list&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;decimal&lt;/span&gt; magicValue = Convert.ToDecimal(-1); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; replacementText = &lt;span style="color:#006080;"&gt;&amp;quot;Invalid Data&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Columns we're interested in that are on the scorecard&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; List&amp;lt;GridHeaderItem&amp;gt; columnsInScorecard = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;GridHeaderItem&amp;gt;();&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Next, we're going to get the name of the scorecard, so we will only run the transform on scorecards we want.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Get the Scorecard that is currently being transformed&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; Scorecard scorecard = cache.GetScorecard(viewData.ScorecardId);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Get the name of the scorecard&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; scorecardName = scorecard.Name.Text;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Validate that this scorecard should have the transform applied&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// If not, short-circuit&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (scorecardNames.IndexOf(&lt;span style="color:#006080;"&gt;&amp;quot;|&amp;quot;&lt;/span&gt; + scorecardName + &lt;span style="color:#006080;"&gt;&amp;quot;|&amp;quot;&lt;/span&gt;) &amp;lt; 0)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Next, we'll run through the list of GridHeaderItems that exists on the Scorecard.&amp;#160; We'll build a list of the the GridHeaderItems who's display text matches the columns we want to be able to transform.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:98.72%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;height:299px;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Get the row and column headers&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; List&amp;lt;GridHeaderItem&amp;gt; rowHeaders = viewData.RootRowHeader.GetAllHeadersInTree();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; List&amp;lt;GridHeaderItem&amp;gt; columnHeaders = viewData.RootColumnHeader.GetAllHeadersInTree();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Iterate through the Column headers to get a list&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// containing the columns we're interested in&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (GridHeaderItem ghi &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; columnHeaders)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// See if the column exists in our list&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (columnNames.IndexOf(&lt;span style="color:#006080;"&gt;&amp;quot;|&amp;quot;&lt;/span&gt; + ghi.DisplayText + &lt;span style="color:#006080;"&gt;&amp;quot;|&amp;quot;&lt;/span&gt;) &amp;gt;= 0)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// Add it to the list if so&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;         columnsInScorecard.Add(ghi);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now we're going to look through all the the columns and rows on the scorecard.&amp;#160; We'll look at each display condition, see if it matches our criteria, then replace it if it does.&amp;#160; We accomplish changing a number to text by removing the initial Display Element, and replacing it with a new one.&lt;/p&gt;

&lt;p&gt;Now we have a basic transform that, for a particular scorecard and column, will replace specific numbers with text.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Iterate through the list of columns we're interested in&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (GridHeaderItem columnHeader &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; columnsInScorecard)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;    &lt;span style="color:#008000;"&gt;// Look at each row on the scorecard&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (GridHeaderItem rowHeader &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; rowHeaders)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;    {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;        &lt;span style="color:#008000;"&gt;// Variable to hold the index that we want to remove&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;        &lt;span style="color:#008000;"&gt;// This may need to become a list, or another type of structure&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; indexToRemove = -1;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; viewData.Cells[rowHeader, columnHeader].DisplayElements.Count; ++i)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;        {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;            GridDisplayElement gde = viewData.Cells[rowHeader, columnHeader].DisplayElements[i];&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;            &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;            &lt;span style="color:#008000;"&gt;// Look for number in the display properties&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;            &lt;span style="color:#008000;"&gt;// In this case, look for the Value, not the formatted display&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (gde.DisplayElementType == DisplayElementTypes.Number)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;            {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;                &lt;span style="color:#008000;"&gt;// Find our magic value that we use as a key&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;                &lt;span style="color:#008000;"&gt;// to know when to replace the value &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;                &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (gde.Value == magicValue)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;                {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;                    indexToRemove = i;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;                }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;            }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;        }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (indexToRemove &amp;gt; -1)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt;        {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  30:&lt;/span&gt;            viewData.Cells[rowHeader, columnHeader].DisplayElements.RemoveAt(indexToRemove);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  31:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  32:&lt;/span&gt;            GridDisplayElement newGde = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; GridDisplayElement();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  33:&lt;/span&gt;            newGde.DisplayElementType = DisplayElementTypes.Text;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  34:&lt;/span&gt;            newGde.Text = replacementText;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  35:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  36:&lt;/span&gt;            viewData.Cells[rowHeader, columnHeader].DisplayElements.Add(newGde);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  37:&lt;/span&gt;        }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  38:&lt;/span&gt;    }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  39:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160; &lt;/p&gt;

&lt;h1&gt;Deploying the Transform&lt;/h1&gt;

&lt;p&gt;Alright, so we've written and compiled our first transform.&amp;#160; Now, all we need to do is actually install it.&amp;#160; There isn't any documentation (at the time of writing this blog) in the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb848116.aspx" target="_blank"&gt;PerformancePoint Monitoring SDK&lt;/a&gt; on how to install a Scorecard Transform... but there is documentation on how to &lt;a href="http://msdn2.microsoft.com/en-us/library/bb659287.aspx" target="_blank"&gt;Install Report Viewer Extensions&lt;/a&gt;.&amp;#160; I took a guess that the process would be pretty much the same (albeit instead of using the &amp;lt;CustomReportViews&amp;gt; section you use the &amp;lt;ScorecardTemplateExtensions&amp;gt; section in the config files), and it appears so.&amp;#160; You can just follow those steps with that minor change.&lt;/p&gt;

&lt;p&gt;Here is an example of what your new &amp;lt;ScorecardTemplateExtensions&amp;gt; section will look like:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; ...&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &amp;lt;CustomViewTransforms&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;   &amp;lt;add key=&lt;span style="color:#006080;"&gt;&amp;quot;ExpandNamedSets&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;Microsoft.PerformancePoint.Scorecards.GridViewTransforms.ExpandNamedSets, Microsoft.PerformancePoint.Scorecards.Server, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;   &amp;lt;add key=&lt;span style="color:#006080;"&gt;&amp;quot;RowsColumnsFilterTransform&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;Microsoft.PerformancePoint.Scorecards.GridViewTransforms.RowsColumnsFilterTransform, Microsoft.PerformancePoint.Scorecards.Server, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;   &amp;lt;add key=&lt;span style="color:#006080;"&gt;&amp;quot;AnnotationTransform&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;Microsoft.PerformancePoint.Scorecards.GridViewTransforms.AnnotationTransform, Microsoft.PerformancePoint.Scorecards.Server, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;   &amp;lt;add key=&lt;span style="color:#006080;"&gt;&amp;quot;UpdateDisplayText&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;Microsoft.PerformancePoint.Scorecards.GridViewTransforms.UpdateDisplayText, Microsoft.PerformancePoint.Scorecards.Client, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;   &amp;lt;add key=&lt;span style="color:#006080;"&gt;&amp;quot;ComputeRollups&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;Microsoft.PerformancePoint.Scorecards.GridViewTransforms.ComputeRollups, Microsoft.PerformancePoint.Scorecards.Client, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;   &amp;lt;add key=&lt;span style="color:#006080;"&gt;&amp;quot;ComputeAggregations&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;Microsoft.PerformancePoint.Scorecards.GridViewTransforms.ComputeAggregations, Microsoft.PerformancePoint.Scorecards.Client, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;   &amp;lt;!-- add key=&lt;span style="color:#006080;"&gt;&amp;quot;ApplyDefaultFormatInfo&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;Microsoft.PerformancePoint.Scorecards.Client.ApplyDefaultFormatInfo, Microsoft.PerformancePoint.Scorecards.Client, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot;&lt;/span&gt;/--&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;   &amp;lt;!-- New Scorecard Transforms --&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;   &amp;lt;add key=&lt;span style="color:#006080;"&gt;&amp;quot;TransformReplacePropertyText&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;ScorecardTransformPrototypeLibrary.TransformReplacePropertyText, ScorecardTransformPrototypeLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dc084a0be77df9c1&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;   &amp;lt;add key=&lt;span style="color:#006080;"&gt;&amp;quot;TransformMagicNumberToText&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;ScorecardTransformPrototypeLibrary.TransformMagicNumberToText, ScorecardTransformPrototypeLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dc084a0be77df9c1&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;   &amp;lt;!-- End New Scorecard Transforms --&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt; &amp;lt;/CustomViewTransforms&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt; ...&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;After modifying your three web.config files and GACing your assembly, your scorecard should be ready to run!&lt;/p&gt;

&lt;h1&gt;Debugging your Assembly&lt;/h1&gt;

&lt;p&gt;OK, so you're brand new assembly is running... and not exactly doing what you're expecting it to.&amp;#160; Or perhaps you just want to see what's going on in all those objects that you're using in your code.&amp;#160; Unless you're already developing on your SharePoint box, you've now got a few hoops to jump through in order to be able to debug.&amp;#160; The configuration I use is to develop locally, then deploy to a server... so I'll run through how to get that working.&lt;/p&gt;

&lt;p&gt;First, you need to &lt;a href="http://msdn2.microsoft.com/en-us/library/bt727f1t.aspx" target="_blank"&gt;setup remote debugging on your server&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Next, you'll need to put your debug symbols into the GAC with your your assembly.&lt;/p&gt;

&lt;p&gt;Then, you'll need to restart IIS so your new assembly gets loaded (otherwise, you'll probably get some funky results).&lt;/p&gt;

&lt;p&gt;I went ahead and created a batch script to do this (included in the Visual Studio solution... I created a folder on the SharePoint server for this to live in)... your filenames and paths will be different, but this is the basic concept:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; @ECHO OFF&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; REM: This batch file will pull the assembly and debug symbols&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; REM: from the development machine, GAC the assembly, and &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; REM: put the debug symbols into the GAC folder.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; REM: Copy the scorecard files to &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; server&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; COPY &lt;span style="color:#006080;"&gt;&amp;quot;\\DDARDEN\C$\Users\ddarden\Documents\Visual Studio 2005\Projects\ScorecardTransformPrototype\ScorecardTransformPrototypeLibrary\bin\Debug\Score*.*&amp;quot;&lt;/span&gt; .&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; ECHO Copied the scorecard files to the server&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; REM: Add the DLL to the GAC&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe&amp;quot;&lt;/span&gt; /i ScorecardTransformPrototypeLibrary.dll&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt; ECHO GAC'd the DLL&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt; REM: Copy the debug symbols to the GAC directory to enable remote debugging&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt; COPY ScorecardTransformPrototypeLibrary.pdb C:\WINDOWS\assembly\GAC_MSIL\ScorecardTransformPrototypeLibrary\1.0.0.0__dc084a0be77df9c1&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; ECHO Loaded the symbols&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt; REM: Recycle IIS to reload the assembly&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt; IISRESET&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt; ECHO Reset IIS&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now you're going to need to attach to the correct process on the remote machine.&amp;#160; You want the w3wp process... there may be a few, so you might have to experiment a little to find the right one (in my configuration, I want the one running under the network service - NOT the SharePoint domain service account).&amp;#160; When you attach to a process, look at the output to see if your assembly got loaded with symbols.&amp;#160; The process your looking for will have the other PerformancePoint Server Monitor assemblies loaded, such as:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.WebParts\3.0.0.0__31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.WebParts.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.Client\3.0.0.0__31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.Client.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.Server\3.0.0.0__31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.Server.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.DataSourceProviders.Standard\3.0.0.0__31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.DataSourceProviders.Standard.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.Client.resources\3.0.0.0_en_31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.Client.resources.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.WebControls\3.0.0.0__31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.WebControls.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.Script\3.0.0.0__31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.Script.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.Common\3.0.0.0__31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.Common.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.WebParts.resources\3.0.0.0_en_31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.WebParts.resources.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.Script.resources\3.0.0.0_en_31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.Script.resources.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; &lt;span style="color:#006080;"&gt;'w3wp.exe'&lt;/span&gt; (Managed): Loaded &lt;span style="color:#006080;"&gt;'C:\WINDOWS\assembly\GAC_MSIL\Microsoft.PerformancePoint.Scorecards.WebControls.resources\3.0.0.0_en_31bf3856ad364e35\Microsoft.PerformancePoint.Scorecards.WebControls.resources.dll'&lt;/span&gt;, Skipped loading symbols. Module &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; optimized and the debugger option &lt;span style="color:#006080;"&gt;'Just My Code'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; enabled.&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;If you see them being loaded, but you don't see yours, then you probably messed up registering your assembly.&lt;/p&gt;

&lt;p&gt;Now, you should be able to set break points, and debug your assembly!&lt;/p&gt;

&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;OK... those are the steps to create a new Scorecard Transform, deploy it to the server, and to attach to the process and debug it.&amp;#160; Happy Monitoring!&lt;/p&gt;&lt;img src="http://agilebi.com/cs/aggbug.aspx?PostID=161" width="1" height="1"&gt;</content><author><name>ddarden42</name><uri>http://agilebi.com/cs/members/ddarden42.aspx</uri></author><category term="Extensions" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/Extensions/default.aspx" /><category term="PerformancePoint Server" scheme="http://agilebi.com/cs/blogs/ddarden/archive/tags/PerformancePoint+Server/default.aspx" /></entry></feed>