C#怎么建模,动态生成Cube

0
请问用C#怎么动态建模,生成Cube?都有代码来实现,不用提供的SSDT工具。比如:1、生成一个空的Cube;2、向里面导入数据;3、对导入的数据进行查询和分析处理;4、如何操作Cube,添加数据项。谢谢!
已邀请:
1

梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-09-12 回答

可以提供一个思路给你,Cube的源文件也就是 XML文件,如下图:
1.jpg


所以,你可以通过C# 操作XML的方式去实现。
1、生成一个空的Cube 可以通过操作XML形式实现
2、向里面导入数据 直接通过命令的形式处理,代码可是实现
3、对导入的数据进行查询和分析处理 可以通过MDX查询语句实现
4、如何操作Cube,添加数据项 这个有一篇文件讲解过C#读取Cube,转换成DataTable,可以参考这个文章 http://www.flybi.net/question/579 有讲解
0

kmyange - 80后,贵州IT人士 2013-09-12 回答

请问Cube的XML文件里面标签的说明?哪里有啊?每个标签是什么意思的,知道了才能写啊?
0

梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-09-12 回答

这个还真没有,给你上传一个我反向生成的 XML文件,你可以看下。你要是研究出来了,或者有啥心得,也可以分享下给大家
0

kmyange - 80后,贵州IT人士 2013-09-16 回答

AMO OLAP 基本对象的编程中的static void CreateAdventureWorksCube(Database db, string datasourceName)该怎么写啊?http://technet.microsoft.com/z ... .aspx
我现在出现问题如图,该怎么解决?求指点。
QQ图片20130916142752.jpg
0

kmyange - 80后,贵州IT人士 2013-09-16 回答

上面这个问题已解决。cube = db.Cubes.Add("TestMP_DB");
0

kmyange - 80后,贵州IT人士 2013-09-16 回答

在AMO OLAP 基本对象的编程中,CreateAdventureWorksCube()函数里的
dim = db.Dimensions.GetByName("Date");提示错误:
集合中没有“Name”为“Date”的“Dimension”。
请问在哪里设置?
http://technet.microsoft.com/z ... .aspx
0

kmyange - 80后,贵州IT人士 2013-09-17 回答

请问下面代码有什么问题,怎么生产后,在SSMS里处理时,提示图片中的错误?
bug1.jpg


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.AnalysisServices;
using System.Data.SqlClient;
using System.Globalization;

