关于Calculated字段的计算问题。

icank 2002-02-12 02:59:15
举个具体的例子,要实现下面的功能:
数据库中有两个字段,id,n1,再建立Calculated字段,字段名result,

记录id n1 result
1 0.30 0.23 result的值=(0.30+0.23+0.17)/3,并存入
2 0.23 三个数中第一个数的那一行。
3 0.17
4 0.30 0.25
5 0.26
6 0.20
……

procedure TForm1.Table1resultGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
这个函数应该怎么写?
或者,不用Calculated字段,用别的方法怎么实现?
对了,result值的计算过程要用别的函数调用,而不是直接写在GetText函数里面。

各位高手帮忙!谢谢!:)
...全文
219 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
墨梅无痕 2002-02-12
  • 打赏
  • 举报
回复
嘶……好像不太好理解
icank 2002-02-12
  • 打赏
  • 举报
回复
还有,我最想知道的是,怎么样得到下面两行的数据,然后返回去把结果写到第一行。
chechy 2002-02-12
  • 打赏
  • 举报
回复
那就按照你的逻辑写啊!在TDataSet.OnCalcFields事件中写,而不是TField.OnGetText写。
icank 2002-02-12
  • 打赏
  • 举报
回复
麻烦你说清楚一点,好么。
还有,这里的0.30+0.23+0.17只是举个例子,真正的数据是存在数据库中的啊。
chechy 2002-02-12
  • 打赏
  • 举报
