OLAP アプリケーションの主な長所の1つは、対話式操作です。ユーザーは、ビューを簡単に作成および変更して、直ちにその結果を確認できる必要があります。C1Olap は、Excel 形式のユーザーインタフェースと、ユーザーフレンドリで簡潔なダイアログによってこれを可能にしています。
ただし、場合によっては、コードを使用してビューを構成したいことがあります。C1Olap は、その簡潔でありながら強力なオブジェクトモデル、特に Field クラスと Filter クラスによってこれを可能にしています。
次の例では、C1Olap を使用してビューをどのように作成および構成できるかを示します。
まず、新しい WinForms アプリケーションを作成し、C1OlapPage コントロールをフォームに追加します。
コードビューに切り替え、データをロードする次のコードを追加し、それを C1OlapPage コントロールに割り当てます。
コード |
コードのコピー
|
---|---|
public Form1() { InitializeComponent(); // データを取得します var da = new OleDbDataAdapter("select * from invoices", GetConnectionString()); var dt = new DataTable(); da.Fill(dt); // OLAP ページに連結します this.c1OlapPage1.DataSource = dt; // 初期ビューを構築します var olap = this.c1OlapPage1.OlapEngine; olap.ValueFields.Add("ExtendedPrice"); olap.RowFields.Add("ProductName", "OrderDate"); } static string GetConnectionString() { string path = Environment.GetFolderPath( Environment.SpecialFolder.Personal) + @"\ComponentOne Samples\Common"; string conn = @"provider=microsoft.jet.oledb.4.0;data source={0}\c1nwind.mdb;"; return string.Format(conn, path); } |
このコードは、NorthWind データベース(C1Olap でインストール済み)から "Invoices" ビューをロードし、データを C1OlapPage コントロールに連結し、初期ビューを作成して、"ExtendedPrice" 値の合計を製品別および注文日別に表示します。これは、上の例と似ています。
サンプルを実行すると、すべての製品や日付などを含む OLAP ビューが表示されます。
次に、C1Olap オブジェクトモデルを使用して、注文日付と合計価格の表示に使用する書式を変更します。
コード |
コードのコピー
|
---|---|
public Form1() { InitializeComponent(); // データを取得します // 変更しません… // OLAP ページに連結します // 変更しません… // 初期ビューを構築します // 変更しません… // 注文日付の書式を設定します var field = olap.Fields["OrderDate"]; field.Format = "yyyy"; // 合計価格の書式を設定し、小計の型を変更します // (合計ではなく)平均合計価格を表示します field = olap.Fields["ExtendedPrice"]; field.Format = "c"; field.Subtotal = C1.Olap.Subtotal.Average; } |
このコードは、データソースで指定されたすべてのフィールドを含む Fields コレクションから個々のフィールドを取得します。次に、目的の値を Format プロパティと Subtotal プロパティに割り当てます。Format は通常の .NET 書式文字列であり、Subtotal は OLAP ビューで表示するために値を集計する方法を決定します。デフォルトでは値が追加されますが、平均、最大、最小、標準偏差、分散など、その他のさまざまな集計値を使用できます。
ここで、データのサブセット、たとえばいくつかの製品と1年という期間だけに注目すると想定します。それらのフィールドを右クリックして、フィルタを適用します。次に示すように、まったく同じことをコードで実行できます。
コード |
コードのコピー
|
---|---|
public Form1() { InitializeComponent(); // データを取得します // 変更しません… // OLAP ページに連結します // 変更しません… // ビューを構築します // 変更しません… // 注文日付と合計価格の書式を設定します // 変更しません… // 値フィルタを適用して、少数の製品だけを表示します C1.Olap.C1OlapFilter filter = olap.Fields["ProductName"].Filter; filter.Clear(); filter.ShowValues = "Chai,Chang,Geitost,Ikura".Split(','); // 条件フィルタを適用して、いくつかの日付だけを表示します filter = olap.Fields["OrderDate"].Filter; filter.Clear(); filter.Condition1.Operator = C1.Olap.ConditionOperator.GreaterThanOrEqualTo; filter.Condition1.Parameter = new DateTime(1996, 1, 1); filter.Condition2.Operator = C1.Olap.ConditionOperator.LessThanOrEqualTo; filter.Condition2.Parameter = new DateTime(1996, 12, 31); filter.AndConditions = true; } |
コードでは、最初に、[ProductName]フィールドに関連付けられた C1OlapFilter オブジェクトを取得します。次に、フィルタをクリアして、その ShowValues プロパティを設定します。このプロパティは、フィルタで表示される値の配列を取ります。C1Olap では、これを "値フィルタ" と呼びます。
次に、コードは、[OrderDate]フィールドに関連付けられたフィルタを取得します。ここでは、特定の年度の値を表示します。ただし、対象年度のすべての日を列挙するわけではありません。代わりに、2つの条件によって定義される「条件フィルタ」を使用します。
最初の条件は、[OrderDate]が 1996 年1月1日以降でなければならないことを指定します。2番目の条件は、[OrderDate]が 1996 年 12 月 31 日以前でなければならないことを指定します。AndConditions プロパティは、最初の条件と2番目の条件を適用する方法(AND 演算または OR 演算)を指定します。この場合、両方の条件が true になることが求められているので、AndConditions に True を設定します。
もう一度プロジェクトを実行すると、次のように表示されます。