1.关于CellSet转DataTable的改进方案
2.FusionChart对MDX查询结果的数据展示案例
3.FusionCharts
/// <summary>
/// 将CellSet转化成DataTable(包括所有维度)
/// </summary>
/// <param name="cs">CellSet</param>
/// <returns></returns>
public DataTable ToDataTable(CellSet cs)
{
DataTable dt = new DataTable();
dt.TableName = "ResultTable";
DataColumn dc = null;
DataRow dr = null;
//生成数据列对象
//多个维度转化成列
for (int col = 0; col < cs.Axes[1].Set.Hierarchies.Count; col++)
{
dc = new DataColumn();
//下面的代码会报错:"The connection is not open.” 获取层次结构的维度名时需要连接Cube才可以!
//dt.Columns.Add(new DataColumn(cs.Axes[1].Set.Hierarchies[col].ParentDimension.Name));
dt.Columns.Add(new DataColumn("Dimension" + col.ToString()));
}
int index = 0;
foreach (Position p in cs.Axes[0].Positions)
{
dc = new DataColumn();
string name = "";
foreach (Member m in p.Members)
{
name += m.Caption + "-";
}
if (name.Length > 0)
{
name = name.Substring(0, name.Length - 1);
}
//这里防止维度成员或度量值重名而需要容错处理
try
{
dc.ColumnName = name;
dt.Columns.Add(dc);
}
catch (System.Exception ex)
{
dc.ColumnName = name + index.ToString();
dt.Columns.Add(dc);
}
index++;
}
//添加行数据
int pos = 0;
foreach (Position py in cs.Axes[1].Positions)
{
dr = dt.NewRow();
//维度描述列数据
int cols = 0;
foreach (Member m in py.Members)
{
dr[cols] = m.Caption;
cols++;
}
//数据列
for (int x = 1; x <= cs.Axes[0].Positions.Count; x++)
{
dr[x + cols - 1] = cs[pos++].FormattedValue;
}
dt.Rows.Add(dr);
}
return dt;
}