.NET подключение к SSAS - PullRequest
       16

.NET подключение к SSAS

0 голосов
/ 26 марта 2019

надеюсь, кто-нибудь ответит на вопрос: поэтому я хотел бы начать проект, в котором решение .NET подключено к SSAS (службы анализа SQL Server). Но в Интернете есть только несколько тем или руководств. Насколько я знаю, я могу использовать библиотеку C # под названием ADOMD.NET. Но я не знаю, достаточно ли это для меня. Давайте представим, что у меня будут тонны миллионов записей в базе данных, чтобы получить некоторые аналитические записи об этом, мне нужен SSAS, который имеет возможность создавать табличные модели (записи «базы данных», хранящиеся в памяти, насколько я знаю). Итак, вопросы: могу ли я с ADOMD.NET создавать табличные модели, используя определенный язык (если он существует), и есть ли некоторые рекомендации от некоторых из вас, имеющих опыт работы с ним? Потому что мне нужно вернуть эти данные, хранящиеся в памяти, пользователю и показать их.

1 Ответ

0 голосов
/ 26 марта 2019

Поскольку вы работаете с 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);
}
...