<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6186345343166573373</id><updated>2011-12-01T13:50:45.217-08:00</updated><title type='text'>Hitachi Consulting Microsoft BI</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-1867886599671956115</id><published>2007-09-27T17:39:00.001-07:00</published><updated>2007-09-27T17:39:22.815-07:00</updated><title type='text'>Automating Partition Creation</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;By Bryan C. Smith&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;The use of multiple partitions per measure group is promoted to improve both query and processing performance as well as the overall manageability of cubes.  Partitioning strategies are often time-based, so that a single partition may represent a specific year, quarter, month, or some other unit of time.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;One of the central challenges of partitioning a measure group on time (or any other non-static dimension) is that new partitions may be required over the life of the cube. If it can be predicted when these partitions might be needed, the required partitions can be manually created in advance by the admin.  Where values cannot be predicted, an "overflow" partition can be created to catch any values not attributed to other, more precisely defined partitions.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Still, having the ETL layer query the database to determine the partitions required and then create those partitions on your behalf is a much more attractive approach.  Below is a simplistic script demonstrating the use of AMO to do just that.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The script is written for execution within an SSIS Script task and requires a reference to the AMO library.  Its goal is to add any year-based partitions to the Reseller Sales measure group within the Adventure Works cube of the Adventure Works DW multidimensional database.  It is tested by dropping any partition from the Reseller Sales measure group. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here is a quick rundown of the logic.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The script starts by establishing references to the Adventure Works cube and the Reseller Sales measure group within the Adventure Works DW multidimensional database.  A query is issued against the DimTime table in the AdventureWorksDW relational database to determine which years exist within the table and the key ranges of the records associated with those years.  (There is a critical assumption here that records in the DimTime table are sequenced by date. This may not be true within your data warehouse.)  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The routine then loops through each partition in the Reseller Sales measure group to determine is a partition for that year exists.  If not, a new partition is created with the appropriate query bindings.  The first aggregation design used within the measure group is assigned to the new partition.  (This is not a recommended approach but simply serves to demonstrate how aggregations can be assigned to new partitions.)  The partition is then associated with the measure group and the change is submitted to SSAS.  (It is important to note, the new partition is unprocessed at this time.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; System&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; System.Data&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; System.Math&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; Microsoft.SqlServer.Dts.Runtime&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; Microsoft.AnalysisServices&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;span style='color:blue'&gt;Public&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Class&lt;/span&gt; ScriptMain&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Public&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Sub&lt;/span&gt; Main()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:green'&gt;'Locate Measure Group of Interest (and a Known Partition)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:green'&gt;'---------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyServer &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;New&lt;/span&gt; Server&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;        MyServer.Connect(&lt;span style='color:maroon'&gt;"localhost"&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyDatabase &lt;span style='color:blue'&gt;As&lt;/span&gt; Database = _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;            MyServer.Databases.GetByName(&lt;span style='color:maroon'&gt;"Adventure Works DW"&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyCube &lt;span style='color:blue'&gt;As&lt;/span&gt; Cube = MyDatabase.Cubes.GetByName(&lt;span style='color:maroon'&gt;"Adventure Works"&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyMeasureGroup &lt;span style='color:blue'&gt;As&lt;/span&gt; MeasureGroup = _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;            MyCube.MeasureGroups.GetByName(&lt;span style='color:maroon'&gt;"Reseller Sales"&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:green'&gt;'Retrieve Years in Dimension&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:green'&gt;'---------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyConnectionString &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;String&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;        MyConnectionString = &lt;span style='color:maroon'&gt;"Server=localhost;"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"Database=AdventureWorksDW;Integrated Security=SSPI;"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MySqlConnection &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;New&lt;/span&gt; SqlClient.SqlConnection(MyConnectionString)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MySqlCommand &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;New&lt;/span&gt; SqlClient.SqlCommand( _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                        MySqlQueryString, MySqlConnection)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;        MySqlConnection.Open()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MySqlReader &lt;span style='color:blue'&gt;As&lt;/span&gt; SqlClient.SqlDataReader = MySqlCommand.ExecuteReader&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:green'&gt;'Add Partitions That Don't Exist&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:green'&gt;'---------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;While&lt;/span&gt; MySqlReader.Read&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyYear &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;String&lt;/span&gt; = MySqlReader.GetString(0)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyStartKey &lt;span style='color:blue'&gt;As&lt;/span&gt; Int32 = MySqlReader.GetInt32(1)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyEndKey &lt;span style='color:blue'&gt;As&lt;/span&gt; Int32 = MySqlReader.GetInt32(2)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyPartitionName &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;String&lt;/span&gt; = &lt;span style='color:maroon'&gt;"Reseller_Sales_"&lt;/span&gt; + MyYear&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyPartition &lt;span style='color:blue'&gt;As&lt;/span&gt; Partition = _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                    MyMeasureGroup.Partitions.GetByName(MyPartitionName)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Catch&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyPartition &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;New&lt;/span&gt; Partition&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;With&lt;/span&gt; MyPartition&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                    .Name = MyPartitionName&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;If&lt;/span&gt; MyMeasureGroup.AggregationDesigns.Count &amp;gt; 0 &lt;span style='color:blue'&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                        .AggregationDesignID = _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                            MyMeasureGroup.AggregationDesigns.Item(0).ID&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;If&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                    .Source = &lt;span style='color:blue'&gt;New&lt;/span&gt; QueryBinding(MyCube.DataSource.ID, _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                        MyParitionQueryString(MyStartKey, MyEndKey))&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;With&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                MyMeasureGroup.Partitions.Add(MyPartition)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                MyPartition.Update()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;While&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;        MySqlReader.Close()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;        MySqlConnection.Close()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;        MyServer.Disconnect()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;        Dts.TaskResult = Dts.Results.Success&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Sub&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Private&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Function&lt;/span&gt; MySqlQueryString() &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;String&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; Ret &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;String&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;        Ret = &lt;span style='color:maroon'&gt;"select CalendarYear,"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"min(TimeKey),max(TimeKey) "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"from dbo.DimTime "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"Group by CalendarYear"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Return&lt;/span&gt; Ret&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Function&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Private&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Function&lt;/span&gt; MyParitionQueryString(&lt;span style='color:blue'&gt;ByVal&lt;/span&gt; StartKey &lt;span style='color:blue'&gt;As&lt;/span&gt; Int32, _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;ByVal&lt;/span&gt; EndKey &lt;span style='color:blue'&gt;As&lt;/span&gt; Int32) &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;String&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Dim&lt;/span&gt; Ret &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;String&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;        Ret = &lt;span style='color:maroon'&gt;"SELECT "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[ProductKey],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[OrderDateKey],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[DueDateKey],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[ShipDateKey],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[ResellerKey], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[EmployeeKey],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[PromotionKey],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[CurrencyKey],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[SalesTerritoryKey],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[SalesOrderNumber],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[SalesOrderLineNumber],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[RevisionNumber],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[OrderQuantity],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[UnitPrice],"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[ExtendedAmount], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[UnitPriceDiscountPct], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[DiscountAmount], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[ProductStandardCost], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[TotalProductCost], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[SalesAmount], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[TaxAmt], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[Freight], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[CarrierTrackingNumber], "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"[dbo].[FactResellerSales].[CustomerPONumber]"&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"FROM [dbo].[FactResellerSales] "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:maroon'&gt;"WHERE OrderDateKey BETWEEN "&lt;/span&gt; + StartKey.ToString + &lt;span style='color:maroon'&gt;" AND "&lt;/span&gt; + _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;                EndKey.ToString&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Return&lt;/span&gt; Ret&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Function&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:8pt'&gt;&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;Class&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-1867886599671956115?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/1867886599671956115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=1867886599671956115' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/1867886599671956115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/1867886599671956115'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2007/09/automating-partition-creation.html' title='Automating Partition Creation'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-5111464646663439196</id><published>2007-08-21T12:56:00.001-07:00</published><updated>2007-08-21T13:07:18.765-07:00</updated><title type='text'>AMO Script for Automating SSAS Database Backups</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;By Bryan C. Smith&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I apologize in advance, but I'm afraid I need to get up on my soapbox for this one.  Bear with me.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:#c00000'&gt;&lt;strong&gt;START SOAPBOX&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I have not seen folks pursuing regular backups of multidimensional databases as aggressively as they do relational databases.  Part of this is an attitude that multidimensional databases are simply redundant copies of their relational data sources.  Still another part of this is a lack of familiarity with the SSAS technology and the tools available to support regular backups.  Whatever the reason, the "zero data loss" mentality has not spread to the multidimensional landscape.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So, let's clearly state a few things.  Multidimensional databases do occasionally get corrupted,   developers do introduce errors, and systems do fail.  Projects housing the database definition do get lost and corrupted as well, even in Visual Source Safe and other related systems.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Though you may have a good set of project files available with which to rebuild a multidimensional database, important changes can be introduced through management activities that are not reflected in the BIDS project.  Furthermore, the time it takes to reprocess a cube following a failure is often not acceptable to end-users, especially when those databases support critical business processes.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It is important we insure regular backups are taken of our multidimensional databases and are managed in a manner commensurate with our relational data sources. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:#c00000'&gt;&lt;strong&gt;END SOAPBOX&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;So, I've taken a look at a few means for handling regular backups of multidimensional databases.  In the end, I find AMO the most appealing tool for this.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Below is a sample script that you may wish to explore for your own purposes.  This was implemented in the Script task of an SSIS package.  If you wish to test the script out, be sure to add a reference to the Analysis Management Objects library in your script editor.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Also, I need to note that this is not intended to be deployed to production as is.  If you wish to use this script in a production setting, please thoroughly test it, add appropriate error handling, etc.  &lt;span style='text-decoration:underline'&gt;&lt;strong&gt;If you use all or part of this script, you assume responsibility for its behavior.&lt;/strong&gt;&lt;/span&gt;  Sorry, but I've got to say it.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; System&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; System.Data&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; System.Math&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; Microsoft.SqlServer.Dts.Runtime&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;Imports&lt;/span&gt; Microsoft.AnalysisServices&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;Public&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Class&lt;/span&gt; ScriptMain&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Public&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Sub&lt;/span&gt; Main()&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Get TimeStamp in form YYYYMMDDhhmmss&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyTimestamp &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;String&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    MyTimestamp = &lt;span style='color:blue'&gt;CStr&lt;/span&gt;(Year(Now()) * 10000 + _&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;Month(Now()) * 100 + Day(Now()))&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    MyTimestamp += &lt;span style='color:blue'&gt;CStr&lt;/span&gt;(Hour(Now()) * 10000 + _&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;Minute(Now()) * 100 + Second(Now()))&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;br /&gt; &lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Connect to SSAS Instance&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyServer &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;New&lt;/span&gt; Server&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    MyServer.Connect(&lt;span style='color:maroon'&gt;"localhost"&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;br /&gt; &lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Backup Databases&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; BackupFileName &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;String&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; AllowOverwrite &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Boolean&lt;/span&gt; = &lt;span style='color:blue'&gt;True&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; BackupRemotePartitions &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Boolean&lt;/span&gt; = &lt;span style='color:blue'&gt;False&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; MyLocation() &lt;span style='color:blue'&gt;As&lt;/span&gt; BackupLocation&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; ApplyCompression &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Boolean&lt;/span&gt; = &lt;span style='color:blue'&gt;True&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;For&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Each&lt;/span&gt; MyDatabase &lt;span style='color:blue'&gt;As&lt;/span&gt; Database &lt;span style='color:blue'&gt;In&lt;/span&gt; MyServer.Databases&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;      BackupFileName = &lt;span style='color:maroon'&gt;"c:\temp\"&lt;/span&gt; + MyDatabase.Name + _&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;p style='margin-left: 36pt'&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:maroon'&gt;"_"&lt;/span&gt; + MyTimestamp + &lt;span style='color:maroon'&gt;".abf"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;      MyDatabase.Backup(_&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;p style='margin-left: 36pt'&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;BackupFileName, AllowOverwrite, _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='margin-left: 36pt'&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;BackupRemotePartitions, MyLocation, _&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='margin-left: 36pt'&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;ApplyCompression)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Next&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Disconnect from SSAS Instance&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    MyServer.Disconnect()&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    Dts.TaskResult = Dts.Results.Success&lt;br /&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Sub&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-5111464646663439196?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/5111464646663439196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=5111464646663439196' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/5111464646663439196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/5111464646663439196'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2007/08/amo-script-for-automating-ssas-database.html' title='AMO Script for Automating SSAS Database Backups'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-6009882730051593630</id><published>2007-08-19T08:07:00.001-07:00</published><updated>2007-08-19T08:07:31.510-07:00</updated><title type='text'>Implementing User-Specific Security in SSAS</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;By Bryan C. Smith&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;You often have a requirement to restrict access to members of a dimension on a user-specific basis. You can accomplish this through the use of what is referred to as "dynamic security". The purpose of this blog entry is to demonstrate a standard technique for implementing this.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In this demonstration, you will limit access to the Reseller dimension of the Adventure Works DW multidimensional database.  You will implement structures in both this database and the associated AdventureWorksDW relational database. It is assumed these databases are hosted locally, and it is recommended you backup both databases prior to making any of the required changes.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In addition, you will leverage two local user accounts, TestUser1 and TestUser2, created for the purposes of this demonstration. The name of your local system is assumed to be MyLaptop so that the full names of these accounts are MyLaptop\TestUser1 and MyLaptop\TestUser2.  When these exercises are completed, these two accounts should be dropped from your system.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;The User Dimension&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Your first objective is to create the User dimension.  This dimension simply houses a list of end-user accounts.  You start by implementing the DimUser table in the relational database:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;create&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;table&lt;/span&gt; DimUser &lt;span style='color:gray'&gt;(&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    UserKey &lt;span style='color:blue'&gt;int&lt;/span&gt; identity(1,1) &lt;span style='color:gray'&gt;not&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;null,&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    UserName &lt;span style='color:blue'&gt;varchar&lt;/span&gt;&lt;span style='color:gray'&gt;(&lt;/span&gt;256&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;not&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;null&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;alter&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;table&lt;/span&gt; DimUser &lt;span style='color:blue'&gt;add&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:blue'&gt;constraint&lt;/span&gt; PK_DimUser &lt;span style='color:blue'&gt;primary&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;key&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;userkey&lt;span style='color:gray'&gt;),&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:blue'&gt;constraint&lt;/span&gt; AK_DimUser &lt;span style='color:blue'&gt;unique&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;username&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;We then add entries for our two test accounts:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; DimUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserName&lt;span style='color:gray'&gt;) &lt;/span&gt;&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;&lt;span style='color:red'&gt;'MyLaptop\TestUser1'&lt;/span&gt;&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; DimUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserName&lt;span style='color:gray'&gt;) &lt;/span&gt;&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;&lt;span style='color:red'&gt;'MyLaptop\TestUser2'&lt;/span&gt;&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;TestUser1 and TestUser2 should have received UserKey values of 1 and 2, respectively.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In the multidimensional database, you now add the DimUser table to the DSV and create a new dimension, User, from it.  The User dimension has a single attribute hierarchy, User, whose key and name are the UserKey and UserName fields, respectively.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;The ResellerUser Fact Table&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;With the User dimension in place, you now need to construct a list of which resellers your individual users are allowed to see.  In the relational database, you implement this through the fact-less fact table, FactResellerUser:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;create&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;table&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    UserKey &lt;span style='color:blue'&gt;int&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;not&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;null,&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    ResellerKey &lt;span style='color:blue'&gt;int&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;not&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;null&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;alter&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;table&lt;/span&gt; FactResellerUser &lt;span style='color:blue'&gt;add&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:blue'&gt;constraint&lt;/span&gt; PK_FactRsellerUser &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='margin-left: 36pt'&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;primary&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;key&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;resellerkey&lt;span style='color:gray'&gt;,&lt;/span&gt;userkey&lt;span style='color:gray'&gt;),&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:blue'&gt;constraint&lt;/span&gt; FK_FactRsellerUser_UserKey &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;        &lt;span style='color:blue'&gt;foreign&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;key&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;				&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;        &lt;span style='color:blue'&gt;references&lt;/span&gt; DimUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;),&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:blue'&gt;constraint&lt;/span&gt; FK_FactRsellerUser_ResellerKey&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;        &lt;span style='color:blue'&gt;foreign&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;key&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;ResellerKey&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;        &lt;span style='color:blue'&gt;references&lt;/span&gt; DimReseller &lt;span style='color:gray'&gt;(&lt;/span&gt;ResellerKey&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;For the purposes of this demonstration, let's say TestUser1 (UserKey=1) may see reseller's with ResellerKey values of 1 to 5:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;1&lt;span style='color:gray'&gt;,&lt;/span&gt;1&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;1&lt;span style='color:gray'&gt;,&lt;/span&gt;2&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;1&lt;span style='color:gray'&gt;,&lt;/span&gt;3&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;1&lt;span style='color:gray'&gt;,&lt;/span&gt;4&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;1&lt;span style='color:gray'&gt;,&lt;/span&gt;5&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;Let's then say TestUser2 (UserKey=2) may see reseller's with ResellerKey values of 3 to 7:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;2&lt;span style='color:gray'&gt;,&lt;/span&gt;3&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;2&lt;span style='color:gray'&gt;,&lt;/span&gt;4&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;2&lt;span style='color:gray'&gt;,&lt;/span&gt;5&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;2&lt;span style='color:gray'&gt;,&lt;/span&gt;6&lt;span style='color:gray'&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;insert&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;into&lt;/span&gt; FactResellerUser &lt;span style='color:gray'&gt;(&lt;/span&gt;UserKey&lt;span style='color:gray'&gt;,&lt;/span&gt; ResellerKey&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;values&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:gray'&gt;(&lt;/span&gt;2&lt;span style='color:gray'&gt;,&lt;/span&gt;7&lt;span style='color:gray'&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;In the multidimensional database, you now add FactResellerUser to the DSV.  The relationships between this table and the DimReseller and DimUser tables should be reflected in the DSV as well.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In the Adventure Works cube, you then create a new measure group, Reseller User, based on the FactResellerUser table.  It will contain a single measure using the count aggregation function.  The BIDS Cube Designer should automatically add the User dimension to the cube and associate the Reseller User measure group with it.  The Cube Designer should also automatically associate our measure group with the Reseller dimension.  You will need to confirm this and manually update the cube if necessary.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Cleaning Up the Cube&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Reseller User measure group and the User dimension will provide the basis for your user-specific security, but these do not represent items with which you intend to have your users directly interact.  Your objective now is to hide these items.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To hide the measure group, set the Visible property on its single measure to False.  With no visible measures, the measure group will not be displayed to end-users.  To hide the User dimension in the cube, set the Visible property on the cube dimension to False.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It is important to keep in mind you have only hidden these items.  End-user's aware of their presence can still query them.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Setting-Up the Role&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Now it's time to set up the role in the multidimensional database.  You create a new role, MyRole, with Read access to the Adventure Works cube.  You add TestUser1 and TestUser2 as members.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Your next step is to limit access to the User dimension.  You don't want end-users to query the User dimension and see a list of user accounts with access to the database.  To secure it, you set an allowed set on the User attribute of the User &lt;span style='text-decoration:underline'&gt;database dimension&lt;/span&gt; as follows:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:maroon'&gt;STRTOSET&lt;/span&gt;("[User].[User].["+&lt;span style='color:blue'&gt;Username&lt;/span&gt;+"]")&lt;/span&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;The &lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;Username&lt;/span&gt; function returns a string which is the full name of the end-user's user account.  For example, when your TestUser1 user connects to the multidimensional database, the &lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;Username&lt;/span&gt; function will return "MyLaptop\TestUser1".  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The Allowed Set requires you to specify a set of members in the User attribute hierarchy.  You concatenate the string returned by the &lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;Username&lt;/span&gt; function with other strings to assemble a definition for a valid, one-member set. You then convert that string into an actual set with the &lt;span style='color:maroon; font-family:Courier New; font-size:10pt'&gt;STRTOSET&lt;/span&gt; function.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now it's time focus your attention on the Reseller dimension.  You will leverage the relationship between the User dimension and the Reseller dimension captured in the Reseller User measure group.  Of course, this relationship exists within the Adventure Works cube so you will be working with the Reseller &lt;span style='text-decoration:underline'&gt;cube dimension&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;For the Allowed Set on the Reseller attribute hierarchy, you specify the following:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:maroon'&gt;EXISTS&lt;/span&gt;(&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Reseller].[Reseller].&lt;span style='color:blue'&gt;Members&lt;/span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:maroon'&gt;STRTOSET&lt;/span&gt;("[User].[User].["+&lt;span style='color:blue'&gt;Username&lt;/span&gt;+"]"),&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    'Reseller User'&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    )&lt;/span&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;The &lt;span style='color:maroon; font-family:Courier New; font-size:10pt'&gt;EXISTS&lt;/span&gt; function returns the set of members from the first set, &lt;span style='font-family:Courier New; font-size:10pt'&gt;[Reseller].[Reseller].&lt;span style='color:blue'&gt;Members&lt;/span&gt;&lt;/span&gt;, associated with the members in the second set, &lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:maroon'&gt;STRTOSET&lt;/span&gt;("[User].[User].["+&lt;span style='color:blue'&gt;Username&lt;/span&gt;+"]")&lt;/span&gt;, as determined by a specified measure group, &lt;span style='font-family:Courier New; font-size:10pt'&gt;'Reseller User'&lt;/span&gt;.  It is important to note that in indicating measure group, you are must state the measure group's name, not the name of a measure within the measure group, and that name must be enclosed in single-quotes.  Many first time user's of this variation on the EXISTS function are frequently confused by these points.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Testing Security&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Once the MyRole is deployed to the SSAS instance, you need to test the set up.  To do this, you run SQL Server Management Studio as one of our test users, TestUser1.  (From the Start menu, select Programs then Microsoft SQL Server 2005.  Right-click the SQL Server Management Studio icon and select Run As from the context menu.  Enter the appropriate account information to start SSMS as TestUser1.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Once started, you open an MDX Query window and issue the following statement:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    {} &lt;span style='color:blue'&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [User].[User].&lt;span style='color:blue'&gt;Members&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;from&lt;/span&gt;    [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;;&lt;/span&gt;&lt;br /&gt;			&lt;/p&gt;&lt;div&gt;&lt;table border='0' style='border-collapse:collapse; background: #d9d9d9'&gt;&lt;colgroup&gt;&lt;col style='width:148px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;All&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;MyLaptop\TestUser1&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;You then execute this statement:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;with&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;member&lt;/span&gt; [Measures].[Reseller Key] &lt;span style='color:blue'&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Reseller].[Reseller].&lt;span style='color:maroon'&gt;CurrentMember&lt;/span&gt;.&lt;span style='color:blue'&gt;UniqueName&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Measures].[Reseller Key] &lt;span style='color:blue'&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Reseller].[Reseller].&lt;span style='color:blue'&gt;Members&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;from&lt;/span&gt;    [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;;&lt;/span&gt;&lt;br /&gt;				&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:188px'/&gt;&lt;col style='width:223px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #d9d9d9'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Reseller Key&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;All Resellers&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;[Reseller].[Reseller].[All Resellers]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;A Bike Store&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;[Reseller].[Reseller].&amp;amp;[1]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Advanced Bike Components&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;[Reseller].[Reseller].&amp;amp;[3]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Metropolitan Sports Supply&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;[Reseller].[Reseller].&amp;amp;[5]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Modular Cycle Systems&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;[Reseller].[Reseller].&amp;amp;[4]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Progressive Sports&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;[Reseller].[Reseller].&amp;amp;[2]&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-6009882730051593630?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/6009882730051593630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=6009882730051593630' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6009882730051593630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6009882730051593630'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2007/08/implementing-user-specific-security-in.html' title='Implementing User-Specific Security in SSAS'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-6465234942329269626</id><published>2007-08-13T13:04:00.001-07:00</published><updated>2007-08-13T18:21:07.256-07:00</updated><title type='text'>Non-Deterministic Functions in Named Sets</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;By Bryan C. Smith&lt;/p&gt;&lt;p&gt;Named sets are a great way to encapsulate complex or frequently used set definitions.  There are three ways to create a named set:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;The WITH SET clause of an MDX SELECT statement&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The CREATE SESSION SET statement&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The CREATE SET statement within the cube calculations script&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Which of these you select depends on your needs and determines how and when the set is resolved.   This is critical to understand when using non-deterministic functions as demonstrated in the following exercises.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;These exercises assume you have a copy of the Adventure Works DW database running on a local instance of SSAS 2005.  It is also assumed you have the permissions needed to adjust the Date/Time settings of this system.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;The WITH SET clause&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Change your system's time to the year 2004.  Open an MDX Query window in SSMS, connect to the local instance containing Adventure Works DW, and execute the following:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;with&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;set&lt;/span&gt; [Current Year] &lt;span style='color:blue'&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:maroon'&gt;STRTOMEMBER&lt;/span&gt;("[Date].[Calendar Year].[CY "+CSTR(YEAR(NOW()))+"]")&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Measures].[Reseller Sales Amount] &lt;span style='color:blue'&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Current Year] &lt;span style='color:blue'&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;from&lt;/span&gt;    [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:70px'/&gt;&lt;col style='width:154px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #d9d9d9'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Reseller Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;CY 2004&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;$16,038,062.60&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Change your system's time to the year 2003 and re-execute the same query:&lt;br /&gt;&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:70px'/&gt;&lt;col style='width:154px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #d9d9d9'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Reseller Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;CY 2003&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;$32,202,669.43&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;The named set created with the WITH SET clause is query-scoped.  It is compiled and resolved with each execution of the query but is not available to other queries unless the set definition is repeated.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;The CREATE SESSION SET Statement&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Set your system's time to the year 2004 and execute this query to create the named set:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;create&lt;/span&gt;&lt;br /&gt;       &lt;span style='color:blue'&gt;session&lt;/span&gt;&lt;br /&gt;       &lt;span style='color:blue'&gt;set&lt;/span&gt; [Adventure Works].[Current Year] &lt;span style='color:blue'&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:maroon'&gt;STRTOMEMBER&lt;/span&gt;("[Date].[Calendar Year].[CY "+CSTR(YEAR(NOW()))+"]")&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;/p&gt;&lt;p&gt;With execution completed, change your system's time to the year 2003.  Now, execute this query:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Measures].[Reseller Sales Amount] &lt;span style='color:blue'&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Current Year] &lt;span style='color:blue'&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;from&lt;/span&gt;    [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:70px'/&gt;&lt;col style='width:154px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #d9d9d9'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Reseller Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;CY 2004&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;$16,038,062.60&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;A couple things are happening here.  First, the CREATE SESSION SET statement is compiled separate from the query.  Any query utilizing the connection within which the set was compiled can leverage it.  Once the connection is terminated, the set is lost.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Next, the set is resolved to its members when the CREATE SESSION SET is submitted.  Set membership does not change until the set is dropped and recreated.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;The CREATE SET Statement in the Calculations Script&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Change your system's time back to the year 2004.  In BIDS, add the following to the calculations script and redeploy the cube:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;create&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:blue'&gt;set&lt;/span&gt; [Adventure Works].[Current Year] &lt;span style='color:blue'&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    &lt;span style='color:maroon'&gt;STRTOMEMBER&lt;/span&gt;("[Date].[Calendar Year].[CY "+CSTR(YEAR(NOW()))+"]")&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;;    &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Change your system's time to the year 2003, reconnect to the Adventure Works DW database, and execute the following query.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Measures].[Reseller Sales Amount] &lt;span style='color:blue'&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    [Current Year] &lt;span style='color:blue'&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;from&lt;/span&gt;    [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:70px'/&gt;&lt;col style='width:154px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #d9d9d9'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Reseller Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;CY 2003&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;$32,202,669.43&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Now, reset your system's time to the year 2004 and re-execute the query from above:&lt;br /&gt;&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:70px'/&gt;&lt;col style='width:154px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #d9d9d9'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Reseller Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;CY 2003&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;$32,202,669.43&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Open a new query window and execute the SELECT statement again:&lt;br /&gt;&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:70px'/&gt;&lt;col style='width:154px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #d9d9d9'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Reseller Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;CY 2003&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;$32,202,669.43&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;With your system's time still set to the year 2004, restart the SSAS 2005 service and reconnect.  Execute the query again:&lt;br /&gt;&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:70px'/&gt;&lt;col style='width:154px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #d9d9d9'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 0.5pt; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;Reseller Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #d9d9d9; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 0.5pt; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;CY 2004&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 0.5pt; border-right:  solid black 0.5pt'&gt;&lt;p&gt;$16,038,062.60&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Unlike the session-scoped set, the named set is not resolved until the first time it is used.  The members of that set are then defined and used across all queries until the SSAS service is restarted.  With the first query submitted against the restarted service, the set's membership is defined again.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Before going further, please reset your system to the current time.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Additional Thoughts&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I originally wrote this blog entry to use the RND function as my non-deterministic function.  I would randomly select a Reseller to demonstrate the patterns shown above.  I found an unusual pattern when I deployed the named set as part of the calculations script. Restarting the SSAS service resulted in a random member being returned with the first query, but redeployment of the database reset the membership of the set to the same member every time.   I guess the take home message here is when using non-deterministic functions in your named sets, be sure to understand the basic patterns and test thoroughly.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-6465234942329269626?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/6465234942329269626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=6465234942329269626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6465234942329269626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6465234942329269626'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2007/08/non-deterministic-functions-in-named.html' title='Non-Deterministic Functions in Named Sets'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-293420563704292475</id><published>2007-07-25T19:58:00.001-07:00</published><updated>2007-07-25T19:58:56.138-07:00</updated><title type='text'>Data Member, Part 2</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;By Bryan C. Smith&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In my previous post, you took a look at Amy, an employee who supervises three other employees, Jae, Rachel, and Ranjit.  Each of these four employees has sales quotas associated with them.  Since Amy is the supervisor of Jae, Rachel, and Ranjit, her sales quota reflects her personal sales quota as well as those from Jae, Rachel, and Ranjit.  You used the &lt;span style='color:#c00000; font-family:Courier New'&gt;DataMember &lt;/span&gt;function to separate the sales quota directly attributable to Amy from her total sales quota figure:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='color:blue'&gt;with&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;member&lt;/span&gt; [Measures].[Personal Quota] &lt;span style='color:blue'&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     ([Employee].[Employees].&lt;span style='color:maroon'&gt;DataMember&lt;/span&gt;, [Measures].[Sales Amount Quota]),&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     format="Currency"&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New'&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     {[Measures].[Sales Amount Quota],[Measures].[Personal Quota]} &lt;span style='color:blue'&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     &lt;span style='color:blue'&gt;DESCENDANTS&lt;/span&gt;([Employee].[Employees].[Amy E. Alberts],1,&lt;span style='color:blue'&gt;SELF_AND_BEFORE&lt;/span&gt;) &lt;span style='color:blue'&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='color:blue'&gt;from&lt;/span&gt; [Adventure Works];&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;				&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:183px'/&gt;&lt;col style='width:144px'/&gt;&lt;col style='width:114px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #eeece1'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Sales Amount Quota&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Personal Quota&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Amy E. Alberts&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$24,202,000.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$1,124,400.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Jae B. Pak&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$12,547,100.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$12,547,100.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Rachel B. Valdez&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$3,269,800.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$3,269,800.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Ranjit R. Varkey Chudukatil&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$7,260,700.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$7,260,700.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Jae, Rachel, and Ranjit are referred to as leaf members of the hierarchy while Amy is referred to as a non-leaf member. Leaf members have no children while non-leaf members do.  (At this point, you haven't actually proven Jae, Rachel, and Ranjit have no children, but you will in the next query.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In a parent-child hierarchy it is common for both leaf and non-leaf members to have data in the fact table directly associated with them.  The hierarchy's &lt;span style='font-family:Courier New'&gt;MembersWithData&lt;/span&gt; property determines how SSAS presents this data to you.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;If the &lt;span style='font-family:Courier New'&gt;MembersWithData&lt;/span&gt; property is set to &lt;span style='font-family:Courier New'&gt;NonLeafMembersHidden&lt;/span&gt;, which is the default when designed in BIDS, you get the behavior we see above – the values directly attributed to a non-leaf member are simply presented as part of the total value for that member.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;You've seen you can get to the value associated with the non-leaf member with the &lt;span style='color:#c00000; font-family:Courier New'&gt;DataMember&lt;/span&gt; function.  Still, SSAS has the ability to present this another way.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you set the &lt;span style='font-family:Courier New'&gt;MembersWithData&lt;/span&gt; property to &lt;span style='font-family:Courier New'&gt;NonLeafMembersVisible&lt;/span&gt;, SSAS will present the value directly attributed to a non-leaf member as a child of that member.  (Changing the value will require a re-deploy but not a re-process.) The easiest way to explain this is to simply demonstrate it:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='color:blue'&gt;with&lt;/span&gt;&lt;br /&gt;						&lt;span style='color:blue'&gt;member&lt;/span&gt; [Measures].[Personal Quota] &lt;span style='color:blue'&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     ([Employee].[Employees].&lt;span style='color:maroon'&gt;DataMember&lt;/span&gt;, [Measures].[Sales Amount Quota]),&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     format="Currency"&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='color:blue'&gt;member&lt;/span&gt; [Measures].[Member Level] &lt;span style='color:blue'&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     [Employee].[Employees].&lt;span style='color:maroon'&gt;CurrentMember&lt;/span&gt;.&lt;span style='color:blue'&gt;Level&lt;/span&gt;.&lt;span style='color:blue'&gt;Name&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='color:blue'&gt;member&lt;/span&gt; [Measures].[Number of Children] &lt;span style='color:blue'&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     [Employee].[Employees].&lt;span style='color:maroon'&gt;CurrentMember&lt;/span&gt;.&lt;span style='color:maroon'&gt;Children&lt;/span&gt;.&lt;span style='color:blue'&gt;Count&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New'&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     {[Measures].[Sales Amount Quota],&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     [Measures].[Personal Quota],&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     [Measures].[Member Level],&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     [Measures].[Number of Children]} &lt;span style='color:blue'&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     &lt;span style='color:blue'&gt;DESCENDANTS&lt;/span&gt;([Employee].[Employees].[Amy E. Alberts],1,&lt;span style='color:blue'&gt;SELF_AND_BEFORE&lt;/span&gt;) &lt;span style='color:blue'&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='color:blue'&gt;from&lt;/span&gt; [Adventure Works];&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;					&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:174px'/&gt;&lt;col style='width:141px'/&gt;&lt;col style='width:113px'/&gt;&lt;col style='width:105px'/&gt;&lt;col style='width:105px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #eeece1'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Sales Amount Quota&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Personal Quota&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Member Level&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Number of Children&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Amy E. Alberts&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$24,202,000.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$1,124,400.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 04&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;4&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Amy E. Alberts&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$1,124,400.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$1,124,400.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 05&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Jae B. Pak&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$12,547,100.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$12,547,100.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 05&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Rachel B. Valdez&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$3,269,800.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$3,269,800.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 05&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Ranjit R. Varkey Chudukatil&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$7,260,700.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$7,260,700.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 05&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Take a close look at the results.  You've calculated the level name along with the number of children for each member.  The number of children identifies non-leaf and leaf members.  The member level helps you identify how these members are represented in the hierarchy.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;With the &lt;span style='font-family:Courier New'&gt;MembersWithData&lt;/span&gt; property set to &lt;span style='font-family:Courier New'&gt;NonLeafMembersVisible&lt;/span&gt;, a leaf member representation of Amy is added to our results as a child of the Amy non-leaf member.  The non-leaf Amy member is just as before and the leaf Amy member simply holds the quota value directly attributable to Amy.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Understanding the difference between these two representations of Amy without the benefit of a walk-through such as this is a little confusing.  The &lt;span style='font-family:Courier New'&gt;MembersWithDataCaption&lt;/span&gt; property exists to address this problem.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The property accepts a string that serves as a template for the name of the SSAS-generated non-leaf member. An asterisk (*) in the string serves as a placeholder for the original member name.  A common string used for &lt;span style='font-family:Courier New'&gt;MembersWithDataCaption&lt;/span&gt; property is &lt;em&gt;* (data)&lt;/em&gt;.  Here are the results from the query above with the &lt;span style='font-family:Courier New'&gt;MembersWithDataCaption&lt;/span&gt; property set to this value:&lt;br /&gt;&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:174px'/&gt;&lt;col style='width:141px'/&gt;&lt;col style='width:113px'/&gt;&lt;col style='width:105px'/&gt;&lt;col style='width:105px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #eeece1'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Sales Amount Quota&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Personal Quota&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Member Level&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Number of Children&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Amy E. Alberts&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$24,202,000.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$1,124,400.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 04&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;4&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Amy E. Alberts (data)&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$1,124,400.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$1,124,400.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 05&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Jae B. Pak&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$12,547,100.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$12,547,100.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 05&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Rachel B. Valdez&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$3,269,800.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$3,269,800.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 05&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Ranjit R. Varkey Chudukatil&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$7,260,700.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$7,260,700.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Employee Level 05&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;If you remember back to my previous blog entry, I started out with a simple breakdown of these sales quotas.  Using the &lt;span style='font-family:Courier New'&gt;MembersWithData&lt;/span&gt; and &lt;span style='font-family:Courier New'&gt;MembersWithDataCaption&lt;/span&gt; properties, we've come full circle having SSAS provide us the data in a similar structure:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Amy $24M Total&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;ul style='margin-left: 72pt'&gt;&lt;li&gt;Amy (personal) $1M&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;ul style='margin-left: 72pt'&gt;&lt;li&gt;Jae $13M&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;ul style='margin-left: 72pt'&gt;&lt;li&gt;Rachel $3M&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ranjit $7M&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;So, what are the right settings for the &lt;span style='font-family:Courier New'&gt;MembersWithData &lt;/span&gt;and &lt;span style='font-family:Courier New'&gt;MembersWithDataCaption&lt;/span&gt; properties? It really depends on your requirements.  I recommend fully understanding how data is presented in a parent-child hierarchy and then sitting down with your end-user representatives to discuss the options.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;By their nature, parent-child hierarchies can be slightly difficult for users to wrap their heads around.  Walking users through a common example of parent-child hierarchy, such as employees in an organization, helps to explain the basic concepts. Using sample data sets, such as the AdventureWorks DW database, to illustrate these concepts can also assist with their understanding.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;It's also important to keep in mind these properties can be changed relatively quickly should you decide at a later date you would prefer your data presented another way.  Remember that changing the &lt;span style='font-family:Courier New'&gt;MembersWithData&lt;/span&gt; property affects the number of children associated with a non-leaf member which can have implications for calculations across levels in the hierarchy.  Thoroughly test any calculated members before and after changing this property, but also keep in mind calculated members can be re-deployed to your cube without re-processing.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-293420563704292475?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/293420563704292475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=293420563704292475' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/293420563704292475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/293420563704292475'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2007/07/data-member-part-2.html' title='Data Member, Part 2'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-948368791767948355</id><published>2007-07-25T19:53:00.001-07:00</published><updated>2007-07-25T19:53:43.074-07:00</updated><title type='text'>Data Member, Part 1</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;By Bryan C. Smith&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Take a moment to think about a typical organization.  You have an employee.  That employee has a supervisor who is also an employee who has a supervisor (who is also an employee) and so on and so on.   (This is a classic parent-child hierarchy.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If these employees are in a sales organization, sales quota may have been assigned.  Those employees that are supervisors are responsible for the sales quotas of the employees below them but may also have sales quotas of their own.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Let's say you have an employee in a sales organization named Amy.  She supervises three other employees, Jae, Rachel, and Ranjit.  Amy is responsible for making sure these guys make their sales quotas of $13M, $3M, and $7M, respectively.  Amy also has a personal sales target of $1M.  We can breakdown Amy's sales quota like this:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;Amy $24M Total&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Amy (personal) $1M&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Jae $13M&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rachel $3M&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ranjit $7M&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;The $24M figure represents the total sales for which Amy has responsibility while she is only directly responsible for $1M of that.  The remaining $23M represents the sales quotas she manages through her supervisees.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Let's now look at how SSAS 2005 handles all this. Open an MDX query window in SQL Server Management Studio, connect to the Adventure Works DW database, and execute the following query:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New'&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     [Measures].[Sales Amount Quota] &lt;span style='color:blue'&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     &lt;span style='color:blue'&gt;DESCENDANTS&lt;/span&gt;([Employee].[Employees].[Amy E. Alberts], 1, &lt;span style='color:blue'&gt;SELF_AND_BEFORE&lt;/span&gt;) &lt;span style='color:blue'&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='color:blue'&gt;from&lt;/span&gt; [Adventure Works];&lt;/span&gt;&lt;br /&gt;				&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:183px'/&gt;&lt;col style='width:144px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #eeece1'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Sales Amount Quota&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Amy E. Alberts&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$24,202,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Jae B. Pak&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$12,547,100.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Rachel B. Valdez&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$3,269,800.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Ranjit R. Varkey Chudukatil&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$7,260,700.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Through the &lt;span style='color:blue; font-family:Courier New'&gt;DESCENDANTS&lt;/span&gt;&lt;span style='color:#0070c0'&gt;&lt;br /&gt;					&lt;/span&gt;function, you asked SSAS to return the Sales Amount Quota for those employees one level below Amy E. Alberts and Amy herself. If you total the values for Jae, Rachel, and Ranjit, we come up with $23,077,600.00.  That's $1,124,400.00 short of the total.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;From these results, you can deduce the approximately $1M deficit represents Amy's personal quota.  But how do you get SSAS to explicitly present this?  You do it with the &lt;span style='color:#c0504d; font-family:Courier New'&gt;DataMember &lt;/span&gt;function: &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='color:blue'&gt;with&lt;/span&gt;&lt;br /&gt;						&lt;span style='color:blue'&gt;member&lt;/span&gt; [Measures].[Personal Quota] &lt;span style='color:blue'&gt;as&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     ([Employee].[Employees].&lt;span style='color:maroon'&gt;DataMember&lt;/span&gt;, [Measures].[Sales Amount Quota]),&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     format="Currency"&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New'&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     {[Measures].[Sales Amount Quota],[Measures].[Personal Quota]} &lt;span style='color:blue'&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;     &lt;span style='color:blue'&gt;DESCENDANTS&lt;/span&gt;([Employee].[Employees].[Amy E. Alberts],1,&lt;span style='color:blue'&gt;SELF_AND_BEFORE&lt;/span&gt;) &lt;span style='color:blue'&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='color:blue'&gt;from&lt;/span&gt; [Adventure Works];&lt;/span&gt;&lt;br /&gt;					&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:183px'/&gt;&lt;col style='width:144px'/&gt;&lt;col style='width:114px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #eeece1'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt; &lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Sales Amount Quota&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid black 1.0pt; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Personal Quota&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Amy E. Alberts&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$24,202,000.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$1,124,400.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Jae B. Pak&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$12,547,100.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$12,547,100.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Rachel B. Valdez&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$3,269,800.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$3,269,800.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='background: #eeece1; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid black 1.0pt; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;Ranjit R. Varkey Chudukatil&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$7,260,700.00&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  solid black 1.0pt'&gt;&lt;p&gt;$7,260,700.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Your results now show definitively that Amy owns a $1M personal sales quota which contributes to the $24M overall quota she is responsible for delivering.  You also see that Jae, Rachel, and Ranjit, Amy's supervisees, are solely responsible for their own quotas.  You cannot say Jae, Rachel, and Ranjit have no supervisees of their own (without submitting additional queries), but you can say none of these three guys is managing quota values from any supervisees they may have.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So, when you request a value for a member in a parent-child hierarchy, such as the Employees hierarchy of the Employee dimension, you need to be aware SSAS combines those values directly tied to that member with values associated with that member's children. You need to use the &lt;span style='color:#c0504d; font-family:Courier New'&gt;DataMember&lt;/span&gt; function to get at the value directly tied to a member.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It needs to be pointed out that you can tell SSAS to display a member's directly attributable data a little differently when that member also has children with values. In my next blog entry, we'll revisit Amy's sales team and take a look at those settings and how they impact these results.&lt;br /&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-948368791767948355?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/948368791767948355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=948368791767948355' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/948368791767948355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/948368791767948355'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2007/07/data-member-part-1.html' title='Data Member, Part 1'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-4431872874404744954</id><published>2007-07-25T19:34:00.001-07:00</published><updated>2007-07-30T09:07:49.361-07:00</updated><title type='text'>IgnoreUnrelatedDimensions</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;By Bryan C. Smith&lt;/p&gt;&lt;p&gt;Imagine you have a highly simplified Adventure Works cube. In this cube, you have two measure groups, Reseller Sales and Internet Sales. Reseller Sales has relationships with the Geography and Date dimensions and has one measure, Reseller Sales Amount. Internet Sales has a relationship with just the Date dimension and a single measure, Internet Sales Amount. To simplify things even further, imagine the Geography dimension has a single attribute hierarchy, Country, and Date has three attribute hierarchies, Calendar Year, Calendar Quarter, and Date.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Every reference to data within this cube is based on a coordinate system. Each attribute hierarchy in the cube represents an axis in the coordinate. For our purposes, let's say the coordinates are in the format of ([Geography].[Country], [Date].[Calendar Year], [Date].[Calendar Quarter], [Date].[Date]). (For the sake of brevity, I've removed the attribute hierarchy from the Measures dimension.) Our MDX SELECT statements then assemble coordinates which SSAS resolve to return a cellset:&lt;br /&gt;&lt;/p&gt;&lt;br&gt;&lt;span style="font-family:Courier New;color:blue;"&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/br&gt;&lt;br&gt;&lt;span style="font-family:Courier New;"&gt;[Measures].[Reseller Sales Amount] &lt;span style="color:blue;"&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/br&gt;&lt;br&gt;&lt;span style="font-family:Courier New;"&gt;Geography.Country.&lt;span style="color:blue;"&gt;Members&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/br&gt;&lt;br&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;from&lt;/span&gt; [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/br&gt;&lt;br&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; ([Date].[Calendar Year].[CY 2003])&lt;br /&gt;&lt;/span&gt;&lt;/br&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 119px"&gt;&lt;col style="WIDTH: 155px"&gt;&lt;col style="WIDTH: 40px"&gt;&lt;col style="WIDTH: 334px"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 8px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: black 0.75pt solid; PADDING-LEFT: 8px; BACKGROUND: #d9d9d9; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;Reseller Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;&lt;strong&gt;Coordinates&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;All Geographies&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$32,202,669.43&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('All Geographies', 'CY 2003', 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Australia&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$847,430.96&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('Australia', 'CY 2003', 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Canada&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$5,651,305.43&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('Canada', 'CY 2003', 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;France&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$2,373,804.04&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('France', 'CY 2003', 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Germany&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$1,098,866.68&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('Germany', 'CY 2003', 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;United Kingdom&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$2,160,145.83&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('United Kingdom', 'CY 2003', 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;United States&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$20,071,116.48&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 8px; BORDER-TOP: medium none; PADDING-LEFT: 8px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('United States', 'CY 2003', 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;As was mentioned at the top of this entry, the Internet Sales Amount measure group does not have a relationship with the Geography dimension. Still, the cube's coordinate structure, ([Geography].[Country], [Date].[Calendar Year], [Date].[Calendar Quarter], [Date].[Date]), must be employed. With the measure group's IgnoreUnrelatedDimensions property set to True, which is the default setting for this property, the All member is substituted in place of any specified members from unrelated dimensions:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;color:blue;"&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;[Measures].[Internet Sales Amount] &lt;span style="color:blue;"&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Geography.Country.&lt;span style="color:blue;"&gt;Members&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;from&lt;/span&gt; [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; ([Date].[Calendar Year].[CY 2003])&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 118px"&gt;&lt;col style="WIDTH: 147px"&gt;&lt;col style="WIDTH: 35px"&gt;&lt;col style="WIDTH: 344px"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.75pt solid; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;Internet Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;&lt;strong&gt;Coordinates&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;All Geographies&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$9,791,060.30&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('All Geographies', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Australia&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$9,791,060.30&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('All Geographies', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Canada&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$9,791,060.30&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('All Geographies', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;France&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$9,791,060.30&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('All Geographies', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Germany&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$9,791,060.30&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('All Geographies', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;United Kingdom&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$9,791,060.30&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('All Geographies', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;United States&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$9,791,060.30&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('All Geographies', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;When the IgnoreUnrelatedDimensions property is set to False, SSAS does not perform any substitutions:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;color:blue;"&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;[Measures].[Internet Sales Amount] &lt;span style="color:blue;"&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Geography.Country.&lt;span style="color:blue;"&gt;Members&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;from&lt;/span&gt; [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; ([Date].[Calendar Year].[CY 2003])&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;;&lt;br /&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 118px"&gt;&lt;col style="WIDTH: 147px"&gt;&lt;col style="WIDTH: 35px"&gt;&lt;col style="WIDTH: 344px"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.75pt solid; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;Internet Sales Amount&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;&lt;strong&gt;Coordinates&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;All Geographies&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;$9,791,060.30&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('All Geographies', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Australia&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('Australia', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Canada&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('Canada', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;France&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('France', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Germany&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('Germany', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;United Kingdom&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('United Kingdom', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;United States&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.75pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.75pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;?&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: medium none; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"&gt;&lt;p style="TEXT-ALIGN: center"&gt;('United States', 'CY 2003', , 'All Times', 'All Times')&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So, what about the situation where a measure group is only partially related to the attribute hierarchies within a dimension? Let's expand this simple cube to include a Sales Targets measure group. The Sales Targets measure group has a single measure, Sales Amount Quota, and has a relationship to just the Date dimension. Unlike the other measure groups which are related to the Date dimension at the Date attribute level, the Sales Targets measure group is related at the Calendar Quarter attribute level.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;With IgnoreUnrelatedDimensions set to False on the Sales Targets measure group, we see the following behavior. Note, the number of rows has been limited with the HEAD function for display purposes only:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;color:blue;"&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;[Measures].[Sales Amount Quota] &lt;span style="color:blue;"&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:maroon;"&gt;HEAD&lt;/span&gt;([Date].[Date].&lt;span style="color:blue;"&gt;Members&lt;/span&gt;,10) &lt;span style="color:blue;"&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;from&lt;/span&gt; [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; ([Date].[Calendar Year].[CY 2003])&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;;&lt;br /&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 115px"&gt;&lt;col style="WIDTH: 144px"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="BACKGROUND: #d9d9d9"&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Sales Amount Quota&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;All Periods&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 1, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 2, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 3, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 4, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 5, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 6, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 7, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 8, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 9, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;(null)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Executing the same query with IngoreUnrelatedDimensions set to True, returns the following:&lt;br /&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 115px"&gt;&lt;col style="WIDTH: 144px"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="BACKGROUND: #d9d9d9"&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Sales Amount Quota&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;All Periods&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 1, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 2, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 3, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 4, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 5, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 6, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 7, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 8, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;January 9, 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Retrieving data at the Calendar Quarter level at which the relationship exists returns the following:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;color:blue;"&gt;select&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;[Measures].[Sales Amount Quota] &lt;span style="color:blue;"&gt;on&lt;/span&gt; 0,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:maroon;"&gt;HEAD&lt;/span&gt;([Date].[Calendar Quarter].&lt;span style="color:blue;"&gt;Members&lt;/span&gt;,10) &lt;span style="color:blue;"&gt;on&lt;/span&gt; 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;from&lt;/span&gt; [Adventure Works]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; ([Date].[Calendar Year].[CY 2003])&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;;&lt;br /&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 115px"&gt;&lt;col style="WIDTH: 144px"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="BACKGROUND: #d9d9d9"&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Sales Amount Quota&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;All Periods&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$38,782,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Q1 CY 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$5,913,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Q2 CY 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$8,039,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Q3 CY 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$13,733,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BACKGROUND: #d9d9d9; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;Q4 CY 2003&lt;/p&gt;&lt;/td&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;$11,097,000.00&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;What we can take from this is that when IgnoreUnrelatedDimensions is set to True, axis members associated with specific attribute hierarchies with which the measure group does not have a relationship are converted to the All member. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-4431872874404744954?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/4431872874404744954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=4431872874404744954' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4431872874404744954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4431872874404744954'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2007/07/ignoreunrelateddimensions.html' title='IgnoreUnrelatedDimensions'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-4164356373677048979</id><published>2007-07-23T16:54:00.001-07:00</published><updated>2007-07-23T16:54:35.074-07:00</updated><title type='text'>Greetings!</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;We have had a blog at SQL Junkies for a few years, but have not posted for a long time. With Word 2007's new post-to-blog feature, we decided to move to a new blog space. Blogger is pretty simple, so we're moving here. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;We've accumulated a number of topics we want to blog about, and hopefully this will make it easier for us to post more actively. If we can figure out an easy way to do it, we may re-post some of our favorite entries from the old SQL Junkies blog.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Watch for more soon!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The Hitachi Consulting Microsoft BI Blog Team&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-4164356373677048979?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/4164356373677048979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=4164356373677048979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4164356373677048979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4164356373677048979'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2007/07/greetings.html' title='Greetings!'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-7520094628474654775</id><published>2007-07-04T05:18:00.000-07:00</published><updated>2007-08-27T12:35:57.547-07:00</updated><title type='text'>The 'Currency' number format style is Evil [Reed]</title><content type='html'>&lt;BR&gt;I always used to use Currency formatting for currency values, but it's totally wrong in a database environment. Currency displays using the current locale's currency setting. But the values in your database have a pre-known, specific currency. If the values in your database are in Euros, then you don't want somebody from California to see them showing up as dollars. The origin of the Currency style was to simplify life for people using tools like Excel to input numbers. But when used with a database, they can cause rediculous restatements. Once I thought about it, Currency format is so rediculous that I can't believe I used to use it all the time. Hence the blog entry. &lt;br /&gt;&lt;br /&gt;Even when doing currency conversions--you want to be in control of which currency format the values take. You NEVER want to be at the mercy of the current user's control panel whims.&lt;br /&gt;&lt;br /&gt;Cheers. Happy 4th of July to all us Americans. [Reed]&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-7520094628474654775?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/7520094628474654775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=7520094628474654775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/7520094628474654775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/7520094628474654775'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2007/07/number-format-style-is-evil-reed.html' title='The &amp;#39;Currency&amp;#39; number format style is Evil [Reed]'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-1918938102901153532</id><published>2006-11-06T06:53:00.000-08:00</published><updated>2007-08-27T12:35:59.387-07:00</updated><title type='text'>More info on RS and AS [Reed]</title><content type='html'>&lt;BR&gt;A couple more ways the RS MDX Builder is smarter than I thought. I always wondered about some of the complexity. &lt;br /&gt;&lt;br /&gt;-	When you use a parameter, there’s no way around using StrToSet to turn the parameter into an MDX set. That leaves an opening for inserting malicious code. The auto-generated MDX adds the ,CONSTRAINED flag to StrToSet, which says that the only acceptable contents of the string are literal MDX names, so it won’t run any MDX functions (such as .Children), and it won’t run any inserted code.&lt;br /&gt;-	In AS2005, anytime you use a subcube subquery to filter down to a single date, there’s a problem with date-relative calculations because the “current member” in the report is still the “All” member of the date hierarchy. This is a serious problem right now with Excel 2007 PivotTables and MDX. The RS MDX builder adds a funny-looking WHERE clause that basically says, if you single-selected a date for the parameter, make it the current member so that date-relative calculations will work properly.”&lt;br /&gt;&lt;br /&gt;Reed&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-1918938102901153532?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/1918938102901153532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=1918938102901153532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/1918938102901153532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/1918938102901153532'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/11/more-info-on-rs-and-as-reed.html' title='More info on RS and AS [Reed]'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-4154612518968482718</id><published>2006-10-13T07:47:00.000-07:00</published><updated>2007-08-27T12:36:01.722-07:00</updated><title type='text'>Combining Dimensions [Reed]</title><content type='html'>&lt;BR&gt;The way AS2005 manages attributes in a dimension changes the design dynamic a bit: Which attributes should be combined into a single dimension? I've run into this issue from two sides. &lt;br /&gt;&lt;br /&gt;On the one hand, we had a Project dimension with a lot of changing attributes. For example, the Project Manager would change frequently. To avoid dealing with creating lots of Type II instances of the Project, we decided to pull the Project Manager off as a separate key in the fact, making it a "Rapidly Changing Dimension". In 2000, this was often a very effective strategy. It's simple and easy to implement, but in 2005, we found that query performance was very bad. Even thougy the PM to Project relationship is very sparse, each crosstab query had to do a cartesian product and find the empty intersections. When we moved the PM back into the Project dimension, AutoExist suddenly made it really fast to find the projects for a given manager, or the managers for a given project.&lt;br /&gt;&lt;br /&gt;Conversely, I had a client with lots of customers and lots of products, but where the relationship between customers and products was very stable and very sparse. It seemed bizarre, but we explored putting both customers and products into a single dimension, with the root key as the Customer/SKU combination. Again, the query performance gain was substantial, especially when looking for which customers buy which products, etc. In 2000, I would never have considered putting Customer and Product into a single dimension, but given the high cardinality, stable relationship, and inherent sparsity, it seems to be a really good idea in 2005.&lt;br /&gt;&lt;br /&gt;- Reed&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-4154612518968482718?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/4154612518968482718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=4154612518968482718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4154612518968482718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4154612518968482718'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/10/combining-dimensions-reed.html' title='Combining Dimensions [Reed]'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-3116545566742005088</id><published>2006-10-13T06:45:00.000-07:00</published><updated>2007-08-27T12:36:03.286-07:00</updated><title type='text'>ByAccount aggregation bug workaround [Joe Kasprzak]</title><content type='html'>&lt;BR&gt;When working with Account type dimensions and semi-additive Measures across a variety of account types with different aggregation functions, you can use the ByAccount aggregation function to set the proper aggregation behavior.  &lt;br /&gt;&lt;br /&gt;There is a bug that sometimes occurs to the finance measure where the ByAccount option doesn’t properly set various aggregation rules for each account type.   This can be manually fixed by the following process:&lt;br /&gt;&lt;br /&gt;* Right click the solution in the Solution Explorer window and click “Edit Database” to display the current settings for the finance measures by account type.&lt;br /&gt; &lt;br /&gt;The ByAccount aggregation function should have set for each account type to either  sum for additive or lastnonempty for accounts which are semi-additive.&lt;br /&gt;&lt;br /&gt;* Click the Aggregation Function in the Account Type Mapping box and change the aggregation function from Sum to Lastnonempty for the Flow, Liability, Balance, Asset and Statistical account types. &lt;br /&gt;&lt;br /&gt;- Joe&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-3116545566742005088?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/3116545566742005088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=3116545566742005088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3116545566742005088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3116545566742005088'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/10/byaccount-aggregation-bug-workaround.html' title='ByAccount aggregation bug workaround [Joe Kasprzak]'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-8409293547101370118</id><published>2006-09-01T05:03:00.000-07:00</published><updated>2007-08-27T12:36:05.011-07:00</updated><title type='text'>Don't declare false Attribute Relationships [Reed]</title><content type='html'>&lt;BR&gt;&lt;P&gt;It's really important to declare attribute relationships when they do exists. But what happens if you say A implies B when it isn't true. I somehow assumed that when you process the dimension, you'd get an error, but not so.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;In the Adventure Works Date dimension, I created an attribute relationship from Day of Month to Day of Week. This is, of course, rediculous. Just because it's the 14th, that doesn't mean it's Wednesday. Just for fun, I then created a User Hierarchy of the same, with Day of Week drilling down to Day of Month. I got the nice, satisfying green triangle on the hierarchy. Then I deployed it.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;As I said, I expected some kind of error or warning, but the days of the month just got a random weekday assigned. (I assume it has to do with the order the records were read from the dimension table.) So Sunday got associated with 12, 15, 18, and Monday with 1, 4, 21, 24, etc. This is actually the same behavior that AS2K had--if you created Day of Week as a member property of Day of Month, it would just pick one. I just thought 2005 would complain.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;So, the moral is that you really really want to create attribute relationships when they are meaninful, but be careful not to create ones that are not, and don't trust silence as an indication of success.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;-- Reed Jacobson&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-8409293547101370118?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/8409293547101370118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=8409293547101370118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8409293547101370118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8409293547101370118'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/09/don-declare-false-attribute.html' title='Don&amp;#39;t declare false Attribute Relationships [Reed]'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-3918878498205306711</id><published>2006-08-31T09:04:00.000-07:00</published><updated>2007-08-27T12:36:10.825-07:00</updated><title type='text'>New Style and Old Style Calculated Member commands [Reed]</title><content type='html'>&lt;BR&gt;&lt;P&gt;Chris Webb posted an interesting observation about a new style for calculated members in scripts, where instead of &lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;CREATE&lt;FONT color=#333333&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;MEMBER&lt;/FONT&gt;&lt;FONT color=#333333&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;CURRENTCUBE&lt;/FONT&gt;&lt;FONT color=#333333&gt;.[MEASURES].[Old Style] &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;AS&lt;/FONT&gt; 1, &lt;FONT color=#0000ff&gt;VISIBLE&lt;/FONT&gt;&lt;FONT color=#333333&gt; = 1 &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;br /&gt;&lt;P&gt;you can just say&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;br /&gt;&lt;P&gt;&lt;FONT face=Arial size=2&gt;CREATE&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#333333 size=2&gt; [New Style] = 1;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;He points out a "bug" with the old style syntax. I added some comments relating to some experiments he inspired me to do. My conclustion is that it's too predictable a behavior to be a real bug, but if MS wants to call it a bug, that's OK; and in any event, it might be worth being aware of, especially if you mix script assignments with calculated members. Here's the link to his July 2006 blog page:&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;A href="http://cwebbbi.spaces.live.com/?partqs=amonth%3d7%26ayear%3d2006&amp;beid=cns!7B84B0F2C239489A!823&amp;d=1&amp;wa=wsignin1.0"&gt;http://cwebbbi.spaces.live.com/?partqs=amonth%3d7%26ayear%3d2006&amp;beid=cns!7B84B0F2C239489A!823&amp;d=1&amp;wa=wsignin1.0&lt;/A&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;-- Reed Jacobson&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-3918878498205306711?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/3918878498205306711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=3918878498205306711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3918878498205306711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3918878498205306711'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/08/new-style-and-old-style-calculated.html' title='New Style and Old Style Calculated Member commands [Reed]'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-8818736053441699004</id><published>2006-08-29T06:42:00.000-07:00</published><updated>2007-08-27T12:36:12.505-07:00</updated><title type='text'>Dynamic Dimension Security in Analysis Services 2005 [Reed]</title><content type='html'>&lt;BR&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;Part I – The Measure Group Setup&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;The idea of dynamic dimension security is that with a single security role, each user gets a different list of members, based on an MDX expression that returns the permitted set. For example, User A may be allowed read access to different products than User B.&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;The MDX &lt;I style="mso-bidi-font-style: normal"&gt;Username&lt;/I&gt; function returns the current user’s login information. If there is a many-to-many relationship between the User and the permitted products, you need a security map table, which is actually a “fact”, or bridging, table that contains one foreign key for the user and another for the product. &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;The SQL Server 2005 Adventure Works sample cube does not include a specific security map table, but it is possible to use the Internet Sales measure group as a surrogate: If a user (aka customer) purchased a product over the internet ([Internet Sales Amount]), then that user has the right to see the total sales for that product ([Sales Amount]). The structure is the same as if we used a regular security map table. &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;With a real security map table, you would create a measure group, and use a simple count of the rows as the measure, naming it something cool like [Security OK]. In this example, [Internet Sales Amount] is the surrogate for the [Security OK] measure.&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;Part II – The Username comparison&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;The format returned by the Username function is &lt;I style="mso-bidi-font-style: normal"&gt;DOMAIN\User&lt;/I&gt;. In an ideal world, your dimension table would have an attribute in the exact same format. In the real world, you often have something a little different. For example, the name in the dimension may not include the domain. The closest thing to a user name in the Adventure Works Customer dimension is the Email Address attribute. Its format is &lt;I style="mso-bidi-font-style: normal"&gt;User@adventureworks.com&lt;/I&gt;. This is not a bad approximation for a real-world user name attribute.&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;In the MDX security expression you compare the result of the Username function with the value of the [Email Address] attribute. Here’s an expression that will convert the Username to the right format for the Adventure Works [Email Address]:&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;Mid(Username,InStr(1,TestName,"\")+1) + "@adventure-works.com"&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;This expression will work even if users can be on multiple domains. If you know that all users will be on the same domain, you can make the expression evaluate much faster by replacing the (slow) InStr function with a hard-coded length. Assuming a constant domain name of DOMAIN, this formula is the simplified version of the previous one:&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;Mid(Username,7+1)&lt;SPAN style="mso-spacerun: yes"&gt;  &lt;/SPAN&gt;+ "@adventure-works.com"&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;For testing purposes (in case your current domain user name doesn’t happen to be in the Adventure Works Customer dimension), you can create a calculated member as a surrogate for the Username function:&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;Member Measures.TestName as "DOMAIN\anne14"&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Then, during early testing, you simply replace the Username function with the TestName calculated member. This makes it easy to try out different “users”. Then, during final testing, switch it back to use the Username function.&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;Part III: The MDX Set Function &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;The general concept of the set function is to find all the products where the intersection of the product, the current user, and the [Security OK] measure is not empty. (I’m going to show three methods for doing the set. If you just want the “best” answer, skip to the third one.)&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;** Double-Filter Method (2000 and 2005)&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;Here’s the way I usually did this in 2000. You use an “inner filter”, to find the User whose email alias matches the user logon (there should be only one), and use Item(0).Item(0) to turn it into a member. Then you combine that member with the test measure, and check for whether that tuple is empty in an outer filter against the list of products. This technique does work in 2005, but it’s a bit slow. On my test box it was about 1 minute. &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-outline-level: 1"&gt;Filter( [Product].[Model Name].[Model Name].Members, not IsEmpty(&lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;( Filter ( [Customer].[Email Address].[Email Address].Members&lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;, [Customer].[Email Address].CurrentMember.Name = TestNameX&lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;).Item(0).Item(0) , [Measures].[Internet Sales Amount] ) ) )&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Note: To test the set, you can run a simple query:&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;With &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;Member Measures.TestName as …&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;Member Measures.TestNameX as …&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;Set SecurityTest as …&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Select [Measures].[ Sales Amount] on 0,&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;SecurityTest on 1&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;From [Adventure Works];&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;** NonEmpty Method (2005 only)&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;One way to simplify this is to use the NonEmpty function that is new in 2005. This basically puts the outer Filter and the IsEmpty test into a single function, but the logic is basically the same: Filter the list of products by testing it against the (single member) set of email members that match the current user. Note that you don’t need the .Item(0).Item(0) for this one, because NonEmpty is comparing two sets, so the result of the Filter function is fine as is. This is much faster—on my box, it’s about 3 seconds. Quite an improvement over 60 seconds.&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;NonEmpty ( [Product].[Model Name].[Model Name].Members&lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;, ( Filter ( [Customer].[Email Address].[Email Address].Members&lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;, [Customer].[Email Address].CurrentMember.Name = TestNameX&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;) , [Measures].[Internet Sales Amount] ) )&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;** NonEmptyCrossJoin Method (2000 and 2005)&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Another way to do it—and this theoretically works in 2000 as well as 2005, but I don’t have a 2000 instance handy to test it on—is to use the NonEmptyCrossJoin function. Mosha says he hates the NECJ function (which is OK for him to say because he wrote it), and to use NonEmpty instead. But the NonEmpty function only takes two sets, and the NECJ function can take an indeterminate number. I have always had a great fondness for NECJ. The real goal is to find all the members of the Product dimension that actually exist in the Security measure group, when intersected with the specified member. This approach took &lt; 1 second on my box, and I still like NECJ. Maybe there’s a better way in 2005 that can avoid NECJ, but I like this one. Plus, as an added bonus, it also exploits StrToMember which is another “no no” that I love to use.&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;NonEmptyCrossjoin(&lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;[Product].[Model Name].[Model Name].Members&lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;, StrToMember("[Customer].[Email Address].[Email Address].[" + TestNameX + "]")&lt;BR&gt;&lt;SPAN style="mso-tab-count: 1"&gt;            &lt;/SPAN&gt;, [Measures].[Internet Sales Amount] , 1 )&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;-- Reed Jacobson&lt;/o:p&gt;&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-8818736053441699004?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/8818736053441699004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=8818736053441699004' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8818736053441699004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8818736053441699004'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/08/dynamic-dimension-security-in-analysis.html' title='Dynamic Dimension Security in Analysis Services 2005 [Reed]'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-8162144729113024871</id><published>2006-08-16T09:47:00.000-07:00</published><updated>2007-08-27T12:36:15.459-07:00</updated><title type='text'>Designing legacy DTS packages from within SS2005 Management Studio [Michael B]</title><content type='html'>&lt;BR&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Problem solved. Thanks to all who wrote with suggestions.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Here is the full story. Sorry if it is a bit much, but there were several false starts.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;U&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Chapter 1:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;U&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;I had been running SS2000 and had a bunch of DTS packages on my laptop. I installed SS2005 Developer’s Edition on the machine, which wiped out the SS2000 Enterprise Manager.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;When I tried to open any of the &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;legacy &lt;/SPAN&gt;&lt;/I&gt;DTS packages from within Management Studio, I got an error message box opened telling me that I needed to install &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;SQL Server 2000 DTS Designer Components&lt;/SPAN&gt;&lt;/I&gt;.  Please note that I was &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;not&lt;/SPAN&gt;&lt;/I&gt; attempting to &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;migrate&lt;/SPAN&gt;&lt;/I&gt; the DTS packages to SSIS; I was merely trying to open the packages in the equivalence of the package designer used in the older Enterprise Manager.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;I found the appropriate page on Microsoft’s site discussing the problem (&lt;A title=http://support.microsoft.com/kb/905417 href="http://support.microsoft.com/kb/905417"&gt;http://support.microsoft.com/kb/905417&lt;/A&gt;) and the site to download the “fix” (&lt;A title=http://www.microsoft.com/downloads/details.aspx?familyid=DF0BA5AA-B4BD-4705-AA0A-B477BA72A9CB&amp;displaylang=en href="http://www.microsoft.com/downloads/details.aspx?familyid=DF0BA5AA-B4BD-4705-AA0A-B477BA72A9CB&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=DF0BA5AA-B4BD-4705-AA0A-B477BA72A9CB&amp;displaylang=en&lt;/A&gt;). I downloaded the recommended file (&lt;/SPAN&gt;&lt;/FONT&gt;&lt;I&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-STYLE: italic; FONT-FAMILY: Arial"&gt;SQLServer2005_DTS.msi&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;), installed it, and rebooted. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;It was no help; symptoms were unchanged.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;U&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Chapter 2&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;One of our colleagues suggested that I uninstall and reinstall SS2005. I was getting close to do this and was in the Add/Remove Programs utility when I noticed &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;SS2005 Backward Compatibility Components&lt;/SPAN&gt;&lt;/I&gt; item in the &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;currently installed programs&lt;/SPAN&gt;&lt;/I&gt; list for removal or repair. I ran the repair. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;That didn’t fix it, but it changed the symptoms somewhat. Now when I tried to open a DTS package within SS2005, I got 3 separate error message boxes in succession (I believe the third was the same as the single error message I was originally getting (and oddly, sometimes I got just two messages -- the first and third. Also the package &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;tried&lt;/SPAN&gt;&lt;/I&gt; to open but only displayed some of the icons in the design window, usually just the connecting arrows.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;U&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Chapter 3&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Two colleagues had sent a link to another Microsoft article  (&lt;A title=http://support.microsoft.com/?kbid=917406 href="http://support.microsoft.com/?kbid=917406"&gt;http://support.microsoft.com/?kbid=917406&lt;/A&gt;), (and one of those also suggested I install the Backward Compatibility Components which I had already done, as mentioned above) and now, with the 3 error message boxes, my symptoms matched what was discussed on the Microsoft page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;The support page gave two workaround methods. The second one was in effect to reinstall the client components from SS2000. The first method promised to allow the correct opening of DTS packages from within Management Studio, which was my preferred route.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;It said to remove the following lines of code from the Sqlwb.exe.manifest file in the \Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE folder. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;The way the lines actually display on the Microsoft page, line 3 (red line numbering added by me for reference) is one long line in a small, scrollable text box. In this message, it wraps. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;1.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;DEPENDENCY&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;2.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;DEPENDENTASSEMBLY&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;3.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;ASSEMBLYIDENTITY language=* name="Microsoft.Windows.Common-Controls" publicKeyToken="6595b64144ccf1df"     processorArchitecture="x86" version="6.0.0.0" type="win32"&gt;&lt;/ASSEMBLYIDENTITY&gt;              &lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;4.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;/DEPENDENTASSEMBLY&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;5.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;/DEPENDENCY&gt;                                                  &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;When I opened the file for editing I saw something like the following (once again, I’ve added line numbers) with lines 2 and 3 continuing on the right beyond the window width:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;1.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;2.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;ASSEMBLY xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&gt;&lt;DEPENDENCY&gt;&lt;DEPENDENTASSEMBLY&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;3.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;ASSEMBLYIDENTITY name="Microsoft.VC80.CRT" version="8.0.50608.0" type="win32" ….&lt;BR processorArchitecture="x86"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;4.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;/ASSEMBLY&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;I searched for and found the opening &lt;DEPENDENCY&gt;tag and its closing tag mate and deleted those and everything in between as it seemed to instruct on the Microsoft page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;What I didn’t notice was that the line went way off to the right and that there were &lt;B&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;3 &lt;/SPAN&gt;&lt;/B&gt;&lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;assemblyIdentity&lt;/SPAN&gt;&lt;/I&gt; tag groups on that line. Without realizing it, I had deleted &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;all&lt;/SPAN&gt;&lt;/I&gt; of them. (Of course, I had made a copy of the file before altering it.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;After deleting the lines, SS2005 Management Studio wouldn’t open at all giving a memory location error. When I restored the lines to the file, Management Studio would open again, but I once again, I still couldn’t properly open DTS packages.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;After several additional attempts to edit the file, I finally noticed that there were 3 sets of &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;assemblyIdentity&lt;/SPAN&gt;&lt;/I&gt; tag groups, only one of which looked &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;exactly&lt;/SPAN&gt;&lt;/I&gt; like line 3 in the Microsoft text box. I reformatted the lines of the file so that I could more clearly see the logical tag groups. It now appeared in the Wordpad window something like the following (again, minus the line numbering and the bold font on line 7. And again, lines 5, 6, &amp; 7 scroll off to the right, beyond the width of the editing window.) (BWT, I just noticed while writing this email, that lines 5 &amp; 6 are identical, but that’s how they were in the original file.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;1.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;2.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;ASSEMBLY xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;3.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;DEPENDENCY&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;4.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;DEPENDENTASSEMBLY&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;5.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;ASSEMBLYIDENTITY name="Microsoft.VC80.CRT" version="8.0.50608.0" type="win32" processorArchitecture="x86" …..&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;6.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;ASSEMBLYIDENTITY name="Microsoft.VC80.ATL" version="8.0.50608.0" type="win32" ….&lt;BR processorArchitecture="x86"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;B&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;7.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;B&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;ASSEMBLYIDENTITY name="Microsoft.Windows.Common-Controls" version="6.0.0.0" type="win32" ….&lt;BR processorArchite&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;8.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;/DEPENDENTASSEMBLY&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;9.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;/DEPENDENCY&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=red size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"&gt;10.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=#3366ff size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #3366ff; FONT-FAMILY: Arial"&gt; &lt;/ASSEMBLY&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;What I realized I needed to do was to delete only line 7, keeping lines 3 thru 6,  and lines 8 thru 10. This indeed did the trick. I can now edit DTS legacy packages from within SS2005 Management Studio.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;U&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Conclusion&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;1. Install or repair &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;SS2005 Backward Compatibility Components&lt;/SPAN&gt;&lt;/I&gt; using the Windows Add or Remove Programs utility in Control Panel.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;2. Download and install &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;SQL Server 2000 DTS Designer Components&lt;/SPAN&gt;&lt;/I&gt; which is the &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;SQLServer2005_DTS.msi&lt;/SPAN&gt;&lt;/I&gt; file from &lt;A title=http://www.microsoft.com/downloads/details.aspx?familyid=DF0BA5AA-B4BD-4705-AA0A-B477BA72A9CB&amp;displaylang=en href="http://www.microsoft.com/downloads/details.aspx?familyid=DF0BA5AA-B4BD-4705-AA0A-B477BA72A9CB&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=DF0BA5AA-B4BD-4705-AA0A-B477BA72A9CB&amp;displaylang=en&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;3.Carefully edit \Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\ Sqlwb.exe.manifest  file removing only the &lt;ASSEMBLYIDENTITY&gt;tag group that looks like line 7 immediately above.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;I hope this is clear and is helpful. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=black size=3&gt;&lt;SPAN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Michael Bergelson&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial color=black&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: black; FONT-FAMILY: Arial"&gt;&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Architect&lt;BR&gt;&lt;/SPAN&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:City w:st="on"&gt;&lt;FONT face=Arial color=#333333 size=4&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 14pt; COLOR: #333333; FONT-FAMILY: Arial"&gt;Hitachi&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/st1:City&gt;&lt;FONT face=Arial color=#333333 size=4&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 14pt; COLOR: #333333; FONT-FAMILY: Arial"&gt; Consulting&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=black&gt;&lt;SPAN style="COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt; &lt;/FONT&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face=Arial color=black&gt;&lt;SPAN style="FONT-WEIGHT: bold; COLOR: black; FONT-FAMILY: Arial"&gt;&lt;FONT color=black&gt;&lt;SPAN style="COLOR: black"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;BTW, I also noticed that under SS2005 Management Studio, there is no option to view the DTS package run logs on a &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;right click, &lt;/SPAN&gt;&lt;/I&gt;nor have I found that function anywhere else as yet. &lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-8162144729113024871?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/8162144729113024871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=8162144729113024871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8162144729113024871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8162144729113024871'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/08/designing-legacy-dts-packages-from.html' title='Designing legacy DTS packages from within SS2005 Management Studio [Michael B]'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-5842333440391319024</id><published>2006-08-07T08:37:00.000-07:00</published><updated>2007-08-27T12:36:17.425-07:00</updated><title type='text'>RS Aggregate and Manual MDX</title><content type='html'>&lt;BR&gt;&lt;P&gt;In a recent post, I said RS Report Designer is smarter than I thought. And it is. But it is also really, really weird when you try customizing your MDX. (Not that I ever do that.)&lt;/P&gt;&lt;br /&gt;&lt;P&gt;This might be a bug, but it seems to happen only when you customize the MDX. Here's a scenario:&lt;/P&gt;&lt;br /&gt;&lt;P&gt;1) Use the wizard to create a table report with Country, State-Region, and City levels. Use Sales Amount (additive) and Average Unit Price (non-additve) as measures, and include subtotals.&lt;BR&gt; [At this stage, the automatic MDX includes just the City level]&lt;/P&gt;&lt;br /&gt;&lt;P&gt;2) Change the Sum function for Average Unit Price (and Sales Amount too, if you feel like it), to Aggregate. [At this stage, the MDX changes to include the Country and State-Region attributes.]&lt;/P&gt;&lt;br /&gt;&lt;P&gt;3) Delete the Country group from the report. [The auto-MDX changes to remove the Country attribute, and the report still works fine.]&lt;/P&gt;&lt;br /&gt;&lt;P&gt;BUT. If between step 2 and step 3, you go make an intsy-weentsy change to the MDX, then the auto-MDX does not remove the Country attribute. IN THIS CASE, none of the lower-level Aggregate functions work. They all return Null. &lt;STRONG&gt;If you have unused higher-level attributes in your MDX, lower-level Aggregate functions return Null&lt;/STRONG&gt;.  &lt;/P&gt;&lt;br /&gt;&lt;P&gt;The really wacko part is that if you never touch the MDX, and just let the Report Designer fiddle with it, everything seems to work OK. But if you do use the Aggregate function and you do customize the MDX statement, make sure that you have a grouping in the report for each attribute that has higher-level totals.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Incidentally, the place I ran into this big time was when I was decided to add an All level to a hierarchy in the cube. When I had the All level there, the report showed all blanks. When I removed the All level in the cube, the report worked. It was really strange. Why would a change like that in the cube definition make the report switch between showing correct values and showing nulls? Well, naturally, I was writing my own MDX, and I asked for [Hierarchy].Members, rather than explicitly cross-joining specific attributes. So having the All level in the hierarchy returned an extra level in the result set--a level that wasn't "used" in a grouping in the report, so all the Aggregate functions below that level returned Null. Removing the All level from the hierarchy made it so that all the levels in the result set were actually used in the report. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed Jacobson&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-5842333440391319024?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/5842333440391319024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=5842333440391319024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/5842333440391319024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/5842333440391319024'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/08/rs-aggregate-and-manual-mdx.html' title='RS Aggregate and Manual MDX'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-6492128710117127079</id><published>2006-08-04T07:19:00.000-07:00</published><updated>2007-08-27T12:36:18.576-07:00</updated><title type='text'>Happiness: RS Report Designer smarter than I thought</title><content type='html'>&lt;BR&gt;&lt;P&gt;Ever since the earliest Yukon beta's I've been frustrated with how RS report wizard handles AS as a data source. The problem has to do with non-additive measures--for example, a distinct count. In the cube, you create a measure or calculated member that gets the right answer at every point in the cube. But when you use the RS wizard to create the MDX and the report, it only queries for the lowest level used in the report, and then uses Sum for all the higher levels. This is fine when it &lt;EM&gt;is &lt;/EM&gt;a Sum, but doesn't work at all for Distinct Count.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Brian Welcker kept telling me that they added the Aggregate function and fixed the problem, but every time I tried, I still saw the same leaf-level MDX and Sum function. And I &lt;EM&gt;know&lt;/EM&gt; that you can't get the right answer with only leaf-level MDX. So I would change the MDX to return the multi-level values, and then change the report to use the Aggregate function instead of Sum, and it did work. But it really didn't make a good story. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;Well, earlier this week, I discovered the secret. I had always fixed the MDX &lt;EM&gt;first&lt;/EM&gt;, and then changed the Sum function to Aggregate. That was obvious to me, because how would Aggregate get the higher level value if the MDX is wrong? Well, I "accidentally" changed the Sum function to Aggregate first, and when I previewed the report, it showed the right answer. How could it do that? Switching to the data pane, the MDX was still the old detail level. So I used Profiler to capture the MDX, and the MDX &lt;EM&gt;was&lt;/EM&gt; different--it included the additional levels. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;The bottom line is that if you use the MDX designer to create the MDX, and then modify the report to use the Aggregate function instead of the Sum function (assuming you have non-additive measures), then the report designer &lt;EM&gt;changes the MDX to make it work&lt;/EM&gt;. When I think about it, this really does make sense. If all you have is Sum formulas, it's more efficient to just add them up in RS. RS can't really know whether a measure is additive or not, so it does default to use the Sum function. But all you have to do as a user is build the report (with the wizard) and then go change the function for any non-additive measures to Aggregate. The report then adjusts the MDX to make it work. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;It's a bit creepy for me to have it do all that "automatically" for me. (The windows on my car open with crank handles--or zippers--and don't even talk to me about automatic door locks.) But it actually does make sense and it does work. Maybe it's even documented in the new July BOL ;-).&lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed Jacobson&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-6492128710117127079?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/6492128710117127079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=6492128710117127079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6492128710117127079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6492128710117127079'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/08/happiness-rs-report-designer-smarter.html' title='Happiness: RS Report Designer smarter than I thought'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-6353203255631746127</id><published>2006-08-03T08:44:00.000-07:00</published><updated>2007-08-27T12:36:19.766-07:00</updated><title type='text'>Top 10 Plus Other Query</title><content type='html'>&lt;BR&gt;&lt;P&gt;On Teo Lachev's forum at Prologika, there was a question from gudjonv about how to do a RS chart that showed the top 10 members plus an "all other" member (thus, 11 slices of the pie). [See &lt;A href="http://prologika.com/CS/forums/1465/ShowThread.aspx"&gt;http://prologika.com/CS/forums/1465/ShowThread.aspx&lt;/A&gt;]. I didn't feel like registering so I could post a response, so I'll put the answer (converted to Adventure Works) here. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;This is the general method I've used to do "Top 10 Plus Other" since OLAP 7.0. I can't think of any compelling functionality in 2005 that would do the job better. (Of course, in 2005, the Aggregate function will work even with a distinct count measure, so that makes this solution more functional, but it doesn't change the solution.)&lt;/P&gt;&lt;br /&gt;&lt;P&gt;WITH&lt;BR&gt;  SET [TCat] AS TopCount([Product].[Subcategory].[Subcategory],10,[Measures].[Sales Amount]) &lt;BR&gt;  MEMBER [Product].[Subcategory].[Other] AS&lt;BR&gt;Aggregate([Product].[Subcategory].[Subcategory] - TCat)&lt;BR&gt; SELECT { [Measures].[Sales Amount] } ON COLUMNS, &lt;BR&gt; TCat + [Other] ON ROWS &lt;BR&gt;FROM [Adventure Works] &lt;BR&gt;;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed Jacobson&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-6353203255631746127?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/6353203255631746127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=6353203255631746127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6353203255631746127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6353203255631746127'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/08/top-10-plus-other-query.html' title='Top 10 Plus Other Query'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-7973542157234526321</id><published>2006-08-01T11:53:00.000-07:00</published><updated>2007-08-27T12:36:21.175-07:00</updated><title type='text'>Sadness: Excel 2007, Subcube Subqueries, and Growth Formulas</title><content type='html'>&lt;BR&gt;&lt;P&gt;When I first saw a demo of Excel 2007 in the Beta 1 timeframe, I was told that the Slicers in Excel 2007 would still use the WHERE clause, not the new Subcube Subquery available in SQL2005. I was very disappointed (partly because in the beta timeframe for SQL 2005, the Where clause behaved so badly). But when I got my copy of Excel 2007 and looked at the actual MDX, it turns out that they do use the subcube subquery. At first I was happy, but then I discovered a strange consequence of using the subcube subquery (while, in a bit of irony, by RTM the relative benefit of a subcube subquery has decreased because they fixed the behavior of the Where clause).&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Suppose you have a "Sales Growth" measure. In all likelihood, the MDX will include something like ([Measures].[Sales],[Time].[Calendar].CurrentMember.PrevMember). Now suppose you have a query with [Nov 2007] as the slicer. If the slicer goes into the WHERE clause, then the current member of Time.Calendar is [Nov 2007] and the prev member is [Oct 2007] and all is good. But if the slicer goes into a subcube subquery, then the Time.Calendar dimension gets collapsed to [All]--&gt;[2007]--&gt;[Q4]--&gt;[Nov 2007], but the current member is [All], not [Nov 2007]. With the subquery, the value of [All] equals the value of [Nov 2007], so the basic measures look alright, but the prev member for [All] is Nothing, so the growth calculation screws up.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;The only way I've been able to get the correct growth to show up is by explicitly putting the Time dimension onto the Row or Column axis, so there's a meaningful CurrentMember. It works, but it looks a bit stupid. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;I was hoping that the Existing operator (that I recently discovered) would provide a workaround for the problem (because the formula could then use &lt;EM&gt;Existing Time.Calendar.Month.Members&lt;/EM&gt;. But, sadly, the "current context" for the calculated member does not take into consideration the subcube subquery restriction, so you get the entire set of months, not just the "current" month. So this approach did not work.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;If anyone has an idea for how to write a formula that properly calculates growth, even when the filtering is done by using a subcube subquery, I'd love to hear it. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed Jacobson&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-7973542157234526321?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/7973542157234526321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=7973542157234526321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/7973542157234526321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/7973542157234526321'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/08/sadness-excel-2007-subcube-subqueries.html' title='Sadness: Excel 2007, Subcube Subqueries, and Growth Formulas'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-3295062504352022203</id><published>2006-07-28T10:25:00.000-07:00</published><updated>2007-08-27T12:36:22.124-07:00</updated><title type='text'>New Existing operator</title><content type='html'>&lt;BR&gt;&lt;P&gt;&lt;FONT face=Arial&gt;I just found out about the Existing operator. You put it in front of a set and it filters the set by using all the current members in the current context. This simplifies using Attributes without User Hierarchies. &lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;FONT face=Arial&gt;For example, suppose you need to do the equivalent of the LastChild aggregation function, but with the Standard Edition: Use the Existing keyword to find the last period. The issue is that without a multi-level time hierarchy, how do you know which is the "last" month in the current filtered space. So &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;Existing Time.Month.Members &lt;/SPAN&gt;&lt;/I&gt;is essentially equivalent to &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;Descendants(Time.CurrentMember,Time.Month), &lt;/SPAN&gt;&lt;/I&gt;except that it doesn't require a User Hierarchy. Thus &lt;EM&gt;Tail(Existing Time.Month.Members)&lt;/EM&gt; give the last month in the current filter set. (Note that this doesn't give the Last &lt;EM&gt;non-empty&lt;/EM&gt; member, just the Last Child.)&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;FONT face=Arial&gt;- Reed Jacobson&lt;/FONT&gt;&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-3295062504352022203?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/3295062504352022203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=3295062504352022203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3295062504352022203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3295062504352022203'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/07/new-existing-operator.html' title='New Existing operator'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-656814951378333831</id><published>2006-07-28T10:21:00.000-07:00</published><updated>2007-08-27T12:36:23.428-07:00</updated><title type='text'>Visual Totals and Row Filters</title><content type='html'>&lt;BR&gt;&lt;P&gt;I was troubleshooting with a client about some slow queries using Excel (2003) as a client for AS2005. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;We had a large (customer) dimension on rows, and measures on columns. We added a second customer attribute (region) to rows. The pivot table returned very fast. As soon as we filtered by a region member (one or more), the report slowed to a crawl. Putting the region into the slice (filter) area and then selecting one or more items was fine, but with region on rows, it was slow. The problem is that users want to see the region next to the customer name. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;Turning off Visual Totals gave fast results as well, but that allowed unwanted customers to make it through the filter, and the grand total was not what we wanted. In effect, we wanted the meaning of Visual Totals (with Region included on rows), with the performance of Region in Slicer (or no Visual Totals). &lt;/P&gt;&lt;br /&gt;&lt;P&gt;The best workaround we could come up with was to create two instances of the Region attribute, so there's a regular Region attribute (which goes on rows) and a Filter Region attribute (which goes into slicer). Filtering by the one in the Slicer area allows the report to be fast, even with Visual Totals, but still lets the user see the regions in the body of the report. We had to create similar parallel attributes for any customer attribute the user might want to show on rows--while simultaneously using as a filter. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;My speculation as to the reason for this is that if the region filter is in the Slicer, it's the core cube "pyramid" engine that does the operations, and it's fast. Whether Visual Totals is specified or not is irrelevant as long as the Region is in the Slicer, because no "total" is being re-calculated by MDX. If the Region filter is in rows, then the All member of the Region attribute (which is implicitly there for every customer) has to be recalculated as a Visual Total by MDX, and that's really slow. Any time the MDX has to calculate for each member of the Customer hierarchy (whether it eventually gets filtered away by Non Empty or not), the overall report is slow. If an MDX expression only has to calculate for the rows that end up in the final report, it's really fast. The moral for me is to keep the high-cardinality operations in the Pyramid engine and restrict the Calculation engine to relatively small scope.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed Jacobson&lt;/P&gt;&lt;br /&gt;&lt;P&gt; &lt;BR&gt;&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-656814951378333831?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/656814951378333831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=656814951378333831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/656814951378333831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/656814951378333831'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/07/visual-totals-and-row-filters.html' title='Visual Totals and Row Filters'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-3574559159054494115</id><published>2006-07-27T05:50:00.000-07:00</published><updated>2007-08-27T12:36:24.549-07:00</updated><title type='text'>MDX and NON EMPTY</title><content type='html'>&lt;BR&gt;&lt;P&gt;A few times over the past couple of months I have run into a situation where removing NON EMPTY from a slow MDX query radically improved the response time. The symptom was clear, but not predictable. Earlier this week, we were able to pin down at least one specific scenario that definitely triggered the NON EMPTY slowness. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;We were using Excel (2003) as the client, and had a large set (customers) on rows. Excel's default NON EMPTY behavior was filtering away the uninvolved customers. Everything worked well until we added a second measure. The query went from 1 second to 10+ minutes (or so). The measures were both calculated members that did a direct reference to base measures, and they did have the NonEmptyBehavior property set to the base measure. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;After some troubleshooting, we observed that the speed hit happened only when the measures were on the Rows axis. If we put the measures on the Columns axis (i.e., a different axis from the large set), it went back to being really fast. The reason adding a second measure slowed it down was because with one measure, Excel puts the measure into the Where clause, but with two, it defaults to put the "Data" on rows. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;So the solution (aka workaround) is to simply add the multiple measures to the report &lt;EM&gt;before&lt;/EM&gt; adding the large dimension. With two measures on the report, you can move the measures to columns and then add the large dimension. It's a bit of a pain, but the difference between 10 minutes and 1 second is worth it.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;My speculation is that 2005 is trying to optimize NON EMPTY behavior so that it's similar to the speed benefits of NonEmptyCrossjoin. If it gets the optimization right (which happens when the measures are on a different axis), it's blazingly fast. If it gets the optimization wrong (which happens when the measures are on the same axis), then the calculated member is evaluated for each member of the large set and it's distressingly slow. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed Jacobson&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-3574559159054494115?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/3574559159054494115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=3574559159054494115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3574559159054494115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3574559159054494115'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2006/07/mdx-and-non-empty.html' title='MDX and NON EMPTY'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-6658179968986239060</id><published>2005-07-15T06:22:00.000-07:00</published><updated>2007-08-27T12:36:25.867-07:00</updated><title type='text'>MDX Questions and Answers</title><content type='html'>&lt;BR&gt;&lt;P&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Q. &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;When someone creates a subcube in an MDX statement, where does AS store the subcube internally.  Is there something like the relational tempdb for AS?&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;A. &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;The subcube subquery is a logical construct, so the data itself is not really "stored" anywhere. Of course, when you execute the query against the subcube, the values are stored in server memory, the same as any query. The definition of the subcube subquery in effect filters the data retrieved by the query. It is not at all like making an extract into a tempdb. One of the big differences between SQL and MDX is that SQL needs a rowset to group. MDX reports create a structure and then retrieve the value &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;for each cell&lt;/SPAN&gt;&lt;/EM&gt; independently (more or less). &lt;B&gt;&lt;I&gt;[Reed Jacobson]&lt;/I&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Q. &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;When querying a subcube, is AS able to access and benefit from the underlying cube's aggregations?&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;A. &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;Absolutely, because it &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;is&lt;/SPAN&gt;&lt;/EM&gt; querying the underlying cube.&lt;B&gt;&lt;I&gt; [Reed Jacobson]&lt;/I&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Is there a way to analyze the MDX query execution plan and optimize it like there is for relational queries.  I think the answer is no, it is probably to hard to represent since so much depends on how aggregations happened to be created vs. pre-set indexes on the relational side&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;It's a totally different process than SQL. You can get clues for performance problems by using the system monitor or profiler, but the whole approach is backwards from SQL. &lt;B&gt;&lt;I&gt;[Reed Jacobson]&lt;/I&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Q. &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;One student has encountered difficulty in MDX writing a year-to-date comparison to the same previous year-to-date time period.   For example, they know how to do a current year-to-date query that would take them from the beginning of the year through July 6th.  However, is there an easy way to query for previous year information through previous year July 6th&lt;br /&gt;&lt;P&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;A. &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;It is a little tricky to write the formula. I typically don't like to use a flag for "the current day" because that doesn't let a user look at the number "as of last monday". But a combination of ParallelPeriod and PeriodsToDate is sufficient. Roughly, the formula is Sum(PeriodsToDate([Year],1,ParallelPeriod([Year],1,[Date].CurrentMember)). [I'm doing this from memory and don't swear by the syntax.] &lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;My position is that MDX Queries are relatively simple (compared to SQL queries), but that MDX &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Formulas&lt;/SPAN&gt;&lt;/EM&gt; can be quite difficult. If anything, Yukon is likely to make formulas both more powerful and more difficult :-). &lt;b&gt;&lt;I&gt;[Reed Jacobson]&lt;/I&gt;&lt;/b&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-6658179968986239060?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/6658179968986239060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=6658179968986239060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6658179968986239060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6658179968986239060'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/07/mdx-questions-and-answers.html' title='MDX Questions and Answers'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-5214756628606438891</id><published>2005-07-13T07:59:00.000-07:00</published><updated>2007-08-27T12:36:27.014-07:00</updated><title type='text'>Drivers</title><content type='html'>&lt;BR&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Someone in the class was told that drivers for other db's than SQL Server (i.e. Oracle, DB2) would not be supported at RTM.  Someone in the class form MSFT said this is not true.  Do you know the answer off-hand?&lt;/SPAN&gt; &lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;[Stacia Misner] It depends on the context, I think. For example, in Reporting Services, there are certain data sources supported out of the box – SQL Server, Oracle, ODBC, and Analysis Services. Report Builder though will only support SQL Server and Analysis Services. That leaves Integration Services – I remember thinking each build since Beta 2 had a different collection of adapters so I didn’t bother memorizing what – wanted to see it stabilize first. Traditionally, DTS supported Oracle natively – don’t recall if it tries to in SSIS. At the very least – you can use OLE DB or ODBC or write your own.&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 39pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;[Reed Jacobson] Oracle can be used as a data source from virtually anywhere. (I don't know anything about Report Builder, so if it will only access SQL Server, that's news to me--it would still be easy to create an AS UDM that models the ORACLE source--even as pure ROLAP--and then Report Builder should be able to get to it. The only place I know you can't use ORACLE is as the metadata databases for Reporting Services--those have to be stored in a SQL Server database. &lt;/SPAN&gt;&lt;SPAN style="COLOR: navy"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-5214756628606438891?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/5214756628606438891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=5214756628606438891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/5214756628606438891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/5214756628606438891'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/07/drivers.html' title='Drivers'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-6618894058154702824</id><published>2005-07-11T07:00:00.000-07:00</published><updated>2007-08-27T12:36:28.269-07:00</updated><title type='text'>AS Settings</title><content type='html'>&lt;BR&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Are there any AS settings that affect whether cubes process query requests  or cube processing using multiple processors.  If not, how is AS in using multiple processors?&lt;/SPAN&gt; &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;[Stacia Misner] The first place I’d look would be the server properties in SSMS. Right-click on the server name in the Object Explorer and take a look at the properties there.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;[Reed Jacobson] For processing, it's an option in the Process dialog box (that you get when you use the explicit Process command, either from BIDS or from SSMS). You can choose whether to go parallel or sequential. I believe that if you choose parallel, it makes intelligent use of the number of available processors. Regarding queries, my guess would be the same as Stacias.&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-6618894058154702824?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/6618894058154702824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=6618894058154702824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6618894058154702824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6618894058154702824'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/07/as-settings.html' title='AS Settings'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-4258025384658011684</id><published>2005-06-27T02:35:00.000-07:00</published><updated>2007-08-27T12:36:29.380-07:00</updated><title type='text'>Questions and Answers</title><content type='html'>&lt;BR&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;As classes have completed, we've had more questions rolling in. We'll attempt over the next few posts to provide some answers from both Reed and Stacia to give a couple points of view.&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Question:  &lt;/STRONG&gt;In the SSIS demos we associate a config file with our package for the one time we are running it.   What is the mechanism for permanently associating the config with a package?  I am guessing it is something in SQL Server Agent, but could not get my Agent Service to start.&lt;/SPAN&gt; &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;[Stacia Misner] when you use DTEXECUI you can associate a config file by selecting it in a dialog box. You can then generate a command-line with arguments that uses DTEXEC that also references that config file. You basically copy/paste that string into a scheduler like SQL Server Agent. I think the final demo in Module 2 should step you through at least the DTEXECUI piece. So there is no such thing as permanently associating a config file with a package in my mind. It’s what you choose to specify at the time of execution – whether through BIDS, DTEXEC, or DTEXECUI. The beauty is being able to use the same package with different config files as needed.&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;B&gt;&lt;I&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Arial"&gt;[Reed Jacobson] What Stacia says about adding an argument to specify the config file is definitely true. But I am suspicious (but haven't tested) that if you put a config file in the same folder and enable configurations and don't include a run-time argument, then it will use the config file. This would be worth confirming. Also, In Beta 2 (when we wrote the course) DTEXECUI would crash on almost anything, so unless Stacia added a lot to the demo scripts, the demo may not go as far as it can now. In one class, we built the argument string (using DTEXECUI) and then opened a command window and ran DTEXEC, pasting in the argument string from DTEXCUI. It ran beautifully. The next step would be to put the DTEXEC + arguments into an Agent job. The only thing you have to watch out for then is what "user" is running the job and with what credentials.&lt;/SPAN&gt;&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-4258025384658011684?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/4258025384658011684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=4258025384658011684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4258025384658011684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4258025384658011684'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/06/questions-and-answers.html' title='Questions and Answers'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-8587825985841141923</id><published>2005-06-24T07:03:00.000-07:00</published><updated>2007-08-27T12:36:30.745-07:00</updated><title type='text'>New Questions Part 2</title><content type='html'>&lt;BR&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;1. &lt;SPAN style="mso-tab-count: 1"&gt;  &lt;/SPAN&gt;On our training slide we say the OWC is not likely to be continued.  Is this still the case?  Or can people safely create OWC reports and not worry about the immediate future. &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I wouldn't worry about the immediate future. It's still the best (&amp; cheapest) for many embedded applications--and they use it in BI Dev Studio. You probably do want to figure out a way to implement Create Subcube to filter (to avoid strange behavior around Where clause), but that's not hard--just grab the connection from the OWC and execute a Create Subcube command. That's what the filter at the top of the OWC in BIDS does to con the OWC into working properly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;2. Why is OWC not a thin client.  Do people need to have Excel on their machine to use it?&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;It's not thin because it needs a) an activeX control and b) PTS. That's about 4-5 MB of download. Users don't need Excel. If they don't have a 2003 licence, they can drill and slice, but not create new ones.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-8587825985841141923?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/8587825985841141923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=8587825985841141923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8587825985841141923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8587825985841141923'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/06/new-questions-part-2.html' title='New Questions Part 2'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-3104743394374781359</id><published>2005-06-22T04:00:00.000-07:00</published><updated>2007-08-27T12:36:33.421-07:00</updated><title type='text'>Here are some questions I was recently asked</title><content type='html'>&lt;BR&gt;&lt;DIV&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;1. Can you describe an example of when a calculated cell would be used?  What about an example having multiple passes?&lt;/SPAN&gt;&lt;/FONT&gt; &lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;In 2005, Scripts basically replace calculated cells (although calc cells are still supported). They are alternate mechanisms for accomplishing the same internal behavior. In 2000, one simple way in which I used calc cells was to have an IIF where value if true was a number and value if false was a string—I just made a calc cell for the subcube that needed the string and applied the string as the value. (In 2005, you can have different types for value if true than for value if false so this is no longer necessary, but you could definitely use a calc cell (or script command) to apply a special format (e.g., a background color) to a specific subcube (e.g., members of a heading level). &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;More typically scripts are intended for financial calculations—one example would be if you need a different formula for net income in the current year (where taxes are not known) than in the prior years where they are finalized. A script command could also apply a security layer, since scripts are applied before security. So, for example, you could use a script command to replace the actual salary at the leaf level with the &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;average&lt;/SPAN&gt;&lt;/I&gt; salary of the group (without affecting higher level totals), and end users would not be able to see the detail. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;A classic example of multiple passes is when you need to calculate a tax amount based on net income—after tax. So you have a circularity that you need to iterate down to a negligible amount.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;2. What does the flattened command in DMX do?  Why does DM data need to be flattened?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;I don’t know. I don’t write DMX, because the DTS Data Mining Query task can create it for you. It happens to put FLATTENED in, so I let it—in the same way that it puts in PREDICTION JOIN. I don’t have to understand DMX syntax in order to use Data Mining. And to me that’s a good thing. (But you have to put up with my soapbox that to use Data Mining effectively, you do &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;have&lt;/SPAN&gt;&lt;/I&gt; to understand at least enough statistics to know what would make a good source data set.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;3. What is the meaning of native vs. managed code?  How is that relevant to SSIS work?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Managed code is .Net and uses the Common Language Runtime (CLR). It’s “managed” in the sense that code that uses the CLR exclusively can be marked as “safe”, which means it cannot damage other processes. Older code—VB6, C, C++, etc.—is compiled directly to the operating system machine code (at least indirectly), so it is “Native”. SSIS (and its libraries) was written in C++, which means the code generated is “native” or “not .Net”. In order to access the libraries from a .Net language, a “wrapper” is needed—and provided. In principle, “native” code is “faster” than “managed” code—because there’s a layer of overhead missing, and that’s the ostensible reason SSIS is written using native code. But Microsoft encourages managed code (partly for ease of writing and partly for security), and even if you write a custom transformation, you can do it using C# or VB.Net and it will be “almost” as fast as if you used native code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;My own opinion is that it’s easier to use the SSIS libraries if you keep in mind that they are not fundamentally .Net code, so you can set aside some expectations of how a typical .Net object model works when using the SSIS libraries. Most .Net developers I’ve talked with find the SSIS library functions confusing (more confusing, for example, than Analysis Services’ AMO libraries). &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;4. Why do you say that there is no SSIS server?  What runs the packages?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;When you write a SSIS custom transformation and are testing it in debug mode, the SSIS designer runs the package. You can debug an SSIS package without having the service running. But you can’t attach a DLL (your custom transformation) until the package is running. That’s why you need to put a breakpoint into the package and get it started before you can attach your DLL to the debug process. This is different from SSAS, where even during design time, you can’t browse data until you deploy (perhaps to a test server), and it’s the msmdsrv process that serves the data, so on the one hand, you can’t debug your SSAS User Defined Function DLL without starting the SSAS Service, but on the other hand, you can attach your DLL to the msmdsrv process without having to pre-set a breakpoint in the cube somewhere.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;It was my understanding (in the Beta 2 timeframe) that the SSIS Server service did not need to be running in order to run the package (using DTEXEC or DTEXECUI), and that the service allowed you to a) kill running jobs if necessary and b) manage storage of packages either in MSDB or a “relative” file system. But back then, I had a hard time getting DTEXECUI to keep from crashing at all anyway. In the more recent CTP builds, where DTEXEC actually works, it appears that the service does need to be running in order to execute a package, but I’m not 100% sure of that.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;5. In DM slides you discuss how statistics creates the model then looks for the statistics and in DM it is the reverse.  Could you please provide a brief example so I can get a better sense of what this means.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;In the statistics class I took as part of my MBA program, we had to build regression models. We had to first think of logical relationships, second create a mathematical model to represent the relationship, and finally test the model by running data through it. When we tried to shortcut the process and run regressions against the data in search of good correlation scores (and then made up a logical “reason” afterwards), the professor accused us of “data mining”. The problem with “data mining” was (and is) that you can find correlations in historical data that may not have predictive value. (As your mutual fund prospectus states: “Past performance is no indication of future results” or as the slide says, quoting my statistics professor “Correlation does not imply causation.”) &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Data mining models today do exactly what we were told &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;not&lt;/SPAN&gt;&lt;/I&gt; to do back in the late Jurassic period when I was in B-school. They look for correlations in the data and create coefficients for the models based on that data. One big difference is that the models are themselves designed to look for specific types of correlation (note for example Association model for Market Basket analysis), but it is still important to test the model (perhaps by splitting the available historical data in half) and to think about the logical basis for the correlations.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;6. In the old AS2K course we created ROLAP aggs and went out to the db to see them.  This was great for helping people to understand what an aggregation is.  I tried doing this in our AS Core demo in &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:State w:st="on"&gt;&lt;st1:place w:st="on"&gt;Yukon&lt;/st1:place&gt;&lt;/st1:State&gt;, but could not see the aggs.  Do you know how to do this?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;I couldn’t get ROLAP aggregation tables either, but I haven’t tried since Beta2. I agree that they were useful for instructional purposes, but not for production—so I would have mixed feelings if it really is not possible in RTM.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;7. When discussing the idea of the UDM, a key characteristic mentioned is that it can decide whether of not to pull data from the cubes or the relational db.  Does this decision process occur in any situations when proactive caching has not been enabled?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;It really doesn’t have a lot to do with proactive caching. When you create a dimension or measure group, you can specify (in the “UDM”) whether storage should be ROLAP or MOLAP. That’s what makes the fundamental decision. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;It is true that when you enable pro-active caching, it’s possible for even a query against a MOLAP measure group to get redirected to the relational source, but I can’t imagine that being desirable in very many situations. My fundamental belief about query speed is that consistency is even more important than speed. So if a query takes 2 seconds 95% of the time, but occasionally takes 20 minutes, that’s worse than taking 4 seconds 100% of the time. That’s one of the problems I have with (data driven) proactive caching on a measure group—if it increases the risk of fluctuation in query speed, I won’t want to use it (very often). If you can force it to keep using the old MOLAP cache until the new one gets completed, that would make it more acceptable to me. My informal surveys lead me to believe that it’s a relatively small percentage of applications that require the level of “real time” update that would require data driven proactive caching on measure groups.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;8. Is the UDM really just a fancy\new term for a cube?  Or is there something different between a cube and a UDM?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;My understanding is that the goal in 2005 is to be able to put the entire data model into one logical cube, in which case cube = UDM. If, for some reason, you split the data into multiple cubes, I would think that the combination of cubes would = UDM. I have been trying to find a case where it is truly impossible to put an entire data model into a single cube. The only examples I’ve seen have been cases where it &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;could&lt;/SPAN&gt;&lt;/I&gt; have been put into a single cube. In the April CTP, Adventure Works (the SSAS model) has a separate cube for some data mining models. I don’t know whether that is permanent and/or necessary. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;[This part is a total tangent from your question, but whatever…] The real situation where I think you would want to separate the data model into multiple cubes is one where a large enterprise wants to have regional servers with data specific to each region, and then a corporate server with high-level aggregations from all the regional servers. I don’t think this would be possible to model with a single cube or even with multiple cubes in a single UDM—because you don’t want all the data on a single server; you want it distributed. I think you would need to create two logical models ( = UDM = Cube), one for the region and one for the corporate, and create several physical instances of one (one for each region) and one instance for the corporate summary. But this would not allow for seamless browsing from a single client PivotTable. It might be interesting to think through whether this scenario would be possible with a single UDM, using multiple distributed partitions for the regions—but I haven’t gotten that far yet.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;9. Is there a way for an attribute hierarchy to be excluded from the "real" cube.  For some reason I thought I saw somewhere that there is, but I am not seeing how you could have an attribute hierarchy that is not in the cube.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;I’m not quite sure what you mean. If you want to exclude a dimension from some measure groups while keeping it in other measure groups, you do that in Dimension Usage. If you want an attribute to be part of a dimension, but don’t want it to be a structural part (of &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;any&lt;/SPAN&gt;&lt;/I&gt; measure group), then you set AttributeHierarchyEnabled = False for that one attribute. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;If a dimension is associated with a measure group, the granularity attribute and all attributes that are (directly or indirectly) member properties of the granularity attribute are associated with that measure group. You can make an attribute unavailable for physical storage (i.e, for inclusion in an aggregation), by setting the AggregationUsage property of the attribute (in the Cube Definition) to None—but that (unfortunately) applies to all instances of the attribute in the entire cube, not just a specific measure group (or better, a specific partition). &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;You could use Perspectives (or Security) to make an attribute hierarchy invisible, but that is logical, not physical, so it would still be part of the “real” cube. I think it’s better to think of dimensions  &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;10. If there are 30 attribute hierarchies in a dimension, is that like having 30 dimensions in the old AS2K?  Is there tremendous data explosion with something like that?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;It’s more like having 30 &lt;I&gt;&lt;SPAN style="FONT-STYLE: italic"&gt;levels&lt;/SPAN&gt;&lt;/I&gt; in AS2K because (by default) in AS2K each level was included in the structure of the data partition and was available for inclusion in an aggregation. In AS2K, a cube with a lot of levels would require a lot of time for designing aggregations, even if the size of the final cube wasn’t that big, just because AS has to consider all the possible permutations when designing aggregations for a given amount of disk space. In 2005, it’s a lot easier to have tons of attributes than it was in 2K to have tons of levels, which is why so many attributes are left out of the right column of the aggregation design wizard—just to keep the number of permutations manageable. Data explosion is still limited by the aggregations you design (i.e., Max size of data limit in Aggregation Wizard). The place I can see a potential increase is in the size of a single data partition “row”. In AS2K, a data partition row included a key for each level in the cube. If the same is true in 2005, the row for a measure group data partition could be a lot bigger because there might be a lot more attribute hierarchies than there were levels in 2K. But there is no documentation (for either 2K or 2005) on the internal data structure, and I haven’t tried hacking the files to figure out the structure (yet) in 2005.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;11. Why are min and max considered to be pseudo-additive measures?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;My definition of pseudo-additive is that it has all the same benefits as Sum (i.e., can take advantage of strategic aggregations), but is not technically addition. Min and Max definitely can be included in strategic aggregation tables, but they are not technically addition. I just used to loosely talk about “additive measures” as including anything that could have strategic aggregations, but too many people would get confused about referring to Min, Max, weighted average, etc, as “additive” so I made up “pseudo-additive” as a way to say the same thing without being technically incorrect.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;12. Can you please explain the purpose of the xml.defaults statement in the AMO code set.  What is the outcome of setting this to true vs. false.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Do you mean the CaptureXML property? Setting that to True means that an Update statement generates the XML (as when creating an AS project in Visual Studio), while setting it to False means that an Update statement makes the change on the deployed database (as when attaching to a database from Visual Studio—which I think is generally a very bad idea.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;13. How would you explain why AS was completely re-written.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/P&gt;&lt;br /&gt;&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;In one sense, the underlying conception is the same—the way strategic aggregations work. So to say it’s completely re-architected is a slight overstatement.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;But to answer your question, AS2K dimensions were completely founded on levels in a hierarchy. That is a very rigid structure. One example I like is Calendar vs. Fiscal hierarchies. While the Year and Quarter levels may be different, often the Month and Day levels are identical between the two hierarchies. In AS2K, this was simply impossible to properly model. Another example is with non-orthogonal attributes—such as Size vs Color: both are attributes of a Product, but they don’t form any kind of natural hierarchy, so in AS2K, there was no way to recognize any relationships that might actually exists (for example, that size 44 exists only for Red and White, but not for Black or Gray). &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;FONT face=Arial color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;In 2005, a dimension is founded on a leaf-level key with additional attributes of that key. Those attributes may or may not form hierarchical relationships. This is a very flexible structure. You can easily model both the Calendar/Fiscal and the Color/Size problems I mentioned earlier. With that flexibility comes some additional complexity, but based on the changes in Apr CTP vs Beta 2, many of those complexities are likely to be handled by default, rather than by manual work. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt; - Reed&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-3104743394374781359?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/3104743394374781359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=3104743394374781359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3104743394374781359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3104743394374781359'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/06/here-are-some-questions-i-was-recently.html' title='Here are some questions I was recently asked'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-3531308143019230817</id><published>2005-05-10T02:23:00.000-07:00</published><updated>2007-08-27T12:36:35.599-07:00</updated><title type='text'>SSIS vs Bulk Load</title><content type='html'>&lt;BR&gt;&lt;P&gt;Based on 2000 experience with DTS, a lot of people prefer set operations or bulk load over transformations. One big benefit of SSIS transformations is that you can execute several operations in one pass--which you can't do with set operations. And if you use the SQL Server Destination adapter (and native SQL connection manager), you get speeds much faster than OLEDB--in fact you can get virtually identical speed to bulk load. One thing to watch out for is that when using the SQL Server Destination, the package must run on same machine as destination database.&lt;/P&gt;&lt;br /&gt;&lt;P &gt;Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-3531308143019230817?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/3531308143019230817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=3531308143019230817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3531308143019230817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3531308143019230817'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/05/ssis-vs-bulk-load.html' title='SSIS vs Bulk Load'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-6115058955105324095</id><published>2005-05-04T03:07:00.000-07:00</published><updated>2007-08-27T12:36:36.807-07:00</updated><title type='text'>When is Ragged Right right for Fixed-length files?</title><content type='html'>&lt;BR&gt;&lt;P&gt;It's natural to expect that if you have a Fixed Length file, that you should choose the SSIS Fixed Length file type. But Fixed Length is really for binary files, where there are no CRLF characters at the end of the lines. If you have a fixed length text file, and want to eliminate the delimiter, use Ragged Right flat file, and for the final column, specify CRLF as the delimiter. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-6115058955105324095?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/6115058955105324095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=6115058955105324095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6115058955105324095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6115058955105324095'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/05/when-is-ragged-right-right-for-fixed.html' title='When is Ragged Right right for Fixed-length files?'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-9073685318231081157</id><published>2005-05-02T00:35:00.000-07:00</published><updated>2007-08-27T12:36:37.887-07:00</updated><title type='text'>Diagrams are Back!</title><content type='html'>&lt;BR&gt;&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;One of the most (ahem) active threads in the SQL 2005 beta newsgroups was discussion around the loss of the trusty database diagramming tool, formerly found in SQL Enterprise Manager. I am happy to report that as of the April Community Technical Preview build, diagrams are back in the SQL Management Studio. Even though Microsoft has stated that the primary emphasis for diagramming will be with both Whidbey and with Visio Enterprise Architect, it’s nice to have this often used functionality returned to the tool-set that many of us use day to day to create or understand Star or Snowflake Schemas. While there are many tools that offer more extensive diagramming feature sets, the integration and ubiquity of the Database Diagramming Tool makes it invaluable. Personally, I use it to visually understand the layout of Star and Snowflake schemas that I am becoming familiar with. I also use it to create prototype relational databases for proofs of concepts. &lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Feature-wise, it seems to be much the same as the previous version. I’ve noticed two differences worth mentioning (so far): &lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;1)  The procedure for adding related tables is slightly different. In the SQL 2000 version this was accomplished through the add-table dialogue; now it is accomplished by selecting a table in the diagram and clicking the “Add Related Tables toolbar icon”&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;2)  The ability to open tables is no longer part of the diagramming tools. That functionality is available as part of SMS, just not directly from within the Diagramming Tool as in the SQL 2000 version.&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Kudos to the SQL Server Development Team for incorporating our feedback around the Diagramming Tool.&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;- Tom Huguelet&lt;/SPAN&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal&gt; &lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-9073685318231081157?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/9073685318231081157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=9073685318231081157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/9073685318231081157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/9073685318231081157'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/05/diagrams-are-back.html' title='Diagrams are Back!'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-3142912755285771562</id><published>2005-04-26T23:06:00.000-07:00</published><updated>2007-08-27T12:36:39.126-07:00</updated><title type='text'>DTS Service Benefit</title><content type='html'>&lt;BR&gt;&lt;P&gt;I've sometimes wondered what the real benefits of the DTS Service aulkre--aside from managing the server storage and monitoring jobs. I just found out that the DTS Service caches the enumeration of components. Turning on the service keeps the enumerations from having to happen each time you run the package. For some people this has made orders of magnitude difference in execution speed.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed&lt;/p&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-3142912755285771562?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/3142912755285771562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=3142912755285771562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3142912755285771562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3142912755285771562'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/04/dts-service-benefit.html' title='DTS Service Benefit'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-8850286667498713505</id><published>2005-04-06T21:12:00.000-07:00</published><updated>2007-08-27T12:36:40.316-07:00</updated><title type='text'>Link to Unknown Member Blog</title><content type='html'>&lt;BR&gt;&lt;DIV dir=ltr&gt;&lt;FONT size=2&gt;Christian Wade from Conchango has an excellent blog entry on issues relative to the Unknown Member. He makes a compelling case for handling unknown members in the ETL whenever possible, and describes an excellent way of keeping clear which fact records need to be reprocessed.&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV dir=ltr&gt;&lt;FONT size=2&gt;&lt;/FONT&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;DIV dir=ltr&gt;&lt;FONT size=2&gt;&lt;A title=http://blogs.conchango.com/christianwade/archive/2005/04/01/1228.aspx href="http://blogs.conchango.com/christianwade/archive/2005/04/01/1228.aspx" target=_blank&gt;http://blogs.conchango.com/christianwade/archive/2005/04/01/1228.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV dir=ltr&gt;&lt;FONT size=2&gt;&lt;/FONT&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;DIV dir=ltr&gt;&lt;FONT size=2&gt;- Reed&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV dir=ltr&gt;&lt;FONT size=2&gt;&lt;/FONT&gt; &lt;/DIV&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-8850286667498713505?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/8850286667498713505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=8850286667498713505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8850286667498713505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8850286667498713505'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/04/link-to-unknown-member-blog.html' title='Link to Unknown Member Blog'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-2544220841352939423</id><published>2005-02-24T01:46:00.000-08:00</published><updated>2007-08-27T12:36:41.419-07:00</updated><title type='text'>Hybrid MOLAP/ROLAP dimensions</title><content type='html'>&lt;BR&gt;&lt;P&gt;Some dimensions—if you push them to their physical extreme, something we never did in 2000—get very, very large at the bottom. As a simple example, you could have 50M customers. In 32-bit AS2K you would never dream of making that a dimension—or at least not a MOLAP dimension—and you wouldn’t want to make it into a ROLAP dimension either, because that would eliminate any MOLAP data storage anywhere in the cube. In 2005, I can easily imagine a situation where I would want the most aggregated attributes (Country, State, City) of a user hierarchy to be MOLAP—so that they can support good MOLAP aggregations—and the bottom attributes (such as Customer, or even Order ID) as ROLAP, so they don’t require MOLAP processing. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;The developers imagined it as well, but apparently couldn’t get it to work in the Yukon time frame. So the whole dimension has to be either MOLAP or ROLAP. In the first place, my experience with large ROLAP dimensions used with a MOLAP cube is very limited (which is to say, not yet existent), so it may not be all that much of an issue. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;If it turns out that a truly “hybrid” dimension is desirable, there are a couple of ways I can think of for creating the hybrid. One is to split the dimension in two, with the higher-level (MOLAP) one a reference dimension by way of the lower-level (ROLAP) one. Another is to create a many-to-many dimension to connect the two. It will be interesting to experiment with different alternatives in specific scenarios.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;-- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-2544220841352939423?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/2544220841352939423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=2544220841352939423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/2544220841352939423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/2544220841352939423'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/02/hybrid-molaprolap-dimensions.html' title='Hybrid MOLAP/ROLAP dimensions'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-3327172416485081109</id><published>2005-02-23T05:54:00.000-08:00</published><updated>2007-08-27T12:36:42.506-07:00</updated><title type='text'>Drill Through and Fact Dimensions</title><content type='html'>&lt;BR&gt;&lt;P&gt;Fact Dimensions did not work in Beta 2. At the time I assumed that they were just “degenerate” dimensions, so that you could create dimensions directly from low-cardinality values stored directly in the fact table—such as whether a row was part of a promotion or something like that. I also assumed (without ever really looking at it closely) that Drill Through was basically the same as in AS 2000—a SQL Query retrieval of the rows that contribute to a specific cell. &lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;P&gt;In the Dec CTP, they fixed fact dimensions—and it turns out that they are completely different from what I had thought. A fact dimension is essentially using the fact table itself as a dimension—with multiple possible attributes—and it is the key to getting Drill Through to work.&lt;/P&gt;&lt;br /&gt;&lt;P &gt;Suppose that you had a PO number as a field in the fact table, but didn’t want to include that in any dimension. In 2000, you could retrieve the PO directly from the fact table via Drill Through and a SQL Query. In 2005, all Drill-Through requests go to the UDM (which actually seems internally consistent with the concept of the UDM). But that means that any column from the fact table that you want returned in the Drill Through result has to be part of a dimension. Hence the Fact dimension. First add a primary key to the fact table. (You can, in principle, use a combination of columns to get a unique key, but I think it’s good practice—and I’ve had better success—just adding an AutoNumber primary key column.) You then create a dimension using the fact table primary key as the key, and add any other columns from the fact table (such as the PO number) as attributes. Then make the dimension ROLAP storage. Once you add the dimension to the cube (and probably hide it from the users), you can include any of its attributes in the Drill Through Action definition. It actually worked quite well for us. Good luck.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;--Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-3327172416485081109?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/3327172416485081109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=3327172416485081109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3327172416485081109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3327172416485081109'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/02/drill-through-and-fact-dimensions.html' title='Drill Through and Fact Dimensions'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-717115811370597674</id><published>2005-02-22T03:24:00.000-08:00</published><updated>2007-08-27T12:36:43.709-07:00</updated><title type='text'>Proactive Caching</title><content type='html'>&lt;BR&gt;&lt;P&gt;Another question that came up at the Issaquah Ascend class was related to Proactive Caching. Specifically, where is it stored? In case you haven’t heard about it yet, this is one of the interesting new features of Analysis Services 2005 that really changes maintenance strategies from the way you currently keep cubes up-to-date in AS2000. It’s a huge step towards real-time OLAP without the traditional issues associated with ROLAP storage. With proactive caching, you have MOLAP storage just as you always did with AS2000, but now you also have relational storage. (So unlike AS2000, where in theory you can toss your source database and run solely off of the cube – assuming you never wanted to update it again – you must maintain a relationship to the relational source in 2005 in order for proactive caching to work). &lt;br /&gt;&lt;P&gt;&lt;br /&gt;&lt;P&gt;As changes to the relational source occur, updates to the MOLAP cache also occur—eventually (based on how you configure triggering events and frequency). However, as with AS2000, you still need to provide a query for the partition that correctly identifies new rows in the relational source. In theory, you could have two versions of the MOLAP cache concurrently - the cache responding to queries and the cache that is being rebuilt to conform to the changes in the relational source. When the rebuild is complete, the obsolete cache goes away. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Stacia&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-717115811370597674?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/717115811370597674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=717115811370597674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/717115811370597674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/717115811370597674'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/02/proactive-caching.html' title='Proactive Caching'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-5418409902249536351</id><published>2005-02-01T21:54:00.000-08:00</published><updated>2007-08-27T12:36:45.260-07:00</updated><title type='text'>Gaining Perspective on Perspectives</title><content type='html'>&lt;BR&gt;&lt;P &gt;One of the questions that came up in the Ascend class held in (rainy) Issaquah in January:  What happens if you have the same perspective name across multiple cubes in the same database? It seems logical that it should not be possible to create multiple perspectives with the same name inside the same cube, but would that also be true if the perspectives were in different cubes in the same database? We didn’t take the time to actually try this out in class, but I surmised that it wasn’t possible. Afterwards, I tested this out once in the BI Development Studio (BIDS). I also tested by running the Deployment Utility against the .asdatabase file after I modified the file manually to add two perspectives with the same name in different cubes. Whether using BIDS or the utility, I was politely informed that the perspective name that I tried to reuse was already in use and stopped from continuing. &lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;P &gt;This behavior seems reasonable and shouldn’t surprise anyone. But perhaps a more interesting question that stems from the original question: why would you want multiple cubes in the same database? In AS2000, it was not uncommon to have multiple cubes in the same database because there was a one-to-one relationship between a fact table and a cube. Now in AS2005, you can have one cube with multiple fact tables (using measure groups) and now the one-to-one relationship is between a fact table and a measure group. The vision is now to have a “one cube fits all” solution – something I would never have believed I would find myself saying, having reeducated a lot of clients about the perils of having too much in a single cube.  To be honest, I haven’t pondered all of the ramifications of this new design approach, but as of yet can’t come up with an argument against having a single cube. I’m looking forward to following the certain debate to come regarding the pros and cons of One Cube.&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;P &gt;So with everything in one cube, it can sure get confusing for an end user to navigate that cube. Enter perspectives to save the day. To my front-end tools of choice, the default perspective of the cube (which includes everything) appears side-by-side with any additional perspectives that were added to the cube. The idea of perspectives is to filter a cube to show only dimensions with measure groups that make sense together – whether oriented around subject matter or end user roles. It’s important to note that there is no security on perspectives - cube and dimension level security will be honored, but you can’t limit certain users/groups to certain perspectives. BOL explicitly states that perspectives are not intended to be part of the security architecture. By pointing this out, I provoked a stimulating conversation on the subject of security in the class. The bottom line is that the analogy between virtual cubes and perspectives falls apart when it comes to security. Be sure to consider the impact of this constraint when you plan the migration of your AS2000 cubes.&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;P &gt;-- Stacia&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-5418409902249536351?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/5418409902249536351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=5418409902249536351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/5418409902249536351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/5418409902249536351'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/02/gaining-perspective-on-perspectives.html' title='Gaining Perspective on Perspectives'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-8672797223200933850</id><published>2005-01-27T05:12:00.000-08:00</published><updated>2007-08-27T12:36:47.584-07:00</updated><title type='text'>Attributes queried separately</title><content type='html'>&lt;BR&gt;&lt;P&gt;You may notice that when AS2005 processes a dimension, it creates a separate query for each attribute. One reason for doing this is that it allow you to encorporate data from different data sources. It will, however, sometimes query for multiple attributes--particularly at the leaf level--and in a snowflaked dimension, that may result in SQL Join clauses.&lt;/P&lt;br /&gt;&lt;P&gt;What it is really doing is a creating single query for all columns "related" to one attribute. That would include the Key, the Name, and all Member Properties. In a generic (manually created) dimension, all attributes are defined as member properties of the key attribute. In the sample AdventureWork database Product dimension, you can see a join at the leaf level between Product and Subcategory. The Category member property, however is moved from the key attribute up to the SubCategory attribute, so you should see the join in the query for Subcategory. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;The developers told me that one of the ways that IntelliCube (or whatever its name ends up being) will assign member properties is based on same-table of snowflake dimension (and, if I remember correctly, that portion of Intellicube already works in Beta 2). You can, of course, manually move the member properties as needed. I would think that if a member property causes a join in a properly snowflaked dimension, it would indicate that you should move the member property to a higher level--to the attribute that is the PK of the higher table. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;-- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-8672797223200933850?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/8672797223200933850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=8672797223200933850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8672797223200933850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8672797223200933850'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2005/01/attributes-queried-separately.html' title='Attributes queried separately'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-8468974932160603000</id><published>2004-12-23T03:19:00.000-08:00</published><updated>2007-08-27T12:36:48.786-07:00</updated><title type='text'>Thin Client OLAP tool</title><content type='html'>&lt;BR&gt;&lt;P&gt;There's a new, free, thin client OLAP tool available for download from the microsoft.com site. It's developed by the Grape consortium in asia. I haven't had a chance to look at it very closely, and I don't think it works yet with Yukon, but still seems to warrant a look, particularly since it's now a Microsoft download. To find it, Google for "OLAP GrapeCity Microsoft" and look for the reference at microsoft.com. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-8468974932160603000?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/8468974932160603000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=8468974932160603000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8468974932160603000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8468974932160603000'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/12/thin-client-olap-tool.html' title='Thin Client OLAP tool'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-1734594094229279342</id><published>2004-12-20T03:35:00.000-08:00</published><updated>2007-08-27T12:36:49.789-07:00</updated><title type='text'>Using Scripts to Simulate High-level Write-Back</title><content type='html'>&lt;BR&gt;&lt;P&gt;Data write-back in Analysis Services has always been a bit frustrating because it's ultimately limited to leaf-level storage. (Not that leaf-level data write-back is not extremely useful--think of the millions of budgets that are input by using Excel spreadsheets--leaf-level data input without the benefits of an OLAP engine.) At any rate, Yukon write-back is still going to be ultimately leaf-level. One option for efficient high-level write-back is to "allocate" the values for each level to a single "dummy" member. But there's another option that we used occasionally in AS2K that would be even easier to implement in Yukon.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;In AS2K, you can create Calculated Cell expressions that change the value of a single cell. So you can simulate data write-back by writing a calculated cell that assigns the target value to the specific single-cell subcube. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;In Yukon, you get the same effect as a Calculated Cell by simply executing a script assignment. So, in a hypothetical cube with two non-measure attributes--account, and period, if the user enters the value 1000 for March Net Profit, you could "store" that value by using the simple assignment statement &lt;/P&gt;&lt;br /&gt;&lt;P&gt;([March], [Net Profit], [Amount]) = 1000; &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Over the course of a session, your code collects these assignment statements, and at the "commit" portion, exports them to a process that parses, allocates and loads into a processable fact table.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;-- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-1734594094229279342?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/1734594094229279342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=1734594094229279342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/1734594094229279342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/1734594094229279342'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/12/using-scripts-to-simulate-high-level.html' title='Using Scripts to Simulate High-level Write-Back'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-2107958557644749665</id><published>2004-12-15T00:59:00.000-08:00</published><updated>2007-08-27T12:36:50.892-07:00</updated><title type='text'>Writing back descriptive data</title><content type='html'>&lt;BR&gt;&lt;P &gt;OLAP is fundamentally numeric. Through "official" data write-back, you can't write comment values to a cell. That doesn't mean your app can't do it on the side&lt;/P&gt;&lt;br /&gt;&lt;P &gt;Inside an app, you could capture the tuple of the cell that gets the comment, convert the tuple into a unique relational key, and store the comment with the tuple. You then do the reverse on query.&lt;/P&gt;&lt;br /&gt;&lt;P &gt;Emir pointed out that you could accomplish the same effect completely within the cube: create a "comments" dimension that begins essentially empty. Then use dimension write-back to create the unique key for a tuple and add it as a new dimension member, with the comment text as the "name" of the member. &lt;/P&gt;&lt;br /&gt;&lt;P &gt;You could then create an action on the cell that looks up the unique value--perhaps using a User Defined Function (UDF).&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;P &gt;- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-2107958557644749665?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/2107958557644749665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=2107958557644749665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/2107958557644749665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/2107958557644749665'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/12/writing-back-descriptive-data.html' title='Writing back descriptive data'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-8865634089301767603</id><published>2004-11-04T22:49:00.000-08:00</published><updated>2007-08-27T12:36:51.912-07:00</updated><title type='text'>CrossJoin vs SubCube</title><content type='html'>&lt;BR&gt;&lt;P&gt;In Yukon MDX, you can crossjoin two sets by simply enclosing them in parentheses. In a way, it's like using the CrossJoin function without using the word. In other words, you just list the sets as if they were parameters, but leave the function name off. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;But that's not really what's happening. Parentheses form a subcube. A subcube is very similar to a crossjoin, but with slight differences. With the Crossjoin function, you can't have the same hierarchy appear more than once, but with a subcube (that is, with the parentheses alone), you can use a specific member of one or more hierarchies, and then use the Tree(&lt;Dimension&gt;) function to fill in all the remaining attribute hierarchies. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;Thus, the expression &lt;EM&gt;Crossjoin([Bikes],Tree([Product]))&lt;/EM&gt; is invalid, because the Category attribute appears both in [Bikes] and in Tree([Product]), but the expression &lt;EM&gt;([Bikes],Tree([Product]))&lt;/EM&gt; is valid, because the subcube operator just "fills in" the unused hierarchies.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;One interesting thing about the subcube notation is that it is identical to tuple notation, except that as a tuple, you use single-members instead of sets. The intriguing part about that is that a tuple really is the crossjoin of individual members, so the notational similarity really does match an underlying semantic similarity. Form follows function. The Bauhaus architects would be happy. (See, I learned something in Munich.)&lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-8865634089301767603?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/8865634089301767603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=8865634089301767603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8865634089301767603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/8865634089301767603'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/11/crossjoin-vs-subcube.html' title='CrossJoin vs SubCube'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-4729380618567998335</id><published>2004-11-01T22:51:00.000-08:00</published><updated>2007-08-27T12:36:53.041-07:00</updated><title type='text'>Chertsey is not London</title><content type='html'>&lt;BR&gt;&lt;P&gt;[This post has nothing to do with Yukon, and should in no way be interpreted as my having being the least bit disappointed by my experience in, uh, London]&lt;/P&gt;&lt;br /&gt;&lt;P&gt;If you ever go to a training class at Microsoft in London, check to see whether it is really in Chertsey, which is where their new training facility is. (Apparently, the facility came along with the Great Plains acquisition.) And if you go to Chertsey, be aware that you are going to a charming little town out in Surrey, and don't expect to pop down to the west end for a show in the evening. And if you stay at the Hilton Cobham (which really is a nice place), expect to be out in the middle of the forest at a popular "hideaway" where the only way out is by car or taxi--an easy hour to Chertsey during rush hour.&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-4729380618567998335?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/4729380618567998335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=4729380618567998335' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4729380618567998335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4729380618567998335'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/11/chertsey-is-not-london.html' title='Chertsey is not London'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-6866719887849662305</id><published>2004-10-28T22:37:00.000-07:00</published><updated>2007-08-27T12:36:54.242-07:00</updated><title type='text'>Use Hierarchies are Fake</title><content type='html'>&lt;BR&gt;&lt;P&gt;One of the strongest points I tried to make while teaching about the new world of Yukon Analysis Services is that User Hierarchies are completely devoid of meaning--except insofar as they map to attribute hierarchies. One of the students had an interesting scenario, where she wanted to calculate something only at the product level, never at any higher level of a user hierarchy. Adding IIF structures to test for every possible user hierarchy seemed daunting--and unsupportable. So we tried a simple test. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;We put a set of User Hieararchy members on Rows in a report, and then created calculated members to show the name of the current member of the &lt;EM&gt;attribute&lt;/EM&gt; hierarchies. So on rows, we had [User Hierarchy].Members, but on columns displayed [Attribute Hierarchy].CurrentMember.UniqueName, etc. In all cases, the current member of the attribute hierarchy was the member mapped to from the user hierarchy. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;This was perfect. In the MDX, we could test for [attribute hierarchy].currentmember.level.ordinal &lt;&gt; 0, and it wouldn't matter where we were in whatever user hierarchy.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-6866719887849662305?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/6866719887849662305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=6866719887849662305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6866719887849662305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6866719887849662305'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/use-hierarchies-are-fake.html' title='Use Hierarchies are Fake'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-2418942155612140017</id><published>2004-10-26T22:03:00.000-07:00</published><updated>2007-08-27T12:36:55.752-07:00</updated><title type='text'>DTS Programming</title><content type='html'>&lt;BR&gt;&lt;P&gt;Let's be honest. It's, er, challenging;to code against the DTS object model. But a lot of the reason is because DTS--oops, Integration Services--is not really a set of objects, but rather a development platform with two primary engines, the runtime engine (for control flow) and the pipeline engine (for data flow). All the tasks and transforms are "plug-ins" that somebody wrote to fit into one of the two main engines. Once you get that distinction clear, and pay close attention to when you are writing to the DTS engine, and when you are writing to the plug-in componen; much of the confusion goes away.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;I started using a pseudo-hungarian naming convention where the last letter of the prefix was 'o' for the 'outer' or engine object, and 'i' for the 'inner' or plug-in object. Once I did that, I realized that there was a remarkable pattern going. All the communication with the 'outer' object is essentially the same, regardless of what you're creating, and the 'inner' object code is where the uniqueness of the plug-in reveals itself.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Perhaps that's why they decided to give DTS a fancy new name.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-2418942155612140017?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/2418942155612140017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=2418942155612140017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/2418942155612140017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/2418942155612140017'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/dts-programming.html' title='DTS Programming'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-4778370263168317678</id><published>2004-10-25T00:00:00.000-07:00</published><updated>2007-08-27T12:36:56.900-07:00</updated><title type='text'>SQL and MDX</title><content type='html'>&lt;BR&gt;&lt;P&gt;I just finished delivering the first two rounds of the BI Development course--in Munich and London.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;One of the most popular sections was a comparison between SQL and MDX queries. In it, I try to clarify a) how the query structures are similar, b) how they way they are interpreted is different, and c) how MDX is very powerful and extensible for reporting--given the modular nature of set functions. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;This is not particularly new for Yukon, but in fact the UDM is a major feature of Yukon, and access to the UDM requires MDX queries, so it becomes increasingly relevant in Yukon. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-4778370263168317678?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/4778370263168317678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=4778370263168317678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4778370263168317678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/4778370263168317678'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/sql-and-mdx.html' title='SQL and MDX'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-7458023710517127339</id><published>2004-10-19T23:59:00.000-07:00</published><updated>2007-08-27T12:36:58.325-07:00</updated><title type='text'>When is Data Mining not Data Mining</title><content type='html'>&lt;BR&gt;&lt;P&gt;After I taught my nice, dry, boring exposition on Data Mining in Munich, Raman Kohli (the Ascend liason who accompanied me from Redmond to make sure I didn't screw up too badly), came in and suggested the idea that data mining should never be referred to as such. That you should talk only about the solutions--Market Basket Analysis, Trend Analysis, etc--and not even use the words 'data mining'. Now, I managed to ignore most of what Raman said to me, but this one actually clicked home. Each of the Data Mining models is actually built to solve a particular type of problem, or analysis, and 'data mining' just happens to be the engine or technique that populates the model with coefficients from actual data. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;So, in London, I changed the title slide of the Data Mining section to 'Market Basket Analysis and other Cool Tools'. Raman thought I was making fun of him, which I wasn't (OK, maybe I was, but just a little).&lt;/P&gt;&lt;br /&gt;&lt;P&gt;-- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-7458023710517127339?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/7458023710517127339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=7458023710517127339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/7458023710517127339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/7458023710517127339'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/when-is-data-mining-not-data-mining.html' title='When is Data Mining not Data Mining'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-7754992486792752964</id><published>2004-10-17T21:43:00.000-07:00</published><updated>2007-08-27T12:36:59.633-07:00</updated><title type='text'>Limiting Delimiters</title><content type='html'>&lt;BR&gt;&lt;P&gt;I had already noticed that Yukon MDX did not require braces around a single member set. So the fragment &lt;I&gt;SELECT [Sales Amount] ON COLUMNS&lt;/I&gt; now works fine. What I didn't know until a student pointed it out today is that the MDX in a WITH MEMBER clause no longer needs apostrophes around the expression. So you can say &lt;I&gt;With Member [Measures].[Test] as Sum(Product) instead of ... as 'Sum(Product)'&lt;/I&gt;. One appreciates those little things that make ones life simpler.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;-- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-7754992486792752964?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/7754992486792752964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=7754992486792752964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/7754992486792752964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/7754992486792752964'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/limiting-delimiters.html' title='Limiting Delimiters'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-2438871147951075577</id><published>2004-10-14T21:35:00.000-07:00</published><updated>2007-08-27T12:37:01.641-07:00</updated><title type='text'>Conditional Strings and Numbers</title><content type='html'>&lt;BR&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;One of those minor but terribly annoying facts of MDX in AS2K was that the IIF function was really two functions, one of which could return a number and another that could return a string. Thus, you could never return "OK" if True and 2.134 if False. &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt; &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;It is hard to describe how euphoric I got just from discovering that you can now mix and match strings and numbers in an IIF function. Maybe I just need more sleep.&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt; &lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;-- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-2438871147951075577?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/2438871147951075577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=2438871147951075577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/2438871147951075577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/2438871147951075577'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/conditional-strings-and-numbers.html' title='Conditional Strings and Numbers'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-6282080300696369367</id><published>2004-10-10T22:49:00.000-07:00</published><updated>2007-08-27T12:37:03.036-07:00</updated><title type='text'>Inverse Sets </title><content type='html'>&lt;BR&gt;&lt;P&gt;In an earlier entry “Getting something out of nothing”, Scott explained his solution for using a separate measure group to copy only the desired values from a cube, leaving the rest null.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;I had an idea that might be even simpler in some situations. Rather than create a measure group, create a new dimension--similar to a Scenario dimension--where all the values in the fact table have one value. Then you can simply scope on the second member, assigning the selected values from the first.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;- Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-6282080300696369367?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/6282080300696369367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=6282080300696369367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6282080300696369367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/6282080300696369367'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/inverse-sets.html' title='Inverse Sets '/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-3253181738044510566</id><published>2004-10-07T05:20:00.000-07:00</published><updated>2007-08-27T12:37:05.141-07:00</updated><title type='text'>Willkommen!</title><content type='html'>&lt;BR&gt;&lt;DIV&gt;Greetings from Munich. I have been teaching the first full delivery of the BI Development course. A few rough spots, but overall I think it's gone fairly well.&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;I managed to spend my whole first day here touring the city desperately searching for a US-German power socket adapter. I managed to make full use of trains, subways, trams, busses, and foot, all over the city, only to find what I needed back at the main train station. But it was a fun way to explore the city. Even funner was going with the elegant receptionist at the hotel down to the workshop in the basement to hack-saw up the adapter to allow my cell phone charger to fit. &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;-- Reed&lt;/DIV&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-3253181738044510566?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/3253181738044510566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=3253181738044510566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3253181738044510566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/3253181738044510566'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/willkommen.html' title='Willkommen!'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-1680098989467975199</id><published>2004-10-05T22:17:00.000-07:00</published><updated>2007-08-27T12:37:06.195-07:00</updated><title type='text'>Getting something out of nothing</title><content type='html'>&lt;BR&gt;&lt;P&gt;I was working on a cube that where I wanted values visible for some cells and all other cells to be null. I wanted to define a subcube that would have visible values and apply any needed MDX. Then I would define the complement of this subcube and set the cell values to null. The problem was that while the subcube where I wanted values was easy to define, the complement of that subcube was very difficult to define&lt;/P&gt;&lt;br /&gt;&lt;P&gt;I next tried to create a calculated member that would be null and then use a SCOPE statement and an assignment statement to make the calculated member have values where I wanted to see data. The problem with this is that you can only use assignment statements to assign values on the physical space of the cube. You can not assign a calculated member a new value.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;My solution was to create a new measure group and measure. In the measure group SQL statement I had “WHERE 1=2”. This means that the measure group will always be empty. But because the measure is a physical part of the cube, I can use a SCOPE statement and an assignment statement to apply MDX to the cells that I want to have values, setting the measure in the empty measure group equal to the measure in the measure group that contains data. The cells that I want null are already null in this new measure group. The final step is the set Visible=False in my original measure.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Scott&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-1680098989467975199?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/1680098989467975199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=1680098989467975199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/1680098989467975199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/1680098989467975199'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/getting-something-out-of-nothing.html' title='Getting something out of nothing'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-954752569264274606</id><published>2004-10-03T22:44:00.000-07:00</published><updated>2007-08-27T12:37:07.172-07:00</updated><title type='text'>Hurricanes</title><content type='html'>&lt;BR&gt;&lt;DIV&gt;I just finished up the Reporting Services pre-conference, and the regular session at PASS before flying to Germany to do the first full-week delivery of the Ascend BI course.&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;Unfortunately, because Jeanne swept through Orlando, the airport was shut down from Saturday noon until Monday noon, so none of us were able to get to the pre-pre-conference session on Yukon. I flew to Pensacola on Sunday, thinking it would be easier to get to Orlando from there, only to find that my flight to Orlando was cancelled at the last minute because Jeanne had closed down Atlanta, preventing the crew from arriving. &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;So to avoid cancelling the Tuesday pre-conference session, I caught the 5:20 early flight out, arriving in Orlando with 20 minutes to spare before my pre-conference session began. The PASS organizers were a little nervous. The session was on Reporting Services--mostly 2000--and went quite well.&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;Hopefully, tomorrow I can make it over to see a bit of the closing day of Oktoberfest.&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;-- Reed&lt;/DIV&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-954752569264274606?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/954752569264274606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=954752569264274606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/954752569264274606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/954752569264274606'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/10/hurricanes.html' title='Hurricanes'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6186345343166573373.post-286409085820494984</id><published>2004-07-11T11:45:00.000-07:00</published><updated>2007-08-27T12:35:31.930-07:00</updated><title type='text'>UDM, MDX, and SQL</title><content type='html'>&lt;BR&gt;&lt;P&gt;One of the major new features in Yukon BI is the Unified Dimensional Model, or UDM, and one of the big benefits of the UDM is the seamless integration of relational and multi-dimensional (MOLAP) data. The idea is that you define the data logically and then decide separately how parts should be physically implement--using purely relational storage, by adding explicit MOLAP aggregations, or by some cool new combinations. It's a great concept.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Most people I've talked to who have heard about the UDM in Yukon have interpreted the idea of “seamless integration“ to mean that they could arbitrarily write either SQL or MDX queries against the UDM. I have to admit that I am one of those who made that assumption. The reality is that to use the UDX you always (for all practical purposes) use MDX, regardless of whether the data is stored relationally or multi-dimensionally. When I first found out that accessing the UDM requires MDX, I was a bit, shall we say, disappointed. I'm a big fan of MDX, and know that there are a lot of upsides to using MDX for reporting, but it has always been plagued by a few serious “downsides“ that made it unusable in some situations, so it was hard to envision building all reporting queries using MDX.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;But most of the downsides of MDX have actually been limitations of Analysis Services 2000. For example, it's easy in SQL to create a query to group by, say, Invoice Number, even if there are 10 million invoices. (Not smart, necessarily, but easy.) In AS2K (at least 32 bit), it was simply impossible to create that kind of query. But the limitation was actually how big the dimension could be, not the MDX query per se. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;Other limitations that were part of MDX have been removed in Yukon. For example, in SQL, if the filter is &lt;EM&gt;WHERE Type In (1,2,3)&lt;/EM&gt;, but there is no type 2, the result set simply does not include item 2. In AS2K MDX, if you request Types 1,2,3 on rows, and there is no type 2, the query fail. This is simply fixed in Yukon. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;Some other time, I'll wax eloquent about the upsides of MDX as a reporting language.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Reed&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6186345343166573373-286409085820494984?l=hccmsbi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hccmsbi.blogspot.com/feeds/286409085820494984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6186345343166573373&amp;postID=286409085820494984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/286409085820494984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6186345343166573373/posts/default/286409085820494984'/><link rel='alternate' type='text/html' href='http://hccmsbi.blogspot.com/2004/07/udm-mdx-and-sql.html' title='UDM, MDX, and SQL'/><author><name>HCCBI</name><uri>http://www.blogger.com/profile/10339880195227876012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
