背景
ある州の機関で仕事で得た小さな経験を共有したいと思います。 どうやってそこに着いたかは重要ではありませんが、知ることは重要です。 これは、問題を解決するために必要な条件にその特異性を課します。 また、私の基本的な知識とわずかなプログラミング経験が.Netテクノロジーに関連していることも注目に値します。
問題の説明:今日まで、10年前に作成された情報システムが存在し、地域の組織のさまざまな支部から定期的に変化するさまざまな統計指標に関するレポート情報を収集します。 システムの情報相互作用のインフラストラクチャを次の図に示します。 DWのメトリックは暗黙的に記述されます。
図の簡単な説明:
0. DW。 非常に複雑なモデルを持つOracleデータウェアハウス。
1. SI。 統計情報-会計、財務などの指標 レポート。
2. KEOI。 ローカルで作成された統計情報の電子処理の複雑さ。
3. IM。 インターフェイス配列-SIリストがDWにあるものを記述するモデル。
4. SP IM SI。 統計情報のフロントエンド配列を準備するシステムは、KEOIからデータを収集し、IM形式に変換し、この配列をDWにアップロードするために転送するように設計されています。
タスクの説明
問題:Javaソフトウェアを使用しているエンドユーザーは、DWへの直接リクエストを通じて情報を受け取ります。 もちろん、ソースコードはありません。 ストレージモデルは変更できません。 データベースには10年以上にわたって大量のデータがあり、25 GBのバックアップで作業しましたが、ソフトウェアリクエストはうんざりするほど長かったです。
タスク:必要な情報を表示できるようにする必要がありますが、1時間待つ必要はありません。これは便利で、「可能であれば、Excelで」
解決策
悲観的な読者は、この図から、ソリューションはデータストールとしてOLAPキューブを使用することであることに気付きましたが、このソリューションへのパスはあまり明確ではありませんでした...
情報システムの主題の問題を研究した後、 「分析ピラミッド」の概念と関連するOLAPに出会いました。
私は以下の結論に達しました:
ユーザーはスターモデルの標準キューブの構造にうまく適合するデータを必要としていたため、キューブには、州事務所の支店に応じて、時間、領域、およびレポート組織によって分散された集約情報が含まれている必要があり、それ自体が何らかの方法で作成プロセスを自動化するように頼みますキューブ、個々のブランチ、組織、および必要な指標のリスト。これにより、余分なデータの量が削減されます。
私の.Netプロファイルは、 Microsoft Analysis ServicesをOLAPサーバーとして使用することを意味しました。 モデルの比較からわかるように、 ローカルOLAPキューブモデルは、サーバーなしでオフラインで動作し、多次元データのソースとして指定するとExcelで簡単に表示できます。
キューブを作成するプロセスを自動化するには、プログラムでこれを行う必要があります。 .NetにはOLAP用のAMOオブジェクトモデルがあります 。
この記事は、プログラムでサーバーOLAPキューブを作成する最初の例として役立ちました。
私の場合、特定のキューブに対してDWから特定のテーブル名を設定します。 とはいえ、論理が少し変なものになったことに同意します。 キューブに保存されたデータを使用したプログラムによる作業では、ADO MDを使用したことに注意してください。 これらの Habrovskyの記事のサイクルで詳しく説明されています。
AMOやADO MDなどのOLAPサーバーのコアエンティティがどのように関連しているかを非常に明確に示しています。
サーバーでキューブを作成し、その内容をコンソールウィンドウに正常に表示した後、Excelでそのような切望された開口部を作成する方法を教えてください。
-他のソースからMenu \ Data \経由でサーバーバージョンに標準的に接続できます。
-すぐにローカルキューブを生成できます。 この記事では、拡張子が.cubのレポートファイルについて詳しく説明しています 。 実際、興味深い機能は、サーバーが最初にキューブデータをXMLに変換することです。これにより、創造性のための別のスペースが開かれます。
おわりに
ある官僚の報告書が入った官僚的な赤テープは、キューブを一度作成することで、次の報告期間までにデータを処理するのに便利だったため、少し簡単になりました。 私の観点からは、これはこの問題に対する非常に予算的な解決策です。
さらに、キューブをプログラムで操作するための興味深い可能性がまだあります。誰も知りませんが、新しいことを学んでうれしいです。たとえば、ADO MDを使用してLINQを使用するか、C#で単体テストを実行することをお勧めしますこの記事で説明されているように、MDX。