OLAPキューブを取得する(ADOMD.NET)

腹部

そのため、OLAPキューブの内部をマスターし続けます(このトピックに関する以前の記事: 1、2、3 )。 議題には、 「OLAPキューブをプログラムで取得するにはどうすればよいですか?」という緊急の質問があります 。 私は理解しています-理論理論ですが、コードからデータを取得できない場合(または非常に難しい場合)、そのような技術は価値がありません。 幸いなことに、ここではすべてが非常に簡単です-ADO.NETを知っていますか? まあ、これは同じで、 ADOMD.NETと呼ばれます

どのように、あなたは私に言う-研究する必要がある別のライブラリ?! 実際、もちろん、 OLEDBを介してキューブを取得することもできます(どうにかしてその方法を作成します)が、多次元性の詳細はすべて失われ、ADOMD.NETライブラリ自体は非常に単純であり、これを次に示します。

それでは始めましょう。



環境



いつものように、環境から始めます。 今日のレシピには、次のものが必要です。



Habrakubをお持ちでない場合は、次の章を読んで非常に迅速に作成できます。残りはスキップできます。



XMLAまたはHabracubをすばやく作成





Microsoft SQL Server Management Studioを使用している場合、おそらく、上部にあるさまざまなクエリを作成するためのいくつかのボタンに気付いたでしょう。



ツールバー



最初の2つのボタンは理解できますが、次の3つのボタンには説明が必要な場合がほとんどです。



たとえば、このケースでは、Habracubをすばやく作成するために、ここからダウンロードしてXMLAリクエストを実行するだけです



うまくいきましたか? 次に、キューブにデータを入力するために、古いSQLスクリプトをダウンロードしてHabra音声リポジトリを作成します。 そして、処理のためにキューブを開始します-これを行うには、Management StudioをAnalysis Servicesに接続し、Habracubを選択して、コンテキストメニューの[ 処理]コマンドを選択します。 デフォルトでは、キューブのデータソースはHabraDWのローカル(ローカル)ストレージであることに注意してください 。 接続文字列を変更する場合は、キューブのデータソースフォルダーを開き、Habra DW設定を変更します。



私たちは続けます...



ADOMD.NET





ADOMD.NETライブラリは、 Microsoft SQL Server 2008 Feature Packページからダウンロードできます。



Hello Worldパート1





したがって、最初に行う必要があるのは、キューブの定義、つまりキューブの構成元となるディメンションと階層を削除することです。

コンソールC#プロジェクトを作成し、 ADOMD.NETへの参照を追加します。



参照を追加



そして、次のコードを使用します。



// prepare adomd connection

using (AdomdConnection mdConn = new AdomdConnection())

{

mdConn.ConnectionString = "provider=msolap;Data Source=(local);initial catalog=HabraCube;" ;

mdConn.Open();



// iterate through cubes

foreach (CubeDef cube in mdConn.Cubes)

{

if (cube.Type != CubeType.Cube) continue ;

Console .WriteLine( "*** Cube: " + cube.Name);



// iterate through dimensions

foreach (Dimension dimension in cube.Dimensions)

{

Console .WriteLine( "-> Dimension: " + dimension.Name);



// iterate through hierarchies

foreach (Hierarchy hierarchy in dimension.Hierarchies)

{

Console .WriteLine( "--> Hierarchy: " + hierarchy.Name);



// iterate through levels

foreach (Level level in hierarchy.Levels)

{

Console .WriteLine( "---> Level: " + level.Name);

}

}

}

}

}




* This source code was highlighted with Source Code Highlighter .








結果:

Cubedefの結果



十分透明ですよね?



Hello Worldパート2





ここで、MDXクエリを実行し、結果を減算します。 これを行うには、次のコードを使用します。



// prepare adomd connection

using (AdomdConnection mdConn = new AdomdConnection())

{

mdConn.ConnectionString = "provider=msolap;Data Source=(local);initial catalog=HabraCube;" ;

mdConn.Open();

AdomdCommand mdCommand = mdConn.CreateCommand();

mdCommand.CommandText = mdx; // << MDX Query



// work with CellSet

CellSet cs = mdCommand.ExecuteCellSet();



// our method supports only 2-Axes CellSets

if (cs.Axes.Count != 2) return ;



TupleCollection tuplesOnColumns = cs.Axes[0].Set.Tuples;

TupleCollection tuplesOnRows = cs.Axes[1].Set.Tuples;



// output column headers

Console .Write( "{0,-12}" , "Item" );

for ( int col = 0; col < tuplesOnColumns.Count; col++)

{

Console .Write( "{0,-12}" , tuplesOnColumns[col].Members[0].Caption);

}

Console .WriteLine();



// output rows

for ( int row = 0; row < tuplesOnRows.Count; row++)

{

Console .Write( "{0,-12}" , tuplesOnRows[row].Members[0].Caption);



// fill columns

for ( int col = 0; col < tuplesOnColumns.Count; col++)

{

Console .Write( "{0,-12}" , cs.Cells[col, row].Value);

}

Console .WriteLine();

}

}




* This source code was highlighted with Source Code Highlighter .








次のMDX要求を実行しようとします。

SELECT

{[Measures].[Vote], [Measures].[Votes Count ]} ON COLUMNS,

[Dim Time ].[ Month Name].MEMBERS ON ROWS

FROM [HabraCube]



* This source code was highlighted with Source Code Highlighter .








結果:

MDX結果



ソースプロジェクトはこのリンクで見つけることができます。



All Articles