そのため、OLAPキューブの内部をマスターし続けます(このトピックに関する以前の記事: 1、2、3 )。 議題には、 「OLAPキューブをプログラムで取得するにはどうすればよいですか?」という緊急の質問があります 。 私は理解しています-理論理論ですが、コードからデータを取得できない場合(または非常に難しい場合)、そのような技術は価値がありません。 幸いなことに、ここではすべてが非常に簡単です-ADO.NETを知っていますか? まあ、これは同じで、 ADOMD.NETと呼ばれます 。
どのように、あなたは私に言う-研究する必要がある別のライブラリ?! 実際、もちろん、 OLEDBを介してキューブを取得することもできます(どうにかしてその方法を作成します)が、多次元性の詳細はすべて失われ、ADOMD.NETライブラリ自体は非常に単純であり、これを次に示します。
それでは始めましょう。
環境
いつものように、環境から始めます。 今日のレシピには、次のものが必要です。
- Analysis Services (2005/2008)を実行しているMicrosoft SQL Server 。
- 前の記事で作成したHabraCube (下記を参照)。
- Visual Studio(2005/2008)またはVisual C#2008 Express Edition
- ADOMD.NET (9.0 / 10.0)
Habrakubをお持ちでない場合は、次の章を読んで非常に迅速に作成できます。残りはスキップできます。
XMLAまたはHabracubをすばやく作成
Microsoft SQL Server Management Studioを使用している場合、おそらく、上部にあるさまざまなクエリを作成するためのいくつかのボタンに気付いたでしょう。
最初の2つのボタンは理解できますが、次の3つのボタンには説明が必要な場合がほとんどです。
- MDXクエリ -MDXクエリを作成して、キューブからデータを取得します(このシリーズの最初の記事にはいくつかの例があります)。
- DMXクエリ -いいえ、これはトートロジーではなく、DMXクエリはデータマイニング構造からデータを取得するように設計されています。
- 最後のXMLAクエリボタンが必要です。XMLAはXMLベースの分析管理言語です。
たとえば、このケースでは、Habracubをすばやく作成するために、ここからダウンロードしてXMLAリクエストを実行するだけです 。
うまくいきましたか? 次に、キューブにデータを入力するために、古いSQLスクリプトをダウンロードしてHabra音声リポジトリを作成します。 そして、処理のためにキューブを開始します-これを行うには、Management StudioをAnalysis Servicesに接続し、Habracubを選択して、コンテキストメニューの[ 処理]コマンドを選択します。 デフォルトでは、キューブのデータソースはHabraDWのローカル(ローカル)ストレージであることに注意してください 。 接続文字列を変更する場合は、キューブのデータソースフォルダーを開き、Habra DW設定を変更します。
私たちは続けます...
ADOMD.NET
ADOMD.NETライブラリは、 Microsoft SQL Server 2008 Feature Packページからダウンロードできます。
- X86パッケージ (SQLSERVER2008_ASADOMD10.msi)-4312 KB
- X64パッケージ (SQLSERVER2008_ASADOMD10.msi)-9263 KB
- IA64パッケージ (SQLSERVER2008_ASADOMD10.msi)-6776 KB
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 .
結果:
十分透明ですよね?
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 .
結果:
ソースプロジェクトはこのリンクで見つけることができます。