C#怎么建模,动态生成Cube
0
请问用C#怎么动态建模,生成Cube?都有代码来实现,不用提供的SSDT工具。比如:1、生成一个空的Cube;2、向里面导入数据;3、对导入的数据进行查询和分析处理;4、如何操作Cube,添加数据项。谢谢!
没有找到相关结果
重要提示:提问者不能发表回复,可以通过评论与回答者沟通,沟通后可以通过编辑功能完善问题描述,以便后续其他人能够更容易理解问题.
10 个回复
梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-09-12 回答
赞同来自: kmyange
所以,你可以通过C# 操作XML的方式去实现。
1、生成一个空的Cube 可以通过操作XML形式实现
2、向里面导入数据 直接通过命令的形式处理,代码可是实现
3、对导入的数据进行查询和分析处理 可以通过MDX查询语句实现
4、如何操作Cube,添加数据项 这个有一篇文件讲解过C#读取Cube,转换成DataTable,可以参考这个文章 http://www.flybi.net/question/579 有讲解
kmyange - 80后,贵州IT人士 2013-09-12 回答
赞同来自:
梁勇 - 天道酬勤、上善若水。爱好商业智能 2013-09-12 回答
赞同来自:
kmyange - 80后,贵州IT人士 2013-09-16 回答
赞同来自:
我现在出现问题如图,该怎么解决?求指点。
kmyange - 80后,贵州IT人士 2013-09-16 回答
赞同来自:
kmyange - 80后,贵州IT人士 2013-09-16 回答
赞同来自:
dim = db.Dimensions.GetByName("Date");提示错误:
集合中没有“Name”为“Date”的“Dimension”。
请问在哪里设置?
http://technet.microsoft.com/z ... .aspx
kmyange - 80后,贵州IT人士 2013-09-17 回答
赞同来自:
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);
}
}
}
kmyange - 80后,贵州IT人士 2013-09-17 回答
赞同来自:
kmyange - 80后,贵州IT人士 2013-09-18 回答
赞同来自:
kmyange - 80后,贵州IT人士 2013-09-18 回答
赞同来自: