Page tree
Skip to end of metadata
Go to start of metadata

你可以通过将一个C1OlapGrid 控件绑定到C1OlapPanel 上,从而将其绑定到数据源。需要注意的是,本节内容假设你已经在表单中绑定了一个C1OlapPanel 控件。
将C1OlapGrid 上的DataSource属性设置为C1OlapPanel ,从而为其提供Olap数据。

从数据视图中删除字段

在C1OlapPanel 控件或者C1OlapPage 控件上的C1OlapPanel 区域,你可以过滤掉一个完整字段,不让它出现在你的
C1OlapGrid 或者C1OlapChart 数据视图上。这一效果可以在运行时实现。

  1. 在面板的Drag fields between areas below区域,选择需要在视图中过滤掉的字段。
  2. 将它拖拽到面板上的Filter区域,字段中的数据将从C1OlapGrid 或者C1OlapChart 数据视图中删除。

过滤字段中的数据

使用C1OlapPanel 控件或者C1OlapPage 控件上的C1OlapPanel 区域,你可以在运行时通过面板上的Drag fields
between areas below区域过滤字段内的数据。每个字段包含两个过滤器:数值过滤器,允许你检查列表中的指定数值;范围过滤器,允许你指定一个或者两个条件。两个过滤器相互独立,字段内的数值必须满足两个过滤器才能在
OLAP表中包含。
使用数值过滤器使用数值过滤器

  1. 在Filter, Column Fields, Row Fields, 或者 Values区域右键单击一个字段。
  2. 在context菜单中单击Field Settings。打开Field Settings对话框。
  3. 单击Filter选项卡,这是一个数值过滤。你可以清除已经选定的字段,使其无法显示在OLAP表中。


一旦你选中需要在表中出现的字段,你可以通过单击窗口底部的Text Filter 或者 Numeric Filter按钮指定一个范围过滤器。

注意:注意:如果你想要过滤的字段中包含数值型数据,数值型过滤器将替代文本过滤器。

使用范围过滤器使用范围过滤器

  1. 在Filter, Column Fields, Row Fields, 或者 Values区域右键单击一个字段。
  2. 在context菜单中单击Field Settings。打开Field Settings对话框。
  3. 单击Filter选项卡,这是一个数值过滤。你可以清除已经选定的字段,使其无法显示在OLAP表中。
  4. 单击Text Filter 或者Numeric Filter按钮,选择范围过滤器。
  5. 选择下述选项中的一个:

    Clear Filter

    清除所有的过滤器设置

    Equals

    打开Custom Filter 对话框,你可以创建一个过滤器,如果有条目等于指定数值将会显示。

    Does Not Equal

    打开Custom Filter 对话框,你可以创建一个过滤器,如果有条目不等于指定数值将会显示。

    Begins With

    打开Custom Filter 对话框,你可以创建一个过滤器,如果有条目使用指定数值开头将会显示。

    Ends With

    打开Custom Filter 对话框,你可以创建一个过滤器,如果有条目使用指定数值结束将会显示。

    Contains

    打开Custom Filter 对话框,你可以创建一个过滤器,如果有条目包含指定数值将会显示。

    Does Not Contain

    打开Custom Filter 对话框,你可以创建一个过滤器,如果有条目不包含指定数值将会显示。

    Custom Filter

    打开Custom Filter 对话框,你可以根据自己的条件创建一个过滤器。

  6. 在过滤器第一个空白单元内,添加一个条目。

  1. 选择AND或是OR。
  2. 如果需要,添加第二个条件。当第二个条件不是None时,第二个条件的文本框将激活,你可以在空白单元内添加第二个条目。
  3. 单击OK,关闭Custom Filter对话框,再次单击OK,关闭Field Settings对话框。

指定分类汇总功能

当你创建一个定制数据视图时,你也许想要在当前的行或者列中实现一个不同于常用"Sum"的统计功能。例如,你也许想要找到数据分组内的平均值或是最大值。通过代码中的Field Settings对话框,你将很容易实现这一点。
运行时指定数据功能,完成以下步骤:

  1. 右键单击C1OlapPanel Values区域内的字段.
  2. 在context菜单中单击Field Settings。打开Field Settings对话框。
  3. 单击Subtotals选项卡。
  4. 选择以下内容中的一项:


Sum

在分组内求和

Count

获取分组内数值的数量

Average

在分组内求平均值

Maximum

找到分组内的最大值

Minimum

找到分组内的最小值

First

找到分组内的第一个值

Last

找到分组内的最后一个值

Variance

获取分组内数据的样品方差

Standard Deviation

获取分组内数据样品标准偏差

Variance Population

获取分组内总体方差

Standard Deviation
Population

获取分组内总体标准偏差

  1. 单击OK,关闭Filter Settings对话框。注意汇总表中的数值变化


通过编码实现指定数据功能通过编码实现指定数据功能使用字段的Subtotal属性来指定功能。在本例代码中,首先需要创建一个视图,然后计算每个产品的平均单价。
// build view
var olap = this.c1OlapPage1.OlapEngine; olap.ValueFields.Add("UnitPrice");
olap.RowFields.Add("OrderDate", "ProductName");
// format unit price and calculate average var field = olap.Fields["UnitPrice"]; field.Subtotal = Subtotal.Average; field.Format = "c";


格式化数值型数据

