ssas读取MySQL,使用Adomd,通过XMLA协议,对SSAS和Mondrian进行访问。

#region 加载单个Cube信息

private void BindCubeInfo(string cubeName)

{

if (tvCubeInfo.Nodes[cubeName] != null)

{

tvCubeInfo.Nodes.RemoveByKey(cubeName);

}

CubeDef cubeDef = co.GetCube(cubeName);

tvCubeInfo.Nodes.Add(cubeDef.Name, cubeDef.Caption, "Cube", "Cube");

tvCubeInfo.Nodes[cubeDef.Name].Tag = cubeDef;

tvCubeInfo.Nodes[cubeDef.Name].Nodes.Add("Measures_", "Measures", "Measure", "Measure");

tvCubeInfo.Nodes[cubeDef.Name].Expand();

BindMeasuresForCube(cubeName);

BindDimensionsForCube(cubeDef);

}

private TreeNode GetCubeNode(string cubeName)

{

return tvCubeInfo.Nodes[cubeName];

}

private TreeNode GetMeasuresRoot(string cubeName)

{

return tvCubeInfo.Nodes[cubeName].Nodes["Measures_"];

}

private void BindMeasuresForCube(string cubeName)

{

IEnumerable measures = co.GetMeasures(cubeName);

TreeNode rootOfMeasures = GetMeasuresRoot(cubeName);

rootOfMeasures.Nodes.Clear();

if (measures == null) return;

bool hasGroup = measures.FirstOrDefault().Properties.Find("MEASUREGROUP_NAME") != null;

if (hasGroup)

{

var groups = measures.Select(r => r.Properties["MEASUREGROUP_NAME"].Value.ToString()).Distinct();

foreach (var group in groups.OrderBy(r => r))

{

var tempMeasures = measures.Where(r => r.Properties["MEASUREGROUP_NAME"].Value.ToString().Equals(group));

rootOfMeasures.Nodes.Add(group, group, "Group", "Group");

foreach (var item in tempMeasures.OrderBy(r => r.Caption))

{

string name = item.Name;//.Replace("$", "");

string caption = item.Caption;//.Replace("$", "");

TreeNode tempNode = new TreeNode(caption);

tempNode.Name = name;

tempNode.Tag = item;

bool visible = item.Properties["MEASURE_IS_VISIBLE"].Value.Value(true);

Property expressionProperty = item.Properties.Find("EXPRESSION");

string expression = expressionProperty == null ? "" : expressionProperty.Value.ToJString();

string key = string.IsNullOrEmpty(expression) ? "Measure" : "CalMeasure";

tempNode.SelectedImageKey = tempNode.ImageKey = visible ? key : "" + key;

tempNode.ToolTipText = string.Format("Name:[{0}]Caption:[{1}]", item.Name, item.Caption);

rootOfMeasures.Nodes[group].Nodes.Add(tempNode);

}

}

}

else

{

rootOfMeasures.Nodes.Add("DefaultGroup", "DefaultGroup", "Group", "Group");

foreach (var item in measures.OrderBy(r => r.Caption))

{

string name = item.Name;//.Replace("$", "");

string caption = item.Caption;//.Replace("$", "");

TreeNode tempNode = new TreeNode(caption);

tempNode.Name = name;

tempNode.Tag = item;

bool visible = item.Properties["MEASURE_IS_VISIBLE"].Value.Value(true);

Property expressionProperty = item.Properties.Find("EXPRESSION");

string expression = expressionProperty == null ? "" : expressionProperty.Value.ToJString();

string key = string.IsNullOrEmpty(expression) ? "Measure" : "CalMeasure";

tempNode.SelectedImageKey = tempNode.ImageKey = visible ? key : "" + key;

tempNode.ToolTipText = string.Format("Name:[{0}]Caption:[{1}]", item.Name, item.Caption);

rootOfMeasures.Nodes[0].Nodes.Add(tempNode);

}

}

}

private void BindDimensionsForCube(CubeDef cubeDef)

{

IEnumerable dimensions = cubeDef.Dimensions.Cast();

if (dimensions == null) return;

TreeNode cubeNode = GetCubeNode(cubeDef.Name);

for (int i = cubeNode.Nodes.Count - 1; i >= 0; i--)

{

if (!cubeNode.Nodes[i].Name.Equals("Measures_", StringComparison.CurrentCultureIgnoreCase))

{

cubeNode.Nodes.RemoveAt(i);

}

}

foreach (var item in dimensions)

{

if (item.Name.Equals("Measures") || item.Caption.Equals("Measures")) continue;

string name = item.Name.Replace("$", "");

string caption = item.Caption.Replace("$", "");

TreeNode tempNode = new TreeNode(caption);

tempNode.Name = name;

bool visible = item.Properties["DIMENSION_IS_VISIBLE"].Value.Value(true);

tempNode.SelectedImageKey = tempNode.ImageKey = visible ? "Dim" : "Dim";

tempNode.Tag = item;

BindHierarchies(tempNode, item.Hierarchies);

cubeNode.Nodes.Add(tempNode);

}

}

private void BindHierarchies(TreeNode dimNode, HierarchyCollection hierarchies)

{

if (hierarchies == null || hierarchies.Count == 0) return;

foreach (var hierarchy in hierarchies)

{

string name = hierarchy.Name.Replace("$", "");

string caption = hierarchy.Caption.Replace("$", "");

TreeNode tempNode = new TreeNode(caption);

tempNode.Name = name;

tempNode.Tag = hierarchy;

bool visible = hierarchy.Properties["HIERARCHY_IS_VISIBLE"].Value.Value(true);

string key = hierarchy.Levels.Count > 2 ? "Hie" : "SingleHie";

tempNode.SelectedImageKey = tempNode.ImageKey = visible ? key : "" + key;

BindLevels(tempNode, hierarchy.Levels);

dimNode.Nodes.Add(tempNode);

}

}

private void BindLevels(TreeNode root, LevelCollection levels)

{

if (levels == null || levels.Count == 0) return;

foreach (var level in levels)

{

string name = level.Name.Replace("$", "");

string caption = level.Caption.Replace("$", "");

TreeNode tempNode = new TreeNode(caption);

tempNode.Name = name;

bool visible = level.Properties["LEVEL_IS_VISIBLE"].Value.Value(true);

tempNode.SelectedImageKey = tempNode.ImageKey = visible ? "Level" : "Level";

tempNode.Tag = level;

root.Nodes.Add(tempNode);

}

}

private void ExpendMembers(TreeNode root)

{

if (!root.ImageKey.Equals("Level") && !root.ImageKey.Equals("Member")) return;

if (root.Nodes.Count > 0) return;

MemberCollection members = null;

if (root.ImageKey.Equals("Level"))

{

Level level = root.Tag as Level;

members = level.GetMembers();

}

else if (root.ImageKey.Equals("Member"))

{

Member member = root.Tag as Member;

members = member.GetChildren();

}

else

{

return;

}

if (members == null || members.Count <= 0) return;

foreach (var member in members)

{

string name = member.Name.Replace("$", "");

string caption = member.Caption.Replace("$", "");

TreeNode tempNode = new TreeNode(caption);

tempNode.Name = name;

tempNode.SelectedImageKey = tempNode.ImageKey = "Member";

tempNode.Tag = member;

root.Nodes.Add(tempNode);

}

root.Expand();

}

#endregion

标签:C#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值