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

任务帮助假设您已经非常熟悉在Visual Studio中编程并且了解如何对控件绑定和解除绑定,每个主题提供了使用WPF 及及Silverlight版版OLAP具体问题的解决方案,通过帮助中的步骤,您可以通过WPF及及Silverlight版版OLAP的不同特征创建项目示例。每个任务相关主题都假设您已经创建了一个新的WPF或Silverlight项目。


为C1OlapPage或C1OlapPanel绑定一个数据源


您可以使用 C1OlapPage.DataSourceC1OlapPanel.DataSource属性轻松的为C1OlapPageC1Olap绑定一个数据源,例如,我们从XML数据文件中载入Northwind产品数据,注意nwind.zip 安装在OlapQuickStart示例中,我们可以使用ComponentOne Data为我们提供熟悉的数据集和数据表格对象来读取数据,我们也可以使用ComponentOne Zip来解压客户端中的XML文件。绑定C1OlapPage控件,完成以下步骤:


  1. 添加下列代码:

    Visual Baisc

    ' 从压缩资源中载入数据 var ds = new DataSet();
    Dim asm = Assembly.GetExecutingAssembly()
    Using s = asm.GetManifestResourceStream("OlapQuickStart.nwind.zip")
    Dim zip = New C1ZipFile(s)
    Using zr = zip.Entries(0).OpenReader()
    ' load data ds.ReadXml(zr) End Using
    End Using

    C#

    // 从压缩资源中载入数据 var ds = new DataSet(); var asm = Assembly.GetExecutingAssembly(); using (var s = asm.GetManifestResourceStream("OlapQuickStart.nwind.zip"))
    <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="4d27d66e-1d7b-4eb2-9a8f-34d35bed18db"><ac:plain-text-body><![CDATA[{ var zip = new C1ZipFile(s); using (var zr = zip.Entries[0].OpenReader())
    ]]></ac:plain-text-body></ac:structured-macro>
    {
    // load data ds.ReadXml(zr); }
    }

  2. C1OlapPage控件中设置C1OlapPage.DataSource属性,我们可以使该控件的数据绑定方法。

    Visual Basic

    // 为数据绑定olap页面
    <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b661da3f-d5f5-42c2-bd45-64ddc9cc746c"><ac:plain-text-body><![CDATA[_c1OlapPage.DataSource = ds.Tables[0].DefaultView;

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

    C#

    // 微数据绑定olap页面
    <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="24cc0062-85eb-4419-9dfa-3fc7d1822575"><ac:plain-text-body><![CDATA[_c1OlapPage.DataSource = ds.Tables[0].DefaultView;

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

    绑定C1OlapChart到C1OlapPanel

    您可以通过绑定C1OlapChartC1OlapPanel来填充C1OlapChart控件,同时也为其绑定了数据,注意本主题假设您已经在您的窗体中绑定C1OlapPanel。设置C1OlapChart的C1OlapChart.DataSource属性为C1OlapPanel来提供Olap数据。

     绑定C1OlapGrid到C1OlapPanel

    您可以通过绑定C1OlapGridC1OlapPanel来填充C1OlapGrid控件,同时也为其绑定了数据,注意本主题假设您已经在您的窗体中绑定C1OlapPanel。设置C1OlapGrid的C1OlapGrid.DataSource属性为C1OlapPanel来提供Olap数据。

     从数据视图中移除一个字段

    C1OlapPanel控件或C1OlapPage控件中,您可以筛选出一个完整的字段以至于它不会出现在您的C1OlapGridC1OlapChart数据视图中,这个过程可以在运行时完成。
  3. 在面板中的Drag fields between areas below中选择字段来筛选视图。
  4. 拖拽它到面板中的Filter区域,字段中的数据将从C1OlapGrid或C1OlapChart数据视图中移除。


12.5 在字段中筛选数据


C1OlapPanel控件或C1OlapPanel区域的C1OlapPage控件中,您可以在运行时从面板的Drag fields between
areas below 中的字段中筛选数据,每个字段有两个筛选器:值筛选,允许您在列表中查找指定的值,范围筛选,允许您规定一或者两个准则,两个筛选器是独立的,所有的值都通过筛选器以便包含在OLAP表格中。使用值筛选器使用值筛选器
1 右键点击Filter, Column Fields, Row Fields, 或Values 区域的一个字段。


  1. 点击上下文菜单的Field Settings,打开Field Settings对话框。
  2. 点击Filter 选项卡,这是值筛选器,您可以清除您不想在OLAP表格中显示的字段选项。



一旦您选择的字段出现在表格中,您可以通过点击在窗口下方的Text FilterNumeric Filter 按钮指定一个范围。


注意注意: 如果您筛选的字段包含数字数据,Numeric Filter 会代替Text Filter出现。



使用范围筛选器使用范围筛选器


  1. 右键点击Filter, Column Fields, Row Fields, 或 Values 区域的一个字段。
  2. 点击上下文菜单的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 在文本框的第一个空白利添加一个项来筛选.

  6. 选择AndOr.
  7. 添加一个二级筛选条件,如果选项没有选择None,则二级文本框将被激活并且您可以输入项.
  8. 点击OK 来关闭Custom Filter 对话框并再次点击OK 来关闭Field Settings 对话框.


 指定分类汇总函数


当创建自定义数据视图时,您可能希望执行不同的聚合函数,而不仅仅是"Sum"您的行或列,例如,您可以需要查找您数据中的平均值或最大值,这就可以轻松的在Field Settings 对话框或者代码中设置。
为了指定在运行时执行的功能:


  1. 右键点击C1OlapPanelValues 领域中的一个字段.
  2. 点击上下文菜单中的Field Settings ,打开Field Settings 对话框.
  3. 打开 Subtotals 选项卡.
  4. 选择下列功能:

    Sum

    获取组的总数.

    Count

    获取组中值的个数.

    Average

    获取组的平均数.

    Maximum

    获取组中的最大值.

    Minimum

    获取组中的最小值.

    First

    获取组中的第一个值.

    Last

    获取组中的最后一个值.

    Variance

    获取组中的样本方差.

    Standard Deviation

    获取组中的样本标准差.

    Variance Population

    获取组中的总体差.

    Standard Deviation
    Population

    获取组中的总体标准差.


    5 点击 OK 来关闭Field Settings 对话框,注意在汇总表中值的变化。
    在代码中指定数据执行的功能在代码中指定数据执行的功能:
    使用字段的C1OlapField.Subtotal属性来指定功能,在示例代码中,首先创建视图,再对每个产品平均单元价格进行计算。

    Visual Basic

    ' 创建视图 var olap = this.c1OlapPage1.OlapEngine; olap.ValueFields.Add("UnitPrice") olap.RowFields.Add("OrderDate", "ProductName")

    ' 格式化单元价格并计算平均值 var field = olap.Fields["UnitPrice"];

    field.Subtotal = Subtotal.Average field.Format = "c"


    C#

    // 创建视图 var olap = this.c1OlapPage1.OlapEngine; olap.ValueFields.Add("UnitPrice"); olap.RowFields.Add("OrderDate", "ProductName");

    // 格式化单元价格并计算平均值 var field = olap.Fields["UnitPrice"];

    field.Subtotal = Subtotal.Average; field.Format = "c";


     格式化数字数据

    您可以格式化数字数据为货币,百分比以及其他创建的自定义格式。
    在运行时格式化数字数据:
  5. 右键点击C1OlapPanel上Values领域中的一个字段。
  6. 点击上下文菜单中的Field Settings,打开Field Settings 对话框。
  7. 点击Format 选项卡。
  8. 选择下列选项:

    Numeric

    格式化数据为一个数字:1,235,您可以指定小数点的位置及是否使用千分位(,).

    Currency

    格式化数据为货币,您可以指定小数点的位置.

    Percentage

    格式化数据为百分比,您可以指定小数点的位置.

    Scientific

    格式化科学计数法,您可以指定小数点的位置.

    Custom

    输入您自定义的数据格式.

  9. 点击OK 开关闭Field Settings 对话框,注意汇总表格中值的变化。


在代码中格式化数字数据:
使用字段的C1OlapField.Format 属性及Microsoft 标准数字格式串来指定格式。
可以使用的的格式串包括:


"N" or "n"

Numeric

格式化数据为一个数字:1,235,您可以指定小数点的位置及是否使用千分位(,).

"C" or "c"

Currency

格式化数据为货币,您可以指定小数点的位置.

"P" or "p"

Percentage

格式化数据为百分比,您可以指定小数点的位.

"E" or "e"

Scientific

格式化科学计数法,您可以指定小数点的位置.

Any non-standard numeric format string

Custom

输入您自定义的数据格式.



在示例代码中,首先创建视图,在货币格式中计算平均单元价格.


Visual Basic

' 创建视图 var olap = this.c1OlapPage1.OlapEngine; olap.ValueFields.Add("UnitPrice") olap.RowFields.Add("OrderDate", "ProductName")

'格式化单元价格并计算平均值 var field = olap.Fields["UnitPrice"];

field.Subtotal = Subtotal.Average field.Format = "c"


C#

// 创建视图 var olap = this.c1OlapPage1.OlapEngine; olap.ValueFields.Add("UnitPrice"); olap.RowFields.Add("OrderDate", "ProductName");

// 格式化单元价格并计算平均值 var field = olap.Fields["UnitPrice"];

field.Subtotal = Subtotal.Average; field.Format = "c";





 计算加权平均值和总数


有些情况下,有必要计算您数据的加权平均值或总数,在加权平均值或总数中,一些数据点对于分类汇总作用相比其他的更有用。
假设您有一系列产品,并且您请想要对产品分组平求平均价格,考虑到购买产品的数量,您可以对购买产品加权价格求平均值,这些可以在运行时通过用户或者代码执行。
为了在运行时添加加权运算:


  1. 右键点击C1OlapPanel上Values领域中的一个字段并选择Field Settings.
  2. 点击Subtotals 选项卡并选择您想要的分类汇总类型.
  3. Weigh by 下拉菜单, 选择您数据表格中的字段作为权值.
  4. 点击 OK 关闭Field Settings 对话框.


在代码中添加加权运算在代码中添加加权运算:
使用C1OlapField.WeightField属性指定字段用来作为权值,在示例中, 将Quantity 字段作为权值.


Visual Basic

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




C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="387f5da1-4dd9-41ad-a2e2-3293308e95b0"><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>




 导出一个网格


WPF及及Silverlight版版OLAP 允许您导出C1OlapGrid到以下格式: .xlsx, .xls, .csv, and .txt,只需要点击在ToolStrip上的Export 按钮开始导出。


  1. 在窗体中的C1OlapPage ,在工具条中点击Export 按钮 .
  2. Save As 对话框中,输入File name, 选择文件的格式并点击OK.


 分组数据


您可以使用字段格式化分组数据,假设您有一系列产品并且您想对在一年内分组所有项,您可以在运行时或代码中使用Field Settings 对话框,在示例中,我们将使用一个C1OlapPage控件绑定 C1Nwind.mdb。
为了在运行时按照年对数据分组:


  1. 通过选择C1OlapPageC1OlapPanel区域中的网格视图中添加下列字段:OrderDate, Product, and Sales,点击Olap Grid 选项卡, 如果需要可以浏览网格。
  2. Row Fields下右键点击Order Date字段,并选择Field Settings以打开Field Settings 对话框.
  3. 确保在Filter选项卡中Select All 被选择.
  4. 点击 Format 选项卡并选择Custom.
  5. Custom Format 文本框中输入"yyyy" 并点击OK.


下图为分组前后网格的变化。
分组前图中显示为数据未被分组,分组后图显示为产品按年分组的数据。

分组前

分组后
在代码中分组数据:您可以在代码中分组数据,以下为以上示例中的代码:


Visual Basic

Imports C1.Olap
Imports System.Data.OleDb
Namespace WindowsFormsApplication1
Public Partial Class Form1
Inherits Form
Public Sub New()
InitializeComponent()
' 获取数据
Dim da = New OleDbDataAdapter("select * from invoices",
GetConnectionString()) Dim dt = New DataTable() da.Fill(dt)
' 绑定olap页面
Me.c1OlapPage1.DataSource = dt
' 生成视图
Dim olap = Me.c1OlapPage1.OlapEngine olap.ValueFields.Add("UnitPrice") olap.RowFields.Add("OrderDate", "ProductName")
' 格式化订单日期为分组数据
Dim field = olap.Fields("OrderDate") field.Format = "yyyy"
End Sub
Private Shared Function GetConnectionString() As String
Dim path As String =
Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\ComponentOne Samples\Common"
Dim conn As String = "provider=microsoft.jet.oledb.4.0;data source= {0}\c1nwind.mdb;"
Return String.Format(conn, path)
End Function
End Class
End Namespace

C#

using C1.Olap; using System.Data.OleDb; namespace WindowsFormsApplication1
{ public partial class Form1 : Form

{ 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("UnitPrice"); olap.RowFields.Add("OrderDate", "ProductName");

// 格式化订单日期为分组数据
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="337823b7-f097-4ed9-9720-81170183b8a4"><ac:plain-text-body><![CDATA[ var field = olap.Fields["OrderDate"]; field.Format = "yyyy";
]]></ac:plain-text-body></ac:structured-macro>
} 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);
}
}
}