你可以将数值型数据格式化为货币类型,百分比类型以及其他等等类型,或者你还可以创建自己的定制格式。运行时格式化数值型数据,你需要完成以下步骤:

  1. 右键单击C1OlapPanel的 Values区域内的字段.
  2. 在上下文菜单中单击Field Settings。打开Field Settings对话框。
  3. 单击Format选项卡。
  4. 选择以下内容中的一项:

    Numeric

    将数据按数值类型格式化,例如1,235。你可以指定数值小数点的位置,以及是否使用
    1000分隔符。

    Currency

    将数据按货币类型格式化。你可以指定数值小数点的位置。

    Percentage

    将数据按百分比类型格式化。你可以指定数值小数点的位置。

    Scientific

    将数据按照科学计数法类型格式化。你可以指定数值小数点的位置。

    Custom

    输入你自己定制的数据类型格式

  5. 单击OK,关闭Filter Settings对话框。注意汇总表中的数值变化。

使用代码格式化数值型数据使用代码格式化数值型数据使用字段的Format属性以及微软标准数值型格式化字符串来指定格式。
通用格式化字符串包含以下内容:

"N" or "n"

Numeric

将数据按数值类型格式化,例如1,235。你可以指定数值小数点的位置,以及是否使用1000分隔符。

"C" or "c"

Currency

将数据按货币类型格式化。你可以指定数值小数点的位置。

"P" or "p"

Percentage

将数据按百分比类型格式化。你可以指定数值小数点的位置。

"E" or "e"

Scientific

将数据按照科学计数法类型格式化。你可以指定数值小数点的位置。

Any non-standard numeric format string

Custom

输入你自己定制的数据类型格式


在本例代码中,首先创建一个视图,然后以货币格式计算平均单价。
// build view
var olap = this.c1OlapPage1.OlapEngine; olap.ValueFields.Add("UnitPrice");
olap.RowFields.Add("OrderDate", "ProductName");
// format unit price and calculate average var field = olap.Fields["UnitPrice"]; field.Subtotal = Subtotal.Average; field.Format = "c";


计算加权平均值和求和

某些情况下,你可能需要数据的加权平均值或者是求和。在计算加权平均值或者求和的过程中,某些数据点的对分类汇总的贡献将会高于其他数据。
假设你有一个产品绑定列表,你希望找到分组内产品的平均价格,并考虑到每个产品已经售出的数量。你可以使用售出件数作为价格平均值的权重。用户可以在运行时完成这些操作,当然,还可以使用编码完成这些工作。运行时添加计算权重:

  1. 右键单击C1OlapPanel的 Values区域内的字段.选择 Field Settings选项。
  2. 单击Subtotals选项卡,然后选择你想要计算的分类汇总类型。
  3. 在Weigh by下拉列表中,从你的数据表中选择一个字段作为权重。

  1. 单击OK,关闭Field Settings对话框。

代码中添加计算权重代码中添加计算权重
你可以用WeightField属性来指定某个字段作为计算权重,在本例中,权重字段为数量字段。
Visual Basic

VB

Dim olap = Me.C1OlapPage1.OlapEngine Dim field = olap.Fields("Quantity") field.WeightField = olap.Fields("Quantity")

C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="f58af873-b313-44ff-aa89-44a5a433b811"><ac:plain-text-body><![CDATA[

var olap = this.c1OlapPage1.OlapEngine; var field = olap.Fields["Quantity"]; field.WeightField = olap.Fields["Quantity"];

]]></ac:plain-text-body></ac:structured-macro>

导出表格

ComponentOne OLAP for WinForms允许你将C1OlapGrid 导出为以下任何一种格式: .xlsx, .xls, .csv, 和.txt。只需要单击工具栏中的Export按钮,就可以开始导出表格。

  1. 在表单中的C1OlapPage ,单击工具栏中的Export按钮
  2. 在Save As对话框中,输入文件名,选择一种文件格式,然后单击OK。

数据分组
你可以指定字段格式来进行数据分组。假设你已经拥有一个产品的绑定列表,你想要根据年份对所有的物品进行分组。你可以在运行时使用Field Settings对话框或是使用代码实现这一功能。在本例中,我们将C1OlapPage 控件绑定到产品安装好的C1Nwind.mdb中。
运行时通过年份进行数据分组:

  1. 在C1OlapPage中的C1OlapPanel区域中增加以下字段到表格视图:OrderDate, ProductName和 UnitPrice。单击Olap Grid选项卡,如果需要,可以查看表格。
  2. 右键单击Row Fields下的Order Date字段,然后选择Field Settings。此处将会弹出Field Settings对话框。
  3. 确保选中Filter选项卡中的Select All选项。
  4. 单击Format选项卡,然后选择Custom。
  5. 在Custom Format文本框中输入"yyyy",然后单击OK。


下面的图片显示的是分组前和分组后的效果。分组前的效果图中,OrderDates字段并没有进行分组。在分组后的效果图中,产品根据每年他们的销售数量进行了分组。

分组前

分组后代码实现数据分组
你同样可以使用代码实现数据分组。下面的代码将完成上例中的功能:
using C1.Olap;
using System.Data.OleDb;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// get data
var da = new OleDbDataAdapter("select * from invoices", GetConnectionString()); var dt = new DataTable(); da.Fill(dt);
// bind to olap page
this.c1OlapPage1.DataSource = dt;
// build view
var olap = this.c1OlapPage1.OlapEngine; olap.ValueFields.Add("UnitPrice");
olap.RowFields.Add("OrderDate", "ProductName");
// format order date to group data
var field = olap.Fields["OrderDate"]; field.Format = "yyyy";
}
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);
}
}
}

  • No labels