回复
应该写在OnCalcFields事件中。
DataSet['Result'] := (0.30+0.23+0.17)/3
光盘中的内容 ------------------------------------------------------------------------ 下面的部分提供光盘中各种资源的详细信息。 本书中的实例文件 本书中使用的文件是按章节组织的,除了几个例外,所有文件都是带有以下扩展名的Excel 2007文件: * ? XLSX:Excel工作簿文件 * ? XLSM:包含VBVA宏的Excel工作簿文件 当打开XLSM文件时,Excel可能会显示安全警告并告诉您已禁用宏。要启用宏,单击 “安全警告”面板中的“选项”按钮然后选择“启用此内容”选项。 由于光盘上的文件是来自受信任源,您可以将这些文件复制到您的电脑上,然后指定一个文件夹作为受信任位置,要想这样,执行以下操作: 1. 打开一个“资源管理器”窗口,选择包含附带光盘的光驱。 2. 右击带有实例的根文件夹相应的文件夹,并从快捷菜单中选择“复制”命令。 3. 激活电脑中要复制文件的目标文件夹,右击该目录并从快捷菜单中选择“粘贴”命令。 光盘上的文件将会被复制到在第3步中指定的文件夹的子文件夹中,要指定一个新文件夹作为信任中心,执行以下步骤: 1. 打开Excel并选择“Office按钮”-“Excel选项”命令以显示“Excel选项”对话框。 2. 在“Excel选项”对话框中,单击“信任中心”选项卡。 3. 单击“信任中心设置”按钮。 4. 在“信任中心”对话框中,单击“受信任位置”选项卡。 5. 单击“添加新位置”按钮以显示“Microsoft Office受信任中心”对话框。 6. “Microsoft Office受信任中心”对话框中,单击“浏览”按钮并查找包含从光盘上复制过来的文件夹。 7. 确保选择“同时信任此位置的子文件夹”。 执行这些步骤后,当从该位置选择XLSM文件时,宏已启用,这样就不会看见安全警告了。 下面列举了一些实例文件和一些简单的描述。 注意:有些章节中没有实例。 Chapter 01 table and chart.xlsx:一个简单的创建表和图表的介绍性实例。 Chapter 03 loan payment calculator.xlsx:演示公式的工作簿。 number formatting.xlsx:包含一些内置数字格式实例的工作簿。 Chapter 05 budget.xlsx:演示在工作表中使用的格式的一个简单的多工作表预算工作簿。 Chapter 06 real estate table.xlsx:包含实际使用表格的real estate列表的工作簿。 Chapter 07 loan payments.xlsx:包含演示应用简单格式效果的数据区域和公式的工作簿。 theme examples.xlsx:包含表、SmartArt和一个图表的工作簿,用于演示应用不同文件主题后的效果。 Chapter 11 cell references.xlsx:用于演示复制公式时使用不同类型单元格引用的效果的工作簿。 circular reference.xlsx:一个演示目的循环引用的工作簿。打开这个工作簿时,会看见有关循环引用的信息。 worksheet functions.xlsx:包含一个列举和描述了每个工作表函数的表的工作簿。 table formulas.xlsx:用于演示表内公式的使用的工作簿 Chapter 12 character set.xlsx:一个以任意安装在系统中的字体显示字符的工作簿。 text formula examples.xlsx:一个包含高级文本公式例子的工作簿。 text histogram.xlsx:一个包含两个直接在区域中创建柱状图的例子的工作簿。 Chapter 13 holidays.xlsx:一个演示了如何计算美国10个年假日的工作簿。 jogging log.xlsx:一个记录时间和慢跑过程的工作簿。演示了时间的使用和一天的某个时间没有直接联系。 time sheet.xlsx:一个记录每周工作时间的工作表。 work days.xlsx:一个演示了如果计算两个日期之间的工作天数的工作簿(除了周末和假期以外)。 Chapter 14 basic counting.xlsx:一个演示基本的计算公式的工作簿。 conditional summing.xlsx:一个演示如何使用单个或多个条件计算进行条件求和的工作簿。 cout unique.xlsx:一个演示如何计算区域内惟一(非复制的)项的工作簿。 counting text in a range.xlsx:一个演示计算区域内字符数量的各种方式的工作簿。 cumulative sum.xlsx:一个演示如何计算一个累积和的工作簿。 frequency distribution.xlsx:一个演示创建频率分布的四种方法的工作簿。 multiple criteria counting.xlsx:一个演示使用多个条件计算公式的工作簿。 Chapter 15 basic lookup examples.xlsx:一个演示基本的查找技巧的工作簿。 specialized lookup examples.xlsx:一个演示特殊的查找技巧的工作簿。 Chapter 16 annuity calculator.xlsx:一个计算养老金利润的工作簿。 credit card payments.xlsx:一个包含计算信用卡付款的公式的工作簿。 depreciation.xlsx:一个演示计算资产折旧的方法的工作簿。 investment calculations.xlsx:一个演示计算投资利润的公式的工作簿。 irregular payments.xlsx:一个演示不规则还款的贷款计算的工作簿。 loan amortization schedule.xlsx:一个计算贷款分期偿还时间表的工作簿。 loan data tables.xlsx:一个演示如何使用一种方法和两种方法计算数据表中的贷款。 loan payment.xlsx:一个包含计算贷款还款的公式的工作簿。 Chapter 18 calendar array.xlsx:一个演示如何使用复杂的数组公式在区域中显示一个月的日历的工作簿。 multi-cell array formulas.xlsx:一个演示多单元格数组公式的工作簿。 single-cell array formulas.xlsx:一个演示单个单元格数组公式的工作簿。 Chapter 19 area charts.xlsx:一个包含面积图表例子的工作簿。 bar charts.xlsx:一个包含条形图表例子的工作簿。 bubble charts.xlsx:一个包含气泡图例子的工作簿。 column charts.xlsx:一个包含柱形图例子的工作簿。 cylinder cone pyramid charts.xlsx:圆柱、圆锥和棱锥图例子。 doughnut charts.xlsx:圆环图例子。 hands-on example.xlsx:一个包含在一个简单的图表例子的数据的工作簿。 line charts.xlsx:一个包含折线图例子的工作簿。 pie charts.xlsx:一个包含饼图例子的工作簿。 radar charts.xlsx:一个包含雷达图例子的工作簿。 six chart types.xlsx:一个使用6种图表类型显示相同区域的工作簿。 stock charts.xlsx:一个包含股价图例子的工作簿。 surface charts.xlsx:一个包含曲面图例子的工作簿。 xy charts.xlsx:一个包含XY散点图例子的工作簿。 Chapter 20 comparative histogram.xlsx:一个演示如何创建比较柱状图的工作簿。 conditional colors.xlsx:一个包含根据数值显示不同颜色的柱形图的工作簿。 function plot 2D.xlsx:一个演示如何使用一个变量的函数绘图的工作簿。 function plot 3D.xlsx:一个演示如何使用两个变量的函数绘图的工作簿。 gantt.xlsx:一个演示如何创建简单的有关工程方案的甘特图的工作簿。 gauge chart.xlsx:一个包含将单数据点绘制成量表的图表的工作簿。 log scale.xlsx:一个演示图表中的对数标度的工作簿。 picture charts.xlsx:一个演示在图表中使用图片的工作簿。 single data point charts.xlsx:演示各种单数据点例子,包括温度计图和标准尺图。 thermometer chart.xlsx:一个包含将单数据点绘制成温度计的图表的工作簿。 weather combination chart.xlsx:一个演示使用两个数值轴的合并图表的工作簿。 Chapter 21 daily staffing levels.xlsx:一个演示设置条件格式的颜色刻度的工作簿。 conditional formatting formulas.xlsx:一个演示条件格式公式的工作簿。 data bars examples.xlsx:一个演示较大区域中的设置条件格式的颜色刻度的工作簿。 icon set examples.xlsx:一个演示设置条件格式的图标设置的工作簿。 Chapter 24 number formats.xlsx:一个包含许多自定义格式例子的工作簿。 Chapter 25 data validation examples.xlsx:一个包含数据有效性例子的工作簿。 Chapter 26 outline example.xlsx:一个包含适用分组显示的数据的工作簿。 Chapter 27 regionl.xlsx:用于演示数据合并的三个工作表之一。 region2.xlsx:用于演示数据合并的三个工作表之一。 region3.xlsx:用于演示数据合并的三个工作表之一。 Chapter 28 webpage.xlsx:一个用于演示HTML输出的工作簿。 Chapter 33 budget data.accdb:惟一一个Microsoft Access 2007文件,用于演示Microsoft查询。 Chapter 34 bank accounts.xlsx:一个包含适用于数据透视表的数据的工作簿。 Chapter 35 calculated fields and items.xlsx:一个包含演示计算字段计算项的数据透视表的工作簿。 county data.xlsx:一个包含一个大表格和从表中创建的数据透视表的工作簿。 employee list.xlsx:一个包含演示数据透视表中非数字型数据的表格的工作簿。 hourly readings.xlsx:一个包含演示按时间分组的时间信息的工作簿。 income and expense.xlsx:一个包含演示如何在数据透视表内引用单元格的数据透视表的工作簿。 music list.xlsx:一个演示如何创建和格式化数据透视表报表的工作簿。 reverse pivot.xlsm:一个包含将汇总表转换为3列数据库表的VBA宏的工作簿。 sales by date.xlsx:一个包含演示按时间分组的时间信息的工作簿。 sales by region.xlsx:一个演示如何从数据透视表中创建透视图的工作簿。 test scores.xlsx:一个演示如何使用数据透视表创建频率分布的工作簿。 Chapter 36 direct mail.xlsx:一个包含演示如何创建两种方式的假设分析数据表的利润模型。 mortgage loan data table.xlsx:一个演示如何创建一种方式的假设分析数据表的工作簿。 mortgage loan.xlsx:一个使用输入单元格和公式单元格演示假设分析过程的工作簿。 production model.xlsx:一个演示方案管理器的工作簿。 Chapter 37 allocating resources.xlsx:一个包含演示如何分配资源和使用“规划求解”来最大化利润的模型的工作簿。 investment portfolio.xlsx:一个包含演示如何使用“规划求解”来最大化投资项目利润的模型的工作簿。 linear equations.xlsx:一个演示如何使用“规划求解”解决一组线性方程式的工作簿。 mortgage loan.xlsx:一个使用输入单元格和公式单元格进行单变量求解的工作簿。 three products.xlsx:一个包含演示“规划求解”过程的简单模型的工作簿。 Chapter 38 atp examples.xlsx:演示在“分析工具库”加载项中使用的工具的工作簿。 Chapter 39 cube root.xlsm:一个包含计算立方根的VBA函数的工作簿。 current date.xlsm:一个包含用来在活动单元格插入一个当前日期的简单VBA宏的工作簿。 list formulas.xlsm:一个包含用来在工作表中生成一个所有公式列表的VBA宏的工作簿。 Chapter 40 vba functions.xlsm:一个包含用于工作表公式的VBA函数的工作簿。 Chapter 41 change case.xlsm:使用UserForm以让用户进行选择的VBA宏。 show message.xlsm:一个包含显示信息的UserForm的工作簿。 Chapter 42 mortgage loan.xlsx:一个演示如何使用一个工作表中的ActiveX控件的工作簿。 worksheet controls.xlsm:一个包含所有用于一个工作表的ActiveX控件的例子的工作簿。 Chapter 43 monitor a range.xlsm:一个包含VBA Worksheet_Change宏用于控制指定区域的所有更改的工作簿。 selection change event.xlsm:一个包含VBA Worksheet_Change宏用于更改活动单元格行和列颜色的工作簿。 Chapter 44 chart macros.xlsm:一个包含计算图表的VBA宏的工作簿。 range copy.xlsm:一个包含复制一个大小不固定区域的VBA宏的工作簿。 range move.xlsm:一个包含移动单元格区域的VBA宏的工作簿。 select cells.xlsm:一个包含演示选中区域技巧的VBA宏的工作簿。 selection type.xlsm:一个包含演示如何确定当前选中区域的对象类型的VBA宏的工作簿。 skip blanks while looping.xlsm:一个包含演示如何在单元格区域中有效循环的VBA宏的工作簿。 Chapter 45 change case.xlam:一个从Chapter 41中change case.xlsm例子中创建的加载项文件。
1. jpivot加入其它应用中 解压jpivot.war 文件,在你的应用当中你需要下面的这些文件: /wcf/** /jpivot/** /WEB-INF/wcf/** /WEB-INF/jpivot/** /WEB-INF/lib/** 最后你还需要对比 jpivot.war 里的 web.xml 文件去修改你自己的 web.xml 文件。 2. 例子说明 一个Schema的xml文件,定义立方体;(feeSchema.xml) 一个jsp文件(fee.jsp),使用jpivot的标签(jp:mondrianQuery),写入多维查询表达式。 2.1. 数据库连接  直接用jdbc catalogUri="/WEB-INF/queries/feeSchema.xml">  在应用服务器中定义数据源 catalogUri="/WEB-INF/queries/feeSchema.xml"> 例子在tomcat中定义了数据源feeDS 2.2. 各种维度类型  一般维度 例子中定义了维度:[term].[所有终端] 按终端id统计缴费情况。  多level维度 例子中定义了维度:[agentTerm].[所有终端] 按代理商,终端两级统计缴费情况  有父子关系维度 例子中定义了维度:[area].[所有地区] 按组织机构级别统计缴费情况 在定义父子级别时,要指定parentColumn和nullParentValue 且要定义Closure,如果不定义,指标钻取的数据有问题。 Closure表针对维度表计算distance,Closure表的生产参见例子中的存储过程sp_zycreateorgclosure 例如: 3. Mondrian Schema详解 3.1. Schema Schema 定义了一个多维数据库。包含了一个逻辑模型,而这个逻辑模型的目的是为了书写 MDX 语言的查询语句。这个逻辑模型实际上提供了这几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。在这个文件中形成逻辑模型和数据库物理模型的对应。 3.2. Cube 一个 Cube 是一系列维度 (Dimension) 和度量 (Measure) 的集合区域。在 Cube 中, Dimension 和 Measure 的共同地方就是共用一个事实表。 Cube 中的有以下几个属性: 属性名 含义 name Cube 的名字 caption 标题 , 在表示层显示的 cache 是否对 Cube 对应的实表用 mondrian 进行存储 , 默认为 true enabled 是布尔型的 , 如果是被激活 ,Cubes 就执行 , 否则就不予理睬,默认为 true Cube 里面有一个全局的标签定义了所用的事实表的表名 3.3. Dimension 他是一个层次( Hierarchies )的集合 , 维度一般有其相对应的维度表 . 他的组成是由层次( Hierarchies )而层次( Hierarchies )又是有级别( Level )组成 . 其属性如下: 属性名 含义 name Dimension 的名称 type 类型,有两个可选的类型: StandarDimension 和 TimeDimension ,默认为 StandardDimension caption 标题 , 在表示层显示的 UsagePrefix 加前缀 , 消除歧义 foreignKey 外键,对应事实表中的一个列,它通过 元素中的主键属性连接起来。 3.4. Hierarchy 你一定要指定其中的各种关系 , 如果没有指定 , 就默认 Hierarchy 里面装的是来自立方体中的真实表 . 属性如下: 属性名 含义 name Hierarchy 的名称,该值可以为空,为空时表示 Hirearchy 的名字和 Dimension 的名字相同。当一个 Dimension 有多个 Hierarchy 时,注意 name 值要唯一。 hasAll 布尔型的 , 决定是否包含全部的成员 member allMemberName 所有成员的名字 , 也就是总的标题 , 例如: allMemberName= “全部产品” allLevelName 所有级别的名字,它会覆盖其下所有的 Member 的 name 和所有的 Level 的 name 属性的值。 allMemberCaption 例如 : allMemberCaption= “全部产品”这个是在表示层显示的内容 PrimaryKey 通过主键来确定成员,该主键指的是成员表中的主键,该主键同时要与 Dimension 里设置的 foreignKey 属性对应的字段形成外键对应关系 primaryKeyTable 如果成员表不只一个,而是多个表通过 join 关系形成的,那么就要通过这个属性来指明 join 的这些表中,哪一个与 Dimension 里设置的 foreignKey 属性形成外键关系。通过该属性来指明主表 caption 标题 , 在表示层显示的 defaultMember memberReaderClass 设定一个成员读取器,默认情况下 Hierarchy 都是从关系型数据库里读取的,如果你的数据不在 RDBMS 里面的话,你可以通过自定义一个 member reader 来表现一个 Hierarchy 。 3.5. Level 级别 , 他是组成 Hierarchy 的部分。属性很多,并且是 schema 编写的关键,使用它可以构成一个结构树, Level 的先后顺序决定了 Level 在这棵树上的的位置,最顶层的 Level 位于树的第一级,依次类推。 Level 的属性如下: 属性名 含义 name 名称 table 该 Level 要使用的表名 column 用上面指定的表中某一列作为该 Level 的关键字 nameColumn 用来显示的时候使用,如果不定义,那么就采用上面的 column 的值来进行显示。 oridinalColumn 定义该 Level 上的成员的显示顺序,如果不指定,那么采用 column 的值。 parentColumn 在一个有父 - 子关系的 Hierarchy 当中,当前 Level 引用的是其父成员的列名。好比是一张部门表,在一张表里表现部门的上下级关系,一个是主键,肯定还有一个字段为连接到该主键的外键的列名,这里的 parentColumn 指的就是这个列名。 nullParentValue 如果当前的 Level 是有上下级关系(设置了 parentColumn 属性),如果该 Level 又处于顶级,我们需要将顶级的数据取出来,这里指的是位于顶级的父成员的值,有些数据库不支持 null, 那么也可以使用 ’0’ 或 ’-1’ 等,这就表示顶级的成员的父 ID 为 ’0’ 或为 ’-1’ 。 type 数据类型,默认值为 string 。当然还可以是 Numeric 、 Integer 、 Boolean 、 Date 等。 uniqueMembers 该属性用于优化产生的 SQL ,如果你知道这个级别和其父级别交叉后的值或者是维度表中给定的级别所有的值是唯一的,那么就可以设置该值为 true ,否则为 false 。 levelType 该 Level 的类型,默认为 regular (正常的),如果你在其 Dimension 属性 type 里选择了 TimeDimension 那么这里就可以选择 TimeYears 、 TimeQuarters 、 TimeMonth 、 TimeWeeds 、 TimeDays 。 hideMemberIf 在什么时候不隐藏该成员,可选的值有三个: Never 、 IfBlankName 、 IfParentName approxRowCount 该属性可以用来提高性能,可以通过指定一个数值以减少判断级别、层次、维度基数的时间,该属性在通过使用 XMLA 连接 Mondrian 很有用处。 caption 标题 , 在表示层显示的 captionColumn 用来显示标题的列 formatter 该属性定义了 Member.getCaption() 方法返回的动作值,这里需要是一个实现了 mondrian.olap.MemberFormatter 接口的类,用来对 Caption 地值进行格式化。 3.6. Join 对于一个 Hierarchy 来说,有两种方式为其指定:一种是直接通过一个 Table 标签指定;一种是通过 Join 将若干张表连接起来指定。一旦采用 Join 的话,那么就要在 Hierarchy 里的 primaryKeyTable 属性指定主表。 3.7. Measure Measure 就是我们要计算的数值,操作的核心。它的属性如下: 属性名 含义 name 名称 aggregator 要采用的计算函数 column 要计算的列名 formatString 计算结果的显示格式。 visible 是否可见 datatype 数据类型,默认为 Numeric formatter 采用类来对该 Measure 的值进行格式,具体参考 Level 的 formatter 属性。 caption 标题,用来显示时使用。 4. JPivot标签库使用详解 4.1. Introduce JPivot 是一套基于 Mondrian 的 OLAP 前端展现工具,它提供了一套标签库来解决的 OLAP 的展现层问题。 在一个 JSP 页面当中,如果要使用 JPivot 标签库,除了要配置相关的配置文件外,我们需要在 JSP 头的位置声明对 JPivot 标签库的引用,引用方法如下: <%@ taglib uri = "http://www.tonbeller.com/jpivot" prefix = "jp" %> JPivot 标签库包含以下几个标签: chart chooseQuery clickable destroyQuery mondrianQuery navitator print scalarQuery setParam table testQuery xmlaQuery 接下来我们将详细介绍这些标签的具体用法及相关参数的含义。 4.2. chart 创建一个图表组件,这个图表组件的标签不能直接产生可见输出,它必须通过 WCF 的渲染标签才行。 chart 标签的主要属性如下: 属性名 必须 数据类型 是否能动态计算指定 描述 id 是 String 是 标签的 ID visible 否 boolean 是 用来设置该组件是否可见,当该属性为 false 时 WCF 标签半角不显示该组件。 role 否 String 是 Role 的名称,如: role=”tomcat” 就允许当前用户角色为 tomcat 的访问该控件, role=”!tomcat” 则就允许除角色为 tomcat 以外的所有的用户访问。 query 是 OlapModel 是 一个 mondrianQuery 标签的 ID 值 baseDisplayURL 否 String 是 显示图表的链接,链接的后面还要添加参数“ ?=filename=[ 临时图表文件的名称 ] ” controllerURL 否 String 是 链接到 JPivot Controller 的 URL ,该属性在一些复杂环境下比如 Portal 之类就很有用。 4.3. chooseQuery 从前面创建的若干个查询当中选择一个合适的查询(通过查询名称进行选择),例如: SELECT ... SELECT ... ... 它的属性比较简单,只有 id 和 queryName 两个,而且比较容易理解。 4.4. clickable 该标签的作用是给一个 dimension 或一个 level 里的所有的 members 加上超链,使得它们变的可以进行点击操作。生成的 URL 中包含这个 member 的唯一名称,这个标签必须要在一个 table 或一个 query 的标签里嵌套使用。 这个动作还依赖于该标签的 sessionParam 属性,如果该属性存在,那么参数值将在页面显示之前写到 com.tonbeller.jpivot.param.SessionParamPool 当中,如果不存在该属性,参数将会被编码到超链接当中。 例如: select .. from Sales 该标签的主要属性如下: 属性名 必须 数据类型 是否能动态计算指定 描述 urlPattern 否 String 是 该属性已过时,使用 page 属性替代它。 page 否 String 是 目标页面的名称,该属性的值必须要以“ / ”开始,如果不设置,那么会采用当前页面的名称。 uniqueName 否 String 是 一个 dimension 或 hierarchy 或 level 的唯一名称,用来标识哪个 member 将可以点击。 menuLabel 否 String 是 如果多次定义 clickable ,那么它将通过一个右键来进行显示,这里的值就是右键菜单的名称。 sessionParam 否 String 是 参数名称,它将会被回写到 com.tonbeller.jpivot.param.SessionParamPool 当中。 propertyName 否 String 是 该属性如果存在,该 member 属性的值将会被带到 com.tonbeller.jpivot.param.Parameter 的 sqlValue 的属性当中。 propertyPrefix 否 String 是 如果存在该属性,多个 SessionParam 将会被创建,每一个 member 的名字的开始部分将采用该属性的值。 providerClass 否 String 是 如果存在该属性,这个类的实例将会从当前的 member 中获取 SessionParam 对象的实例,这里的类必须实现 com.tonbeller.jpivot.table.navi.ClickableMember.ParameterProvider 接口。 4.5. destroyQuery 该标签的主要作用是销毁所有的查询,它的用法如下: 它只有一个 ID 属性。 4.6. mondrianQuery 该标签的主要作用是让 mondrian 执行指定的查询,该标签需要指定一个 JDBC 的 datasource 或单独指定 JDBC 连接的各个属性从而可以让 mondrian 连接到指定的数据库。 它的用法如下: catalogUri="/WEB-INF/test/FoodMart.xml"> select {[Measures].[Unit Sales], [Measures].[Store Cost], [Measures].[Store Sales]} on columns, {[Product].[All Products]} ON rows from Sales where ([Time].[1997]) 它的主要属性如下: 属性名 必须 数据类型 是否能动态计算指定 描述 id 是 String 是 标签的 ID jdbcDriver 否 String 是 要连接到目标数据库的驱动类名 jdbcUrl 否 String 是 目标数据库的 URL jdbcUser 否 String 是 登录数据库的用户名 jdbcPassword 否 String 是 登录数据库的密码 dataSource 否 String 是 可以连接到数据库的 JNDI 名称,如 jdbc/SampleDB ,当使用它时另外四个单独连接数据库的属性不可以再用。 catalogUri 是 String 是 Mondrian Schema 文件所在的路径,指定路径时需要从 web 应用的根开始,如 /WEB-INF/FoodMart.xml 。 role 否 String 是 指定角色,该角色的值来自 Mondrian Schema 里定义的角色。 dynResolver 否 String 是 指定一个用来解析 Mondrian Schema 里定义的动态变量的解析类。 connectionPooling 否 String 是 当该值为 false 时,将从连接池里阻止 Mondrian dynLocale 否 String 是 设置动态解析 Mondrian Schema 里的 Local dataSourceChangeListener 否 String 是 指定一个类用来检测 datasource 的变化。 queryName 否 String 是 这个属性允许保留多个查询,对于每一个查询,最后一个查询将会被存储下来,可以使用 chooseQuery 标签在查询间进行切换。 stackMode 否 boolean 是 如果设置为 false ,那么所有的查询将同时被处理;如果设置为 true ,那么将保持其原有的顺序,例如: 查询名称为 qn1 的创建后,标签就马上将其显示出来 ; 接下来创建 qn2 ,现在 stack 里有 qn1 和 qn2 , qn2 也将被显示出来。 4.7. navigator 创建一个导航组件,这个组件不会直接输出,它必须通过 WCF 的标签来 render 输出。 示例用法: Cache="true"/> 该标签的主要属性如下: 属性名 必须 数据类型 是否能动态计算指定 描述 id 是 String 是 标签的 ID query 是 OlapModel 是 指定一个 mondrianQuery 标签的名称 visible 否 boolean 是 设置该组件是否可见,如果设置为 false 那么 WCF 的 render 标签将不会 render 该组件。 role 否 String 是 角色的名称,可以加前缀“!”,表示“除 … 角色之外”都可以访问该组件,否则就是只有该角色才能访问该组件。 4.8. print 创建一个打印控件,该控件不能直接输出,你必须创建 WCF form 来调用打印的 servlet 来生成 XLS/PDF 文件。 该标签只有一个 ID 属性。 4.9. scalarQuery 创建一个包含由单个单元格的组成的 OLAP 结果的会话属性,它的值由标签的属性提供。 示例用法: calarQuery id="query01" value="#{some.bean.property}"> formattedValue="#{some.bean.otherProperty}" caption="Some Caption" /> 它的主要属性如下: 属性名 必须 数据类型 是否能动态计算指定 描述 id 是 String 是 标签的 ID value 是 String 是 是一个 EL 的表达式,通过 EL 表达式来计算值,这里是一个数字。 formattedValue 否 String 是 用一个 EL 表达式来计算格式化后的值,是一个字符串 caption 否 String 是 用一个 EL 表达式来生成 caption 的值,这里是一个字符串 queryName 否 String 是 请参考 mondrianQuery 标签 stackMode 否 boolean 是 请参考 mondrianQuery 标签 4.10. selectProperties 创建一个选择属性的组件,该组件不会直接输出,必须要与 WCF 的 render 标签结合。 示例用法: Cache="true"/> 它的主要属性如下: 属性名 必须 数据类型 是否能动态计算指定 描述 id 是 String 是 标签的 ID table 是 TableComponent 是 该属性用来指定一个表格组件。 visible 否 boolean 是 设置该组件是否可见,如果设置为 false 那么 WCF 组件将不会显示该组件。 role 否 String 是 指定角色,同样可以使用“!” 4.11. setParam 通过 get 或 post 或 session 里的值为 MDX 查询设置查询参数。示例用法: SELECT ... Parameter("Param01", ... WHERE ... or 它的主要属性如下: 属性名 必须 数据类型 是否能动态计算指定 描述 query 是 OlapModel 是 指定一个 mondrianQuery 标签的名称 httpParam 否 String 是 http 参数的名称,如果存在该属性,那么它的值将会被告解析并设置到 mdx 查询的 parameter 当中 sessionParam 否 String 是 Session 的参数名称 mdxParam 是 String 是 MDX 的 parameter 的名称 4.12. table 创建一个 pivot 的表格组件,该组件要借助于 WCF 的 render 标签输出。 示例用法: 该标签的主要属性如下: 属性名 必须 数据类型 是否能动态计算指定 描述 id 是 String 是 标签的 ID visible 否 boolean 是 设置组件是否可见,如果为 false 那么 WCF 的标签将不会将其 render 。 role 否 String 是 可访问该组件的角度,支持“!”用法 query 是 OlapModel 是 指定一个 mondrianQuery 标签的名称 5. 多维查询表达式 5.1. 什么是 MDX MDX 的全称是 Mutil Dimensional Expressions ,是由 Microsoft , Hyperion 等公司研究多维查询表达式,是所有 OLAP 高级分析所采用的核心查询语言。 MDX 可以用来进行以下操作: 1. calculated members (计算成员) 2. Calculated Cells (计算单元) 3. Security Settion (安全设置) 4. Custom member formula ( 自定义函数 ) 5. Custom level rollup () 6. Actions (动作) 7. Named “ sets ” ( 命名集合 ) 8. Server side formatting (服务器数据格式化) 5.2. MDX 的基本结构 MDX 的基本结构有三种: Members 、 Tuple 、 Set 。 5.2.1. Members 指的是维度树上的一个节点,这里有一点需要指出,量度也是一个特殊的维度,所以对于普通维度上的 Member 可以有几下几种表示方法: [Customer] 或 [Time].[1996] 等,对于特殊的维度——量度而言,也可以表示一个 Member ,如: [Measures].[ unit sales] 等。 Member 的表示方法就是用中括号的形式,“ [……] ”。 5.2.2. Tuple Tuple :是由若干个 Members 组成,每一个维度上最多只能有一个 Member ,对于一个 Tuple 而言至少有一个维度,多则不限,同时对于没有列出来的那就表示为默认的 Member 。 Tuple 的表示方法是小括号“ () ”,因为其又有 Member 构成,所以通常的格式为“ ([…],[…][…],…) ”;示例: a) ([Regin ].[USA]) b) ([product].[ computers],[time].[2008]) 。 5.2.3. Sets 同一维度上若干个 Members 的集合,或者是若干个 Tuples 的集合,但这里有一个地方需要注意,那就是如果是若干个 Tuple 组成的集合是,各个 Tuple 里的 Member 之间存在着一定的对应关系。集合的表示方法用大括号“ {} ”,所以可能的表示方法为: a) {[time].[2008],[time].[2009],[time].[2000]} ,这里 Set 是由同一维度的若干个 Member 组成。 b) {([computer],[usa ]),([ mobile],[china])} ,这个 Set 是由两个 Tuples 组成,这里大家可以看到,在第一个 Tuple 当中,第一个 Member 是名为 computer 的产品,所以后面的 Tuple 的第一个 Member 也必须是一个产品,所以我们这里看到的是 mobile ,第一个 Tuple 里第二个 Member 是一个国家,所以第二个 Tuple 的第二个 Member 也必须是一个国家名,依次类推。 5.3. MDX 查询语句 一个标准的 MDX 查询语句就是由我们前面介绍的 MDX 的三个基本对象构成,也就是 Member 、 Tuple 、 Set 。 一个标准的 MDX 查询的语法如下: SELECT Set ON COLUMNS, Set ON ROWS FROM Cube WHERE Tuple 示例: SELECT {[time].[ 1997],[time].[1998]} ON COLUMNS, {([product].[drink],[customer].[gender].[F]),( [product].[food],[customer].[gender].[M])} ON ROWS FROM [Sales] WHERE ([Measures].[ StoreSales ]) 这个 MDX 查询就表示:查询时间为 1997 和 1998 两年的 drink 类产品,女消费者和 food 类产品男消费者的 Store Sales 。 5.4. MDX 表达式 5.4.1. children 它的作用是列出指定分类下的所有项,如 1. [product type].[food].children ,这就表示列出产品类型为 food 的所有产品。 2. [region ].[country].children ,这就表示列出所有的国家名称。 该函数不能用在 Tuple 中 5.4.2. CurrentMember 当前某个 Member ,举例: 某个产品销售额贡献度计算,对于某一个产品或一种类型的产品而言它的销售额贡献度指的是它的销售额与所有产品销售额的比值,此时,如果我们要用 MDX 来计算这个贡献度的值是可以采用 CurrentMember 来实现,如: 此时我们的 MDX 表达可以是: ([product].currentMember ,[ Measures].[stores sales]) / ([product].[ all products],[Measures].[stores sales]) 同时因为默认情况下指的就是 currentMember ,所以上面的 currentMember 可以去掉: ([Measures].[ stores sales]) / ([product].[ all products],[Measures].[stores sales]) 所有 MDX 表达式的写法是由若干个 Tuple 组成 ,比如上面的这个表达式就是由两个 Tuple 的相除构成。 5.4.3. prevMember 和 nextMember 这两个元素分别指的是当前 Member 的上一个 Member 和当前 Member 的下一个 Member 。 利用这两个元素我们可以来实现实际当中常见的同期比(前期比),所谓的同期比指的 是: (当前 member- 当前 member 的前一个 member ) / 当前 member 的前一个 member 对应到 MDX 表达式我们可以用 prevMember 和 nextMember 来实现,如: (([time].currentMember ,[ Measures].[store sales])-([time].prevMember ,[Measures].[storessales ])) / ([time].prevMember ,[ Measures].[store sales]) 当然因为 currentMember 可以省略,所以上面的写法也可以是: (([ Measures ].[store sales])-([time].prevMember ,[Measures].[storessales ])) / ([time].prevMember ,[ Measures].[store sales]) 5.4.4. Parents 、 FirstChild 、 Descendants 下面的这张图就显示一个树 这张图中 all 这个节点是 97 和 98 的 parents , 97 和 98 也是 all 的 children ,同时 97 是 all 的 firstChild 如果我们要取到 97 下的所有的月份,那么我们就需要用 Descendants 来实现,它的语法是: Descendants( [time].[97],month) ,这里的 month 是一个 level 的名称。所有它的格式为: Descendants([ 一个 Member], 一个 level 的名称 ) 比如在食品销售当中,我们要知道哪一类的食品更受消费者欢迎,这样我们需要只知道各类食品的销量,比如食物( food )、饮料 (drink) 等的具体销量 (unit sales) ,然后再计算出所有食品总的销量( total sales ) , 如果采用 MDX 我们可以很容易的实现,采用 MDX 后的计算哪种食品更受欢迎的表达式如下: ([food].currentMember ,[ Measures].[unit sales]) / ([food].currentMember.parent ,[ Measures].[total sales]) 因为 currentMember 可以省略,所以上面的写法又可以是: ( [ Measures].[unit sales]) / ([food].currentMember.parent ,[ Measures].[total sales]) 5.5. 参见MDX的基本语法及概念.pdf 6. 常见问题 6.1. MDX编辑器中文乱码  web.xml中添加过滤器 Set Character Encoding com.tonbeller.wcf.charset.CharsetFilter encoding UTF-8 Set Character Encoding /* 注意,该filter-mapping放在所有filter-mapping的最前面  jsp页面编码用UTF-8(testpage.jsp) 6.2. pdf中文显示“#” 1).在WEB-INF\jpivot\print目录下建立userconfig.xml文件。内容如下:(仅配置黑体,fontBaseDir属性我也没有配置,源码中有) 2). 下载Apache的FOP包,应用所需JAR包,生成simhei.xml。Java命令行为: java -cp D:\op\fop.jar;D:\op\avalon-framework-4 .2.0.jar;D:\op\commons-logging-1.0.4.jar;D:\op\commons-io-1.1.jar;D:\op\xmlgraph ics-commons-1.4.jar org.apache.fop.fonts.apps.TTFReader C:\WINDOWS\Fonts\simhei. ttf simhei.xml 3). 将simhei.xml,以及simhei.ttf文件放到WEB-INF\jpivot\print目录下。 4 ). 修改WEB-INF\jpivot\table目录下的fo_mdxtable.xsl文件,把所有的font-family对应成SimHei,(以SimHei开头)。 6.3. pdf格式修改(原格式行太宽) 修改jpivot\WebRoot\WEB-INF\jpivot\table\fo_mdxtable.xsl 中font-size,line-height,padding 6.4. 钻取数据的格式化 在利用jpivot钻取的时候,发现出来的数字数据都精确到了小数点后两位,我可不想所有数字都这么精确,连带出来的id值也被这样格式化了,悲惨! 我的解决方法:取消格式定义 找到wcf.jar,修改com.tonbeller.wfc.format.config.xml 删除double和nandouble的定义 6.5. mondrian 的志的配置 将log4j.xml放置到web-inf/classes下 文件内容如下: <category name="org.apache"> category> <category name="com.tonbeller"> category> <category name="mondrian.rolap"> category> <category name="mondrian.gui"> category> <category name="mondrian.sql"> category> <category name="mondrian.mdx"> category> 6.6. schema workbench schema的编辑器,界面化编辑schema。 但不知道为什么,在我的本机上,在打开,新建schema文件,都非常慢。 可以到http://sourceforge.net/projects/mondrian/files/下载,最新版本psw-ce-3.2.1.13885 7. 参考资料 http://mondrian.pentaho.com/documentation/ mondrian的官方网站 http://jacky6024.javaeye.com/ 比较有用的中文资料

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