折叠与展开分组
C1OlapGrid 通过代码为用户提供在分组中汇总或详细数据的基本显示,通过以下方法:
CollapseAllRows: 该方法用于当一个行组中有很多级数据时,对行折叠,例如使用CollapseAllRows, 您可以查看一年的销售总额如下所示:
!worddav4caf48743b518e26c6023b05acd9fb58.png|height=95,width=391!CollapseAllCols: 该方法用于当汇总数据需要从很多级别的数据中查看时折叠列分组。ExpandAllRows: 该方法用于在行折叠时展开行分组以查看详细信息,或者您可以在运行时点击''按钮。ExpandAllCols:该方法用于在列折叠时展开列分组以查看详细信息,或者您可以在运行时点击''按钮。
下列代码介绍如何设置这些属性:
折叠行分组


 


VB

 

c1OlapPage1.OlapGrid.CollapseAllRows()

 

 

 

C#

copyCode

c1OlapPage1.OlapGrid.CollapseAllRows();

 

展开行分组

 

VB

 

c1OlapPage1.OlapGrid.ExpandAllRows()

 

 

 

C#

copyCode

c1OlapPage1.OlapGrid.ExpandAllRows();

 


同样,可以设置折叠和展开的组的列的属性。


 创建一个报表


C1OlapPage控件中, 您可以在运行时使用Report菜单创建并打印一个报表。
创建报表您可以依照以下步骤:


  1. 点击C1OlapPage工具条上Report旁边的向下箭头。
  2. 选择Options,出现Document Options 对话框。
  3. Page 选项卡中,选择一个页面的Orientation, Paper size, 并设置需要的Margins
  4. 点击Header/Footer 选项卡。
  5. 将光标置于您想要添加文本或预定义页眉/页脚项的文本框中。
  6. 点击工具条中的一个按钮来插入需要的字段。
  7. 点击Report Content 选项卡。
  8. 点击在报表中您想要包含项的复选框,您也可以选择一个单选按钮来改变网格或者图表的缩放尺寸。
  9. 点击OK 来关闭Document Options 对话框。


 Olap数据排序


在默认情况下,Olap输出表格的结果按照key值排列,例如"Argentina", "Brazil"等等,但有时这种数据显示的方式并不是很有效,很多用户更愿意按照销售值对结果进行排序,为了达到此效果,可以将C1OlapGridAllowSorting属性设置为True(默认),这允许用户通过点击列标题如同常规网格那样排列数据,反复点击标题来改变排序,可以升序、降序或者无序。


 打印报表


为了在运行时打印报表可以使用C1OlapPage控件,按照以下步骤:


  1. 点击C1OlapPage工具条上Report旁边的向下箭头。
  2. 选择Print,此时会出现Print 对话框。
  3. Name下拉菜单中选择一个打印机并点击O K
  • No labels