ADOMD.Net - Bug when enumerating levels?

Tech-Archive recommends: Fix windows errors by optimizing your registry



An application I am developing needs to display the measures and levels in
each hierarchy in a cube, so I use code similar to that below to enumerate
the various CubeDef properties.
For some reason, if I enumerate the Measures before the dimension and
hierarchy objects, some hierarchies appear to have their Level objects
sorted in alphabetical order instead of the order they are defined on the
server.

By shifting the code to enumerate Measures to the end, the problem is
avoided. I wonder if other people have struck this problem?
Applying the latest hotfix for ADOMD.NET does not make any difference to
this behaviour.

Peter

// Doing this first puts some LevelCollections out of order!
TreeNode nodeMeasures = null;
foreach(Microsoft.AnalysisServices.AdomdClient.Measure m in
cubeDef.Measures)
{
if(nodeMeasures == null)
{
nodeMeasures = new TreeNode("Totals", 2, 2);
nodeMeasures.NodeFont = treeFont;
treeView.Nodes.Insert(0, nodeMeasures);
}

int imgIndex = 2;

TreeNode nodeMeasure = nodeMeasures.Nodes.Add(m.Caption);
nodeMeasure.ImageIndex = imgIndex;
nodeMeasure.SelectedImageIndex = imgIndex;
nodeMeasure.NodeFont = treeFont;

}

foreach(Microsoft.AnalysisServices.AdomdClient.Dimension dim in
cubeDef.Dimensions)
{
if(dim.DimensionType != DimensionTypeEnum.Measure)
{
TreeNode nodeDim = treeView.Nodes.Add(dim.Caption);
nodeDim.ImageIndex = 0;
nodeDim.SelectedImageIndex = 0;
if(dim.Hierarchies.Count <= 1)
{
int levelIcon = 3;
foreach(Microsoft.AnalysisServices.AdomdClient.Level level in
dim.Hierarchies[0].Levels)
{
if(level.LevelType != LevelTypeEnum.All)
{
TreeNode nodeLevel = nodeDim.Nodes.Add(level.Caption);
nodeLevel.ImageIndex = levelIcon;
nodeLevel.SelectedImageIndex = levelIcon;

if(levelIcon < 13)
levelIcon++;
}
}
}
else
{
foreach(Microsoft.AnalysisServices.AdomdClient.Hierarchy hier in
dim.Hierarchies)
{
TreeNode nodeHier = nodeDim.Nodes.Add(hier.Name);
nodeHier.ImageIndex = 1;
nodeHier.SelectedImageIndex = 1;
int levelIcon = 3;
foreach(Microsoft.AnalysisServices.AdomdClient.Level level in
hier.Levels)
{
if(level.LevelType != LevelTypeEnum.All)
{
TreeNode nodeLevel = nodeHier.Nodes.Add(level.Caption);
nodeLevel.Tag = ogsl;
nodeLevel.ImageIndex = levelIcon;
nodeLevel.SelectedImageIndex = levelIcon;

if(levelIcon < 13)
levelIcon++;
}
}
}
}
}
}


.