2010-05-06 3 views
3

Как мы обрабатываем куб или получаем доступ к базе данных OLAP через ASP.Net с кодом C#? каков компонент, который будет использоваться, в C# .Net для подключения базы данных OLAP или действий процесса в службах anaysis?Компонент для обработки куба

ответ

11

Для обработки библиотеки используют Microsoft.AnalysisServices, например, код выглядит следующим образом:

Server server = new Server(); 
    server.Connect(cubeConnectionString); 

    Database database = server.Databases.FindByName(databaseName); 
    Cube cube = database.Cubes.FindByName(cubeName); 

    cube.Process(ProcessType.ProcessFull); 

Для запросов, используйте библиотеку Microsoft.AnalysisServices.AdomdClient, например, код выглядит следующим образом:

using (Adomd.AdomdConnection adomdConnection = new Microsoft.AnalysisServices.AdomdClient.AdomdConnection()) 
    { 
     adomdConnection.ConnectionString = cubeConnectionString; 
     Adomd.AdomdCommand adomdCommand = new Microsoft.AnalysisServices.AdomdClient.AdomdCommand(); 
     adomdCommand.Connection = adomdConnection; 
     adomdCommand.CommandText = mdxQuery; 
     adomdConnection.Open(); 
     cellSet = adomdCommand.ExecuteCellSet(); 
     adomdConnection.Close(); 
    } 

Обратите внимание, что два пространства имен перекрываются, поэтому вам может понадобиться псевдоним, если вы используете их в одном месте.

http://msdn.microsoft.com/en-US/library/ms124924(v=SQL.90).aspx

http://msdn.microsoft.com/en-us/library/ms123483(v=SQL.90).aspx

+0

спасибо за ответ –

+1

Я не думаю, что вам нужен adomdConnection.Close(); так как вы используете инструкцию using. Однако я думаю, что вы должны adomdCommand.Dispose(); поскольку adomdCommand не используется в инструкции using, но im не совсем уверен. – user3711421

+0

@Meff, Какая именно библиотека использует ваша переменная «Сервер»? –

-2

Этот пример был сделан с Visual Studio Express 2012 и $ 44 копия MS SQL 2012 (да благословит Microsoft за предоставление так много функций так мало денег). ОС была Win 8 pro.

using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
using System.Threading.Tasks; 
//the next 2 using's had to be downloaded and "Add Reference"d for Visual Studio Express 2012 
using Microsoft.AnalysisServices; 
using Microsoft.AnalysisServices.AdomdClient; 
using System.Windows.Forms; 
using System; 
using System.Data; 
using System.Drawing; 
namespace SSASDataview 
{ 
     partial class Form1 
    { 
    /// <summary> 
    /// Required designer variable. 
    /// </summary> 
    private System.ComponentModel.IContainer components = null; 

    /// <summary> 
    /// Clean up any resources being used. 
    /// </summary> 
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
    protected override void Dispose(bool disposing) 
    { 
     if (disposing && (components != null)) 
     { 
      components.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 
    private void RunSSAS(object sender, EventArgs e) 
    { 
     //i don't think Dataset is in the Analysis Services directives 
     DataSet ds = new DataSet(); 
     // provider is the constant olap. datasource is the same server name you provide for Mgmt Studio or localhost 
     // initial catalog is tricky and important. It is not a standard ms sql database you see in Management Studio, 
     // even if your cube was create with tables from a particular database. 
     // the only place I was able to see "initial catalog" value was a File -> Open -> Analysis Services Database in 2012 Management Studio 
     // it was also the name of the VS2010 solution I used to create the cube. 
     AdomdConnection myconnect = new AdomdConnection(@"provider=olap;initial catalog=GLCubeThree;datasource=localhost"); 
     AdomdDataAdapter mycommand = new AdomdDataAdapter(); 
     mycommand.SelectCommand = new AdomdCommand(); 
     mycommand.SelectCommand.Connection = myconnect; 
     // this query was created by the "Browser" you see for an Analysis Services project 
     // if you poke around the icons on the browser table the Design Mode icon will give you the cube query 
     // I think it's an MDX query, threre are also xml queries you can run with adomd 
     mycommand.SelectCommand.CommandText = "SELECT NON EMPTY { [Measures].[Per Balance] } ON COLUMNS, NON EMPTY { ([Gltime].[Fisc Per].[Fisc Per].ALLMEMBERS) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM (SELECT ({ [Gltime].[Fisc Per].&[201301], [Gltime].[Fisc Per].&[201302], [Gltime].[Fisc Per].&[201307] }) ON COLUMNS FROM [GL Cube]) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS"; 
     myconnect.Open(); 
     mycommand.Fill(ds, "tbl"); 
     myconnect.Close(); 
     // the below assigns the results of the cube query to a dataGridView 
     // if you drag a dataGridView control to your pallete it will create exactly 
     // what you need for the line below to work. 
     // your project type has to be a Window Forms Applications 
     // this code shown here is in the default Form1.Designer.cs not Form1.cs 
     dataGridView1.DataSource = new DataView(ds.Tables[0]); 


    } 
    private void Quit_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 

    #region Windows Form Designer generated code 

    /// <summary> 
    /// Required method for Designer support - do not modify 
    /// the contents of this method with the code editor. 
    /// </summary> 

    #endregion 

    private System.Windows.Forms.DataGridView dataGridView1; 
    private System.Windows.Forms.Button runssas; 
    private System.Windows.Forms.Button quit; 
} 

}

+0

Есть ли более новая версия ADOMD.NET? Единственное, что я могу найти, это [это] (http://www.microsoft.com/en-us/download/details.aspx?id=23089), но это было загружено в 2005 году –

+1

. Здесь нет ничего о кубе. –

0

Ответ на это уже поделились выше, но просто делюсь, что я тоже использовал те же Microsoft.AnalysisServices от API, относящиеся образец проекта, загруженный с here обработать куб из C#, но , когда размерность данные будут изменены, тогда вам нужно обработать базу данных, а не куб.

Также вы можете использовать свойство EffectiveUserName строки подключения, когда идентификатор конечного пользователя должен быть выдан на сервер.

ПРИМЕЧАНИЕ: Чтобы использовать свойство EffectiveUserName, вызывающий объект должен иметь административные разрешения в Analysis Services.

1

Вы должны обработать базу данных, а не куб. Потому что куб имеет только меры, а не размеры внутри. Это может привести к некоторым конфликтам.

Для Prozess всех, кубов и размеров вы должны обрабатывать всю базу данных:

Server server = new Server(); 
server.Connect(cubeConnectionString); 

Database database = server.Databases.FindByName(databaseName); 

database.Process(ProcessType.ProcessFull); 
Смежные вопросы