OLAP アプリケーションの主な長所の1つは、対話的操作です。ユーザーは、ビューを簡単に作成および変更して、直ちにその結果を確認できる必要があります。OLAP for WPF/Silverlight は、Excel 形式のユーザーインタフェースと、ユーザーフレンドリで簡潔なダイアログによってこれを可能にしています。
ただし、場合によっては、コードを使用してビューを構成したいことがあります。OLAP for WPF/Silverlight は、その簡潔でありながら強力なオブジェクトモデル、特に Field クラスと Filter クラスによってこれを可能にしています。
以下の例は、OLAP for WPF/Silverlight でロード時にビューを構成する方法を示しています。
C# |
コードのコピー
|
---|---|
// 売上高を顧客とカテゴリ別に表示します var olap = _c1OlapPage.OlapPanel.OlapEngine; olap.DataSource = ds.Tables[0].DefaultView; olap.BeginUpdate(); olap.RowFields.Add("Country"); olap.ColumnFields.Add("Category"); olap.ValueFields.Add("Sales"); olap.Fields["Sales"].Format = "n0"; olap.EndUpdate(); |
このコードは、出力テーブルへの自動的な更新を一時停止する BeginUpdate メソッドを呼び出します。行、列、および値フィールドのコレクション用にフィールドを追加するので、ユーザーがこのアクションを行う必要はありません。そのため、アプリケーションの C1OlapPanel の部分を非表示にできます。また、このコードは、[Sales]フィールドに数値書式を適用して、最後に EndUpdate メソッドを呼び出します。
ここでサンプルを実行すると、最初の例に類似した OLAP ビューが表示されます。
次に、OLAP for WPF/Silverlight オブジェクトモデルを使用して、注文日付と合計価格の表示に使用する書式を変更します。
C# |
コードのコピー
|
---|---|
// 注文日付の書式を設定します var field = olap.Fields["OrderDate"]; field.Format = "yyyy"; // 合計価格の書式を設定し、小計の型を変更します // (合計ではなく)平均合計価格を表示します field = olap.Fields["Sales"]; field.Format = "c"; field.Subtotal = C1.Olap.Subtotal.Average; |
このコードは、データソースで指定されたすべてのフィールドを含む Fields コレクションから個々のフィールドを取得します。次に、目的の値を Format プロパティと Subtotal プロパティに割り当てます。Format は通常の .NET 書式文字列であり、Subtotal は OLAP ビューで表示するために値を集計する方法を決定します。デフォルトでは値が追加されますが、平均、最大、最小、標準偏差、分散など、その他のさまざまな集計値を使用できます。
ここで、データのサブセット、たとえばいくつかの製品と1年という期間だけに注目すると想定します。それらのフィールドを右クリックして、フィルタを適用します。次に示すように、まったく同じことをコードで実行できます。
C# |
コードのコピー
|
---|---|
// 注文日付と合計価格の書式を設定します // 変更しません… // 値フィルタを適用して、少数の製品だけを表示します C1.Olap.C1OlapFilter filter = olap.Fields["Product"].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; |
コードでは、最初に、[Product]フィールドに関連付けられた C1OlapFilter オブジェクトを取得します。次に、フィルタをクリアして、その ShowValues プロパティを設定します。このプロパティは、フィルタで表示される値の配列を取ります。OLAP for WPF/Silverlight では、これを「値フィルタ」と呼びます。
次に、コードは、[OrderDate]フィールドに関連付けられたフィルタを取得します。ここでは、特定の年度の値を表示します。ただし、対象年度のすべての日を列挙するわけではありません。代わりに、2つの条件によって定義される「条件フィルタ」を使用します。
最初の条件は、[OrderDate]が 1996 年1月1日以降でなければならないことを指定します。2番目の条件は、[OrderDate]が 1996 年 12 月 31 日以前でなければならないことを指定します。AndConditions プロパティは、最初の条件と2番目の条件を適用する方法(AND 演算または OR 演算)を指定します。この場合、両方の条件が true になることが求められているので、AndConditions に true を設定します。
もう一度プロジェクトを実行すると、次のように表示されます。