gpt4 book ai didi

c# - .NET 连接到 SSAS

转载 作者:行者123 更新时间:2023-12-05 04:01:29 24 4
gpt4 key购买 nike

希望有人能回答这个问题:所以我想启动一个将 .NET 解决方案连接到 SSAS(SQL Server Analysis Services)的项目。但是在 Internet 上只有很少的主题或指南。据我所知,我可以使用名为 ADOMD.NET 的 C# 库。但我不知道这对我来说是否足够。假设我将在数据库中拥有数以百万计的记录,要获取其中的一些分析记录,我需要拥有能够创建表格模型的 SSAS(据我所知,“数据库”记录存储在内存中)。所以问题是:我是否能够使用 ADOMD.NET 使用特定语言(如果存在)创建表格模型,并且是否有一些有工作经验的人提出了一些建议?因为我需要将内存中存储的数据返回给用户并显示它。

最佳答案

由于您使用的是 SSAS Tabular,我建议使用 Tabular Object Model (TOM) 库,它是 AMO 表格模型的扩展。请注意,这是针对兼容级别 1200 或更高级别。下面的示例创建了一个基本模型,其中包含单个维度和事实表、一个度量以及它们之间的关系以从维度中过滤事实表。在此之后,新模型被部署到 SSAS 服务器,然后进行处理以供使用。除了 Microsoft.AnalysisServices.Tabular,您还需要添加对 Microsoft.AnalysisServices.Core 和 Microsoft.AnalysisServices.AdomdClient 的引用。

using Microsoft.AnalysisServices;
using Microsoft.AnalysisServices.Tabular;



string connStr = @"Data Source=ServerName";
string dataSource = "Data Source Name";
string measureExpression = @"SUM('FactTable'[Amount])";
using (Server serv = new Server())
{
serv.Connect(connStr);

string dbName = serv.Databases.GetNewName("New Tabular Model Name");

Database db = new Database()
{
Name = dbName,
ID = dbName,
CompatibilityLevel = 1200,
StorageEngineUsed = StorageEngineUsed.TabularMetadata
};


db.Model = new Model()
{
Name = "Model",
Description = "Model Description"
};

//define data source
db.Model.DataSources.Add(new ProviderDataSource()
{
Name = dataSource,
Description = "Data Source Description",
//for SQL server
ConnectionString = @"Provider=SQLNCLI11;Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=SSPI",
ImpersonationMode = Microsoft.AnalysisServices.Tabular.ImpersonationMode.ImpersonateAccount,
Account = @"AccountName",
Password = "Password",
});

//add tables
//dimension table
db.Model.Tables.Add(new Table()
{
Name = db.Model.Tables.GetNewName("DimTable"),
Description = "Dimension Table Description ",
Partitions = {
new Partition() {
Name = "Partition 1",
Source = new QueryPartitionSource() {
DataSource = db.Model.DataSources[dataSource],
Query = @"SELECT ID, NAME FROM DimensionTable",
}
}
},
Columns =
{
new DataColumn() {
Name = "ID",
DataType = DataType.Int64,
SourceColumn = "ID",
},
new DataColumn() {
Name = "Name",
DataType = DataType.String,
SourceColumn = "NAME",
},
}
});

//fact table
db.Model.Tables.Add(new Table()
{
Name = db.Model.Tables.GetNewName("FactTable"),
Description = "FactTable Description",
Partitions = {
new Partition() {
Name = "Partition 1",
Source = new QueryPartitionSource() {
DataSource = db.Model.DataSources[dataSource],
Query = @"SELECT ID, AMOUNT FROM FactTable",
}
}
},
Columns =
{
new DataColumn() {
Name = "ID",
DataType = DataType.Int64,
SourceColumn = "ID",
},
new DataColumn() {
Name = "Amount",
DataType = DataType.Int64,
SourceColumn = "AMOUNT",
},
}
});

//create column objects for relationship
Column fromColumn = db.Model.Tables["FactTable"].Columns["ID"];
Column toColumn = db.Model.Tables["DimTable"].Columns["ID"];

//create relationship to filter fact table
SingleColumnRelationship relationship = new SingleColumnRelationship()
{
Name = "FactTable_ID_DimTable_ID",
ToColumn = toColumn,
FromColumn = fromColumn,
ToCardinality = RelationshipEndCardinality.One,
FromCardinality = RelationshipEndCardinality.Many

};
db.Model.Relationships.Add(relationship);

//create measure
Measure measure = new Measure()
{ Name = "Total" };
db.Model.Tables["FactTable"].Measures.Add(measure);
measure.Expression = measureExpression;
serv.Databases.Add(db);

//deploy database to SSAS Server
db.Update(UpdateOptions.ExpandFull);

//process new model so it's available to query
db.Model.RequestRefresh(Microsoft.AnalysisServices.Tabular.RefreshType.Full);
db.Update(UpdateOptions.ExpandFull);
}

关于c# - .NET 连接到 SSAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55359895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com