RDBインフォキューブは、データ(インフォキューブのセル)がBOARD多次元データベースではなく、物理的にリレーショナルデータベースのテーブル内に格納されているインフォキューブです。リレーショナルテーブルのフィールドをインフォキューブの次元及び測定(多くの場合は値フィールド)にマッピングするプロトコルがRDBインフォキューブの定義です。
ユーザがレポート内にインフォキューブを表示すると、常に外部リレーショナルデータベースへのODBC又はOLE DB接続が確立され、データがSQL文を介してリレーショナルテーブルから取得されます。
RDBインフォキューブは、リレーショナルデータベースからデータへ動的にアクセスします。
RDBキューブを作成するには、キューブトランザクションを開き、アクションアイコンをクリックして、[新規キューブ]を選択します。
• 次に、ROLAPキューブの名前を入力して、データタイプを選択します。
• [構造]ボタンをクリックし、インフォキューブの次元を選択します。次元の選択ウィンドウに、スタンドアロンのエンティティと基本階層のエンティティが全て表示されます。
• 最初の列で、詳細レベルを選択して物理バージョンを定義します。エンティティをバージョンに追加するには、バージョンエンティティの交点セルをクリックします。例えば、月-顧客-製品という条件でバージョンを定義するには、図のようにクリックします。
• [キューブ]アイコンをクリックして、キューブタイプを変更します。
• 定義に従い、ROLAPキューブには高密度のエンティティのみが含まれます。スパースが定義されている場合、高密度のものから置き換えられます。
RDBを設定するには、[クエリビルダー(Query Builder)]アイコンをクリックします。
プロトコル定義ウィンドウは、リレーショナルテーブルにマッピングする必要があるインフォキューブの次元及び測定を表示します。
まず最初に、DBへの接続を作成する必要があります。これは、ODBC接続又はOLE-DBを介して実行出来ます。ウィンドウの右上には、専用のコマンドのセットがあります。RDBのドロップダウンリストから、ODBC又はOLE DB接続を選択します。[接続]ドロップダウンリストは、最近使用されたODBC及びOLE DB接続のみを表示します。RDBリストに掲載されていない既存のODBC接続を選択するか、あるいは新規のOLE DB接続を作成するには、接続の[新規]アイコンをクリックします。
ODBC又はOLE DBの接続を作成して設定する方法の詳細については、「OLE DB又はODBC接続の定義」のパラグラフを参照してください。
新規のBOARDの接続を作成するには、RDBMSのドロップダウンリストからRDBMSのタイプを選択します。接続先のリレーショナルデータベースがリストに表示されない場合は、タイプを[General]に設定します。
[クエリタイムアウト(Query Timeout)]:待機秒数のセットです。Microsoft SQL ServerなどのODBCデータベースを使用している場合、ネットワークトラフィック又は高負荷のODBCサーバの使用が原因で、遅延が発生することがあります。無期限に待機するのではなく、データベースエンジンがエラーを生成するまでの待機時間を指定することが出来ます。この設定では、時間が十分ではなく、一部のクエリをODBCデータソースに対して実行出来ないことがあります。
[レコードカウントを無効にする(Disable record Counting)]: クエリにおいて影響を受ける行のカウントを有効/無効にします。
[テーブルのサンプリングを無効にする(Disable table sampling:)]:サンプリングを有効/無効にします。
ソースコネクタに従って、OLE-DB又はODBCを選択し、必要に応じてログインの設定を追加します。
[保存して接続]ボタンをクリックします。
データソース名に接続した後、リレーショナルデータソースのテーブル及びビューがRDBパネルに一覧で表示されます。
接続後、以下のいずれかを実行出来るようになります。
1.リストからいずれかの既存のテーブルを選択して、それをインフォキューブの次元及び測定にマッピングし、リレーショナルデータベースの既存テーブルのRDBインフォキューブへのリンク付けを参照します。
2.インフォキューブデータを格納するために、リレーショナルデータベース内に新規のテーブルを作成します。
チェックボックスをオンにして、データの接続元のテーブルを選択します。選択されたテーブルが主要な領域に追加されます。検索プロセスの時間を短縮するために、検索機能を使用出来ます。
マウスボタンを押しながらドラッグし、フィードするエンティティ又はインフォキューブの横にあるセルにドロップします。
画面の一番下では、マッピングされたフィールドに従って、BOARDが自動クエリを生成します。これは単に、構成の設定に基づく変換の関数を追加します(関数及びパラメータに関する次のパラグラフで説明される3番目のタブ)。BOARDがROLAPキューブをクエリすると、BOARDはSQL文をODBC又はOLE DBプロバイダに送信し、結果を待機します。SQL文は完全にODBC又はOLE DBプロバイダによって実行されるため、SQL文で使用可能なコマンド及び構文は、使用するODBC又はOLE DBプロバイダによって異なります。
また、複数のテーブルが選択された場合は、フィールドをドラッグしてドロップすることにより結合条件を設定出来ます。[結合]ウィンドウには、定義済みの条件が表示されます。生成される結合文は等結合(自然結合)です。
外部結合や左結合など他のタイプの結合を定義する必要がある場合は、[手動]タブでSQL文を編集します(以下で説明)。
Where条件を定義するには、[場所]タブをクリックし、目的の条件を入力します。フィールドを選択済みのテーブルからドラッグしてテキスト領域にドロップすると、再入力せずに済みます。
注:
SQL文で使用可能なコマンド及び構文は、使用するODBC又はOLE DBプロバイダによって異なります。
BOARDの自動クエリジェネレータではなく、手動でのクエリを定義出来ます。2番目のタブをクリックして、アクセスすることが出来ます。
BOARDは高度なSQLクエリジェネレータではないことに注意してください。複雑なクエリが必要な場合は、非定型クエリツールを使用するか、目的のクエリを実行するビューをリレーショナルデータベース内に作成し、このビューをBOARDプロトコルで使用することをお勧めします。
すでに説明したように、SQL文はOLE DBプロバイダで実行されるため、サポートされるコマンド及び構文は、接続先のOLE DBプロバイダによって異なります。
[参照]機能を使用してSQL文をテストすることをお勧めします。テストを行うには、プロトコル定義ウィンドウで[編集]ボタンをクリックし、次に[参照]ボタンをクリックします。
最初の200行に対してクエリが実行され、結果データがスプレッドシートフォーマットで表示されます。
BOARDから直接的にRDBMSエンジンへ新規テーブルを作成するには、[その他(More)]タブに配置された[テーブルを作成(Crate Table)]ボタンを使用出来ます。
BOARDがソースリレーショナルデータベースシステム内でテーブルを作成出来るようにするには、これを実行するのに十分な権限を持つODBC又はOLE DBのユーザを設定することが必須です。インフォキューブの全ての次元フィールド及び値フィールドが含まれた新規テーブルが作成されます。テーブルの主キーは、全ての次元フィールドの組み合わせであり、テーブルの各次元フィールドには1つのインデックスが作成されます。
オプションとして、RDBインフォキューブがデータエントリ又はDataFlowの計算に使用される場合にのみ、以下のような最大3つの追加フィールドを追加出来ます。
[ユーザID(User ID)]:テーブルレコードを作成又は修正したBOARDユーザのユーザIDを書き込みます。
[作成日(Date Created)]:レコードが作成された日付及び時刻(タイムスタンプ)を書き込みます。
[作成日(Date Modified)]:最後にレコードが更新された日付及び時刻(タイムスタンプ)を書き込みます。
これらの追加フィールドはインフォキューブ次元の一部ではなく、主に監査及び監視を目的としていることに注意してください。
一般的な設定に加えて、BOARDは一連の追加的なコマンド及び設定を提供します。これらは以下のハイライト表示された部分に配置されます。
これら全ては、RDBMSデータ読み取りプロセス中に生成されたSQLクエリに影響を与えます。
レコードのまとめ
インフォキューブよりも詳細なレベルでリレーショナルテーブルにデータが含まれている場合、RDBMSがレコードをインフォキューブ構造と同じ集合レベルにまとめることが推奨されます。一般的に、集合作業の一部がリレーショナルデータベースエンジンによって実行されるため、これによってRDBインフォキューブでの応答時間が改善します。
これを実行するには、以下の図のように、インフォキューブ値フィールドに対応する行でチェックボックスをオンにして、[合計(Sum)]オプションを有効にします。
このオプションを有効にすると、以下の例のように、BOARDはSQL文を変更し、SUM演算子を値フィールドに、また、GROUP BY句を次元のフィールドに追加します。
SELECT dbo.ROLAP_TEST_Rolap1_v001.Product,Sum(dbo.ROLAP_TEST_Rolap1_v001.Rolap1)
FROM dbo.ROLAP_TEST_Rolap1_v001
GROUP BY dbo.ROLAP_TEST_Rolap1_v001.Product
SQLの一般的なオプション
SQLのオプションを設定するには、画面の下部にある[オプション]タブをクリックします。
[結合構文]。結合条件に使用する構文を設定します。[場所]オプションでは、WHERE句を使用して結合条件を定義します。[結合]オプションでは、INNER JOIN句が使用されます。使用する構文に関わらず、クエリの結果は同じになります。ただし、OUTER JOIN句(又はその他のタイプ)を定義する必要がある場合は、BOARDにより生成された文を完全に書き換えるのではなく、[結合]オプションを使用し、INNER JOIN句のみを変更します(SQL文を編集するには、[手動]タブをクリックします)。
[データタイプ]。このオプションを[変換]に設定すると、ソーステーブルのフィールドのデータタイプとフォーマットがBOARDで期待されるものと異なる場合に必ず自動的に変換式が適用されます。このオプションは、接続先のリレーショナルデータベースを示すODBC又はOLE DB接続のRDBMSフィールドが[General]以外の使用可能ないずれかのオプションに設定されている場合のみ適用出来ます。
[データフォーマット]。このオプションは特定のRDBMSタイプにのみ適用され、日付フィールドの物理フォーマットを指定します。このオプションは、適用可能な場合に自動的に有効になります。
以下のいずれかに設定します。
• [番号]:リレーショナルデータベースの日付フィールドが連続番号フォーマットの場合(日付は慣習的に、整数部分が年、月、及び日を表し、小数部分が時刻を表す数値フォーマットで保存されます)
• [テキスト]:リレーショナルデータベースの日付フィールドがテキストフォーマットの場合
SQL文の最適化:WHERE条件ルールの設定
ROLAPインフォキューブがレポートで使用されると、リレーショナルテーブルからデータを取得するために、BOARDは選択されたエンティティメンバーに従ってテーブルレコードを制限するWHERE条件を使用して、SQL文を生成します。例えば、ユーザがエンティティである月で選択を行うと、データ次元に対応するフィールドでWHERE条件がSQL文に動的に追加されます。WHERE条件が書き込まれる方法によって、SQLクエリの応答時間が影響されます。BOARDによって生成されるSQLクエリの効率の調整を可能にする2つのパラメータが用意されています。
一部の状況では、エンティティメンバーで行われる選択は、非常に多くのアイテムによってWHERE条件を判断することがあります。ユーザが階層の上位レベルに配置されたエンティティに選択を設定すると仮定すると(例:地域=北米)、この選択は顧客IDエンティティまで反映され、非常に多くの顧客(例:数千の顧客)を含むことになります。何千ものコードを検索するWHERE条件が含まれたSQL文は非効率になる可能性があり、使用しているODBC又はOLE DBプロバイダドライバでサポートされる最大コマンド長を簡単に超えてしまうことがあります。
[Where IN( )バッファサイズ(Where IN( ) Buffer size)]
[Where IN( )バッファサイズ(Where IN( ) Buffer size)]のパラメータは、単一のSQLコマンドのWHERE条件に追加されるアイテムの最大数を定義します。このしきい値を超えると、非常に大規模なWHERE句を使用して単一のSQLコマンドを実行するのではなく、BOARDはそれぞれに条件のサブセットが含まれた複数のSQLコマンドを実行します。SQLクエリの結果は、BOARDサーバエンジンによってマージされ、必須のビューに集約されます。
[IN()]パラメータ
[IN( )]オプションを使用すると、WHERE条件をSQL文に動的に追加する機能を完全に無効にすることが出来ます。このオプションは、実現値の数が少ないエンティティ又は選択されたメンバーが常に高いパーセントであるエンティティ(例:合計数が70%以上の場合、実現値はユーザの選択に常に含まれます)にのみ有効にする必要があります。
ROLAP インフォキューブの書き戻し:[レコード更新方式(Record Update Method)]の選択
RDBインフォキューブのデータはリレーショナルデータベースのテーブル内に格納されるため、ユーザがRDBインフォキューブにデータを入力すると、BOARDはRDBインフォキューブにリンクされたテーブルを更新します。テーブルを更新するために、2つの異なる方法が用意されています。
[削除/挿入(Delete/Insert)]
このオプションは、リレーショナルテーブルがRDBインフォキューブの構造に厳密に一致する場合に優先されます。リレーショナルテーブルの各フィールドは、インフォキューブの次元又はインフォキューブの測定にマッピングされ、テーブルの主キーはインフォキューブの次元にマッピングされるフィールドのセットです。
このオプションが選択されると、以下が実行されます。
データが既存レコードに対応するインフォキューブのセルに保存されると、レコードがUPDATEを介して更新されます。
データが任意の既存レコードに対応しないインフォキューブのセルに保存されると、新規のレコードがINSERTコマンドを介してテーブルに追加されます。
インフォキューブの既存のセルがクリアされると(あるいはゼロに設定されると)、対応するレコードがテーブルから削除されます。
[クリア/更新(Clear/Update)]
このオプションは、RDBインフォキューブの次元及び測定にマッピングされるフィールド以外のフィールドがリレーショナルテーブルに含まれている場合に適しています。
このオプションが選択されると、以下が実行されます。
データが既存レコードに対応するインフォキューブのセルに保存されると、レコードがUPDATEを介して更新されます。
データが任意の既存レコードに対応しないインフォキューブのセルに保存されると、新規のレコードがINSERTコマンドを介してテーブルに追加されます。
インフォキューブの既存のセルがクリアされると(あるいはゼロに設定されると)、値フィールドをゼロに設定することで対応するレコードが更新されます。
この方式を使用すると、BOARDは新規レコードを追加するか、あるいは既存のレコードに対して警告し、リレーショナルテーブルからレコードを決して削除しないため、他のフィールドの状態が保持されます。
[レコード更新方式(Record Update Method)]を設定するには、[オプション]タブをクリックしてから、目的のオプションを選択します。