namespace DataModuleApp
{
public partial class TestAmoFrm : Form
{
public TestAmoFrm()
{
InitializeComponent();
}

string MyConnString = "Provider=SQLNCLI11.1;Data Source=localhost\\SqlServer2012M;uid=sa;pwd=123";
Server MySvr;
Database MyDb;
string MyDsName;
DataSourceView MyDsv;

//连接服务器对象
static Server ServerConnect(String strStringConnection)
{
Server svr = new Server();
try
{
svr.Connect(strStringConnection);
}
#region ErrorHandling
catch (AmoException e)
{
MessageBox.Show("AMO exception " + e.ToString());
svr = null;
}
catch (Exception e)
{
MessageBox.Show("General exception " + e.ToString());
svr = null;
}
#endregion

return svr;
}

//创建、删除和查找数据库
static Database CreateDatabase(Server svr, String DatabaseName)
{
Database db = null;
if ((svr != null) && (svr.Connected))
{
// Drop the database if it already exists
db = svr.Databases.FindByName(DatabaseName);
if (db != null)
{
db.Drop();
}

// Create the database
db = svr.Databases.Add(DatabaseName);
db.Update();
}

return db;
}

static Database ProcessDatabase(Database db, ProcessType pt)
{
db.Process(pt);
return db;
}

//创建DataSource
static string CreateDataSource(Database db, string strDataSourceName, string strConnectionString)
{
Server svr = db.Parent;
DataSource ds = db.DataSources.FindByName(strDataSourceName);
if (ds != null)
ds.Drop();
// Create the data source
ds = db.DataSources.Add(strDataSourceName, strDataSourceName);
ds.ConnectionString = strConnectionString;

// Send the data source definition to the server.
ds.Update();

return ds.Name;
}

//创建数据源视图
static DataSourceView CreateDataSourceView(Database db, string strDataSourceName)
{
// Create the data source view
DataSourceView dsv = db.DataSourceViews.FindByName(strDataSourceName);
if (dsv != null)
dsv.Drop();
dsv = db.DataSourceViews.Add(strDataSourceName);
dsv.DataSourceID = strDataSourceName;
dsv.Schema = new DataSet();
dsv.Schema.Locale = CultureInfo.CurrentCulture;

// Open a connection to the data source
SqlConnection connection
= new SqlConnection(dsv.DataSource.ConnectionString);
connection.Open();

#region Create tables

// Add the DimTime table
AddTable(dsv, connection, "TestTable_6");

#endregion

// Send the data source view definition to the server
dsv.Update();

return dsv;
}

static void AddTable(DataSourceView dsv, SqlConnection connection, String tableName)
{
string strSelectText = "SELECT * FROM . WHERE 1=0";
SqlDataAdapter adapter = new SqlDataAdapter(strSelectText, connection);
DataTable[] dataTables = adapter.FillSchema(dsv.Schema, SchemaType.Mapped, tableName);
DataTable dataTable = dataTables;

dataTable.ExtendedProperties.Add("TableType", "Table");
dataTable.ExtendedProperties.Add("DbSchemaName", "dbo");
dataTable.ExtendedProperties.Add("DbTableName", tableName);
dataTable.ExtendedProperties.Add("FriendlyName", tableName);


dataTable = null;
dataTables = null;
adapter = null;
}

static void AddComputedColumn(DataSourceView dsv, SqlConnection connection, String tableName, String computedColumnName, String expression)
{
DataSet tmpDataSet = new DataSet();
tmpDataSet.Locale = CultureInfo.CurrentCulture;
SqlDataAdapter adapter = new SqlDataAdapter("SELECT ("
+ expression + ") AS FROM . WHERE 1=0", connection);
DataTable[] dataTables = adapter.FillSchema(tmpDataSet,
SchemaType.Mapped, tableName);
DataTable dataTable = dataTables;
DataColumn dataColumn = dataTable.Columns;

dataTable.Constraints.Clear();
dataTable.Columns.Remove(dataColumn);

dataColumn.ExtendedProperties.Add("DbColumnName", computedColumnName);
dataColumn.ExtendedProperties.Add("ComputedColumnExpression",
expression);
dataColumn.ExtendedProperties.Add("IsLogical", "True");

dsv.Schema.Tables.Columns.Add(dataColumn);

dataColumn = null;
dataTable = null;
dataTables = null;
adapter = null;
tmpDataSet = null;
}

static void AddRelation(DataSourceView dsv, String fkTableName, String fkColumnName, String pkTableName, String pkColumnName)
{
DataColumn fkColumn
= dsv.Schema.Tables.Columns;
DataColumn pkColumn
= dsv.Schema.Tables.Columns;
dsv.Schema.Relations.Add("FK_" + fkTableName + "_"
+ fkColumnName, pkColumn, fkColumn, true);
}

static void AddCompositeRelation(DataSourceView dsv, String fkTableName, String pkTableName, String columnName1, String columnName2)
{
DataColumn[] fkColumns = new DataColumn;
fkColumns = dsv.Schema.Tables.Columns;
fkColumns = dsv.Schema.Tables.Columns;

DataColumn[] pkColumns = new DataColumn;
pkColumns = dsv.Schema.Tables.Columns;
pkColumns = dsv.Schema.Tables.Columns;

dsv.Schema.Relations.Add("FK_" + fkTableName + "_" + columnName1
+ "_" + columnName2, pkColumns, fkColumns, true);
}

// 创建物品维度
static void CreateProductDimension(Database db, string datasourceName)
{
// Create the Product dimension
Dimension dim = db.Dimensions.FindByName("物品");
if (dim != null)
dim.Drop();
dim = db.Dimensions.Add("物品");
dim.Type = DimensionType.Products;
dim.UnknownMember = UnknownMemberBehavior.Hidden;
dim.AttributeAllMemberName = "所有物品";
dim.Source = new DataSourceViewBinding(datasourceName);
dim.StorageMode = DimensionStorageMode.Molap;

#region Create attributes

DimensionAttribute attr;

attr = dim.Attributes.Add("物品编号");
attr.Usage = AttributeUsage.Key;
attr.Type = AttributeType.Product;
attr.OrderBy = OrderBy.Name;
attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews, "TestTable_6", "Col0"));

attr = dim.Attributes.Add("物品名称");
attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews, "TestTable_6", "Col1"));

attr = dim.Attributes.Add("物品数量");
attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews, "TestTable_6", "Col2"));

attr = dim.Attributes.Add("物品金额");
attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews, "TestTable_6", "Col4"));

attr = dim.Attributes.Add("记录时间");
attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews, "TestTable_6", "Col5"));

#endregion

#region Create hierarchies

Hierarchy hier;

hier = dim.Hierarchies.Add("TTime");
hier.AllMemberName = "TTimes";
hier.Levels.Add("记录时间").SourceAttributeID = "记录时间";

