OLAP for WinForms
コードによるフィールドの設定
クイックスタート > コードによるフィールドの設定

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 になることが求められているので、AndConditionsTrue を設定します。

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