Sacha Tomey

Sacha Tomey's Blog

PerformancePoint Server Planning

Adrian Downes has put together a great little background article on the reasons and purpose of PerformancePoint Server planning.  An overview of the types of plans, budgets and approaches are outlined together with a brief teaser on how PerformancePoint Server can overcome some of the associated challenges.

Even better, it looks like this is the start of a whole new series relating to the Planning aspect of PerformancePoint.

Error opening file msmdredir.ini (Analysis Services 2005 Cube Processing Error)

I've experienced an intermittent error over the last week or so and I've finally got to the bottom of it.
 
When processing Analysis Services 2005 cubes from a SQL Agent Job the step reports success but occasionally logs the following error:
 
<return xmlns="urn:schemas-microsoft-com:xml-analysis">
      <root xmlns="urn:schemas-microsoft-com:xml-analysis:empty">
         <Exception xmlns="urn:schemas-microsoft-com:xml-analysis:exception" />
            <Messages xmlns="urn:schemas-microsoft-com:xml-analysis:exception">
               <Error ErrorCode="3238133773" Description="File system error: Error opening file; \Program Files\Microsoft SQL Server\90\Shared\ASConfig\msmdredir.ini is not a disk file or file is not accessible." Source="Microsoft SQL Server 2005 Analysis Services" HelpFile="" />
            </Messages>
      </root>
   </results>
</return>.  The step succeeded.
 
The cause is due to the fact I have other cubes processing at the same time on a different Analysis Services instance.  Both instances attempt to access the msmdredir.ini file around the same time and if one instance already has the file open the other instance loses out.
 
A few workarounds are possible:
- Determine the processing window and start the jobs appropriately to ensure the cubes on different instances are not processing concurrently.
- Process all cubes on the same instance (and synchronise them over to the alternative instance, once processed)
- Chain the SQL Jobs together to ensure that cubes on different instances are processed sequentially.
 
All things being equal, the second option is my favored approach.  However, due to an MS known bug relating to synchronising large and complex cubes (the reason for processing over separate instances in the first place) I've gone for the third.
 
 

Auto text overflow CSS styling

I found a great little trick today whilst trying to fit a large amount of textual data onto a single grid type row.  Rather than allow the text to wrap, potentially making rows different heights or making all rows large enough to fit the extremes I decided to fix the size and add an ellipse (...) to the end of the row if the text exceeds the limit.  I think this only works on IE.. !
 
Before I found this trick I cheated slightly and 'guestimated' how many characters would fit on the row and added the ellipse manually.  Not any more !  Check out the box below:
  
Some long text that exceed... 
 
Notice the ellipse is placed at the end of the text.
 
The magic is done by the, previously unknown to me, CSS style: text-overflow.  If you set this to ellipsis most of the work is done.  You need to set a few other attributes to get the desired effect; overflow, width and white-space.  Here is the HTML that generated the box above:
 
<span style="
                text-overflow: ellipsis;
                overflow:      hidden;
                white-space:   nowrap;
                width:         180px;
                border:        1px dashed gray;">
    Some long text that exceeds the fixed width of the span tag used in this example.
</span>
 
This trick can be applied to table cells providing the table-layout CSS style attribute is set to fixed.
 

Analysis Services XMLA to clear query cache

To get a realistic measurement of how your query tuning improves query response time you should start from a common point.  To help with this you should clear your query cache before running a queries after making improvements (Unless you are cache warming of course !).
 
Here is some XMLA script to clear the cache for a specified database.

<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
   <ClearCache>
      <Object>
         <DatabaseIDdatabase id </DatabaseID>
         <CubeID> cube id </CubeID>
      </Object>
   </ClearCache>
</Batch>
 
Replace database id and cube id with the details for your cube.  Notice these are ids, not names.  Look in the Analysis Services properties windows to find the ids.

AS2005 Cube Processing Via SSIS 2005 and SQL Server Agent

Microsoft has confirmed the processing of AS 2005 cubes from SSIS 2005 invoked from SQL Server Agent defaults to serial/sequential processing, irrespective of whether the parallel processing option has been selected.  This results in increased cube processing times (possibly up to 4 times longer) when compared with using XMLA scripted tasks from SQL Server Agent.

Microsoft has reproduced the problem and has escalated it to the SSIS Product Team.

Intellisense for ASP.NET 2.0 Skin files

Intellisense has been improved massively in Visual Studio 2005 but I noticed one file type where Intellisense is not active.  .skin files, for theming your application, do not support intellisense natively.  You can however configure Visual Studio to provide intellisense for .skin files.  Here's how:
 
1. Go to Tools->Options menu.
2. Pick Text Editor -> File Extesion fom a tree at the left part of Options dialog.
3. Type skin in Extesion text box.
4. Select User Control Editor from Editor dropdown.
5. Click Add and then Ok to close dialog and re-open your skin files.