#endregion

dim.Update();
}

static DataItem CreateDataItem(DataSourceView dsv, string tableName, string columnName)
{
DataTable dataTable = ((DataSourceView)dsv).Schema.Tables;
DataColumn dataColumn = dataTable.Columns;
return new DataItem(tableName, columnName,
OleDbTypeConverter.GetRestrictedOleDbType(dataColumn.DataType));
}

//对所提供数据库中的所有维度执行增量更新
static void UpdateAllDimensions(Database db)
{
foreach (Dimension dim in db.Dimensions)
dim.Process(ProcessType.ProcessUpdate);
}

//创建、删除和查找多维数据集
static void CreateAdventureWorksCube(Database db, string datasourceName)
{
// Create the Adventure Works cube
Cube cube = db.Cubes.FindByName("TestMP_DB");
if (cube != null)
cube.Drop();
cube = db.Cubes.Add("TestMP_DB");
cube.DefaultMeasure = "记录数";
cube.Source = new DataSourceViewBinding(datasourceName);
cube.StorageMode = StorageMode.Molap;

#region Create cube dimensions

Dimension dim;

dim = db.Dimensions.GetByName("物品");
cube.Dimensions.Add(dim.ID);
#endregion

#region Create measure groups

CreateInternetSalesMeasureGroup(cube);

#endregion

cube.Update(UpdateOptions.ExpandFull);
}

static void CreateInternetSalesMeasureGroup(Cube cube)
{
// Create the Internet Sales measure group
Database db = cube.Parent;
MeasureGroup mg = cube.MeasureGroups.FindByName("TestMP_DB");
if (mg != null)
mg.Drop();
mg = cube.MeasureGroups.Add("TestMP_DB");
mg.StorageMode = StorageMode.Molap;
mg.ProcessingMode = ProcessingMode.LazyAggregations;
mg.Type = MeasureGroupType.Sales;

#region Create measures

Measure meas;

meas = mg.Measures.Add("记录数");
meas.AggregateFunction = AggregationFunction.Count;
meas.FormatString = "#,#";
meas.Source = CreateDataItem(db.DataSourceViews, "TestTable_6", "Col0");

meas = mg.Measures.Add("总数量");
meas.AggregateFunction = AggregationFunction.Sum;
meas.FormatString = "#,#";
meas.Source = CreateDataItem(db.DataSourceViews, "TestTable_6", "Col2");

meas = mg.Measures.Add("总金额");
meas.AggregateFunction = AggregationFunction.Sum;
meas.FormatString = "Currency";
meas.Visible = true;
meas.Source = CreateDataItem(db.DataSourceViews, "TestTable_6", "Col4");

#endregion

#region Create measure group dimensions

CubeDimension cubeDim;
RegularMeasureGroupDimension regMgDim;
//ManyToManyMeasureGroupDimension mmMgDim;
MeasureGroupAttribute mgAttr;

cubeDim = cube.Dimensions.GetByName("物品");
regMgDim = new RegularMeasureGroupDimension(cubeDim.ID);
mg.Dimensions.Add(regMgDim);
mgAttr = regMgDim.Attributes.Add(cubeDim.Dimension.Attributes.GetByName("物品编号").ID);
mgAttr.Type = MeasureGroupAttributeType.Granularity;
mgAttr.KeyColumns.Add(CreateDataItem(db.DataSourceViews, "TestTable_6", "Col0"));

#endregion

#region Create partitions

//CreateInternetSalesMeasureGroupPartitions(mg, db);

#endregion
}

static void FullProcessAllMeasureGroups(Cube cube)
{
foreach (MeasureGroup mg in cube.MeasureGroups)
mg.Process(ProcessType.ProcessFull);
}

private void TestAmoFrm_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
MySvr = ServerConnect(MyConnString);
MyDb = CreateDatabase(MySvr, "TestMP_DB");
string connString = "Data Source=localhost\\SqlServer2012M;uid=sa;pwd=123;database=ScanDB";
MyDsName = CreateDataSource(MyDb, "TestMP_SacnDB", connString);
MyDsv = CreateDataSourceView(MyDb, MyDsName);

CreateProductDimension(MyDb, MyDsName);

CreateAdventureWorksCube(MyDb, MyDsName);
}
}
}
0

kmyange - 80后,贵州IT人士 2013-09-17 回答

0

kmyange - 80后,贵州IT人士 2013-09-18 回答

QQ图片20130918091316.jpg
0

kmyange - 80后,贵州IT人士 2013-09-18 回答

QQ图片20130918102950.jpg

要回复问题请先登录注册