OLAP for WPF /Silverlight
コードによるフィールドの設定
C1Olap クイックスタート > C1OlapPage のカスタマイズ > コードによるフィールドの設定

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 を設定します。

もう一度プロジェクトを実行すると、次のように表示されます。