当前位置:文档之家› EAS自定义报表

EAS自定义报表

在报表制作整个流程中比较复杂的一步是建立数据源。

EAS 中本来已经存在很“.bos-table”,多BOS 的元数据,报表服务框架能拿来用的现在只有 2 种:“.bos-query”。

“.bos-query”直接可以做为报表的数据源,另外还可以在这2种元“java 数据源”、、数据的基础上建立报表服务特有的数据源:“KSQL 查询”、“数据加工”“多维数据集”、“自定义数据表”(后2种E AS5.3 暂时屏蔽)。

这五种数据都可以作为报表的数据源。

所有这些数据源之间以及和报表设计器之间的引用关系如下图所示:2.1 BOS 元数据BOS 元数据包括“.bos-table”和“.bos-query”两种。

BOS 元数据是EAS 开发人员或二次开发人员制作并发布到EAS 子系统树的。

报表服务中的文件夹下没有列出B0S 元数据,只有在新建数据源时或在报表设计器中引入数据源时才可以看到B OS 元数据。

BIM 中制作的元数据(单据)怎样才能被报表服务平台所使用呢?流程如下:金蝶E AS5.3 报表服务平台用户手册第2章数据源详解制作BOS-QUERY —>发布—>生成工作流和单据转换平台目录—>重起EAS服务器这个是针对本地EAS 服务器,如果需要在其他服务器上也看到该QUERY,则需要再进行一步“部署”的动作。

2.2 KSQL 查询KSQL 是基于BOS 元数据基础上进行构建。

bos-table 之间、bos-query 之间、bos-table 和b os-query 之间都可以进行关联查询。

KSQL 编辑器如下图:在构建KSQL 时,可以在编辑器中通过可视化的步骤一步步来构建;也可以选择“自定义查询”来自己编写K SQL,这个在查询一页将有讲解。

2.2.1 表表页签的作用就是选择KSQL 中所用的表,如上图,左边列出了EAS 中所有的元数据,包括b os-table 和b os-query 两种类型。

可以通过展开“+”来看每一层下的内容,也可以通过按钮过滤,如下图:金蝶E AS5.3 报表服务平台用户手册第2章数据源详解过滤后树上只显示符合过滤条件的元数据。

2.2.2 链接在链接页签为表之间设置链接建立表与表的关系。

如下图就是为采购订单和采购订单分录建立的链接:金蝶E AS5.3 报表服务平台用户手册第2章数据源详解(1)建立链接:在主表中选中关联字段,按住鼠标左键一直拖到从表中关联字段处即可。

(2)设置链接属性:选中链接(选中时,链接的颜色由黑色变为蓝色),双击链接或右键菜单中选中链接属性,属性窗口如下图:默认的链接属性就如上图,可以根据自己需要修改。

而序号的作用则是在有2 个以上链接时标明先后关系以保证构建成的K SQL 符合需要。

(3)右键菜单:如下图,除了链接属性外,断开链接,即断开当前选中链接;清除所有链接即清楚所有表之间的链接。

金蝶E AS5.3 报表服务平台用户手册第2章数据源详解2.2.3 字段字段页签功能为从已选表中选择需要的字段。

如下图,左边以2 层树状结构为展示已选表及其字段。

已选字段可以通过“”按钮或鼠标双击弹出属性窗口,如下图:金蝶E AS5.3 报表服务平台用户手册第2章数据源详解(1)名称:可以修改,修改后不影响字段的取值,该属性是做为K SQL 里字段的别名使用的。

一般为英文。

(2)别名:这个是用来显示使用的,一般是中文。

KSQL 在被调用时,看到的字段名称即为该别名。

在报表设计器中,使用表格向导时也会根据该别名为列生成标题。

(3)表达式:字段和表是通过表达式关联上的。

用户可以点击F7 控件弹出公式向导窗口来改变表达式,表达式可以为计算公式,例如2 个字段相加等。

2.2.4 过滤过滤页签的功能为给K SQL 语句增加过滤条件,即w here 语句。

如下图所示,通过表达式、比较符、比较值建立过滤条件,通过括号和逻辑符确定过滤条件之间的层次关系。

金蝶 E AS5.3 报表服务平台用户手册 第 2 章 数据源详解(1) 表达式:表达式的下拉列表中列出了所有的已选字段,用户可以选择使用。

另外也可以写公式作为表达式。

(2) 比较值:可以直接输入,也可以在公式向导中写。

默认的定位方式是:左边相对父容器左,上边相对父容器上,右边相对自身左, 下边相对自身上。

不难发现,这其实就是传统的“左上高宽”的绝对定位方式。

注意: 在引用参数时需要根据参数的类型决定是否加上单引号,另外还需要根据不 同数据库决定是否需要一些函数处理。

如上图中,因为数据库是 D B2,所以 此处在引用 S tring 类型的参数进行日期比较时需要加上 T O_DATE 进行转换。

该函数可以在公式向导中的函数中找到。

(3) 公式向导:当光标停在表达式或比较值的单元格内时,可以点击“” 按钮打开公式向导,如下图:金蝶E AS5.3 报表服务平台用户手册第2章数据源详解公式向导中左边字段栏列出了已选字段、已选表的所有字段以及参数,在写公式内容时可以通过点击需要的字段得到表达式。

函数栏列出了可以使用的函数,当选中一个函数时,在示例中可以看到该函数的功能描述以及示例,双击函数,则函数被添加到公式中光标所在的位置。

2.2.5 排序排序页签功能为给K SQL 语句增加排序,如下图,所有已选字段都是排序条件,如果打勾则表示按该字段排序,默认排序方式为升序。

有多个排序字段时可以通过“”按钮调整顺序,排在前面的,在K SQL 中也是排在前面。

金蝶 EAS5.3 报表服务平台用户手册 第 2 章 数据源详解注意: 在报表设计器直接调用 K SQL 查询时,如果报表中需要做分组,则 K SQL 查 询中必须按照分组顺序设置排序。

2.2.6 查询查询页签的功能为显示所构建的 K SQL 语句或者自定义 S QL 。

(1) 自动生成 K SQL :如下图为显示构建的 K SQL 语句,此时不能直接修改KSQL 语句:金蝶E AS5.3 报表服务平台用户手册第2章数据源详解有个特殊功能是“排除重复记录”,如果选中,则会在“select”后加上“distinct”。

(2)自定义查询:如果选中左下角的“自定义查询”,得到如下界面,此时得到的是如下图:此时的 S QL 语句是原有构建出来的,如果开始时直接选择自定义查询,就只有最简单的“SELECT * FROM ”提供。

虽然是自定义查询,但仍然是 KSQL 语法,有时候 KSQL 的函数不能完全满足需要,此时需要使用“原生态 S QL ”,即在 S QL 语句前加上/*dialect*/这样的字 符串,然后就可以根据所使用的数据库的情况使用每个数据库特有的函数等。

此时 S QL 语句是直接交给数据库执行而不是通过 K SQL 执行器执行的了。

注意: 自定义查询必须生成“输出字段”,输出字段在查询加工那一页进入并定义, 详细内容请查看“输出字段”的介绍。

2.2.7 参数参数页签的功能是定义 K SQL 查询的参数。

参数是用户使用 K SQL 查询时输入的查询信息。

一般情况下都是通过过滤条件调用参数从而达到传递用户的查询信息过滤数据的目的。

参数界面如下图:(1) 显示名称:显示名称可以在 K SQL 的被调用过程中一直传递下去,例如KSQL 被设计器调用,设计器会根据 K SQL 的参数相应的生成报表参数,根据向导为报表生成参数界面时查询条件的名称即为报表参数的显示名称,即为K SQL 参数的显示名称。

(2)默认值:查询时查询界面上查询条件的默认值。

和显示名称一样也是被一直传递到最终使用者处。

2.2.8 输出字段输出字段的功能是为自定义查询提供字段描述信息以供调用KSQL 查询时使用。

输出字段的定义是从查询加工页(查询加工的功能现被屏蔽掉,使用不起效果)的“输出字段”按钮进入。

输出字段的界面如下图所示:可以从已选字段中或已选表中选择字段作为输出字段,也可以新增输出字段。

如下图:输出字段没有表达式,只需名称、类型和自定义查询里的字段对应上即可。

2.3 交叉表数据加工交叉表数据加工的功能是“.bos-query”或KSQL 查询的基础上进行加工把行集数据扭转为交叉表数据。

交叉表数据加工从如下位置进入:原有的数据加工包括增加计算列、结果集行拆分、结果集列合并、投影交叉、结果集累加、结果集联合以及交叉表。

EAS5.3 版本中只有交叉表加工一种,其他加工暂时屏蔽。

(1)第一步,选择数据源:选择“新建数据加工”后,弹出如下窗口,在这个窗口中选择需要加工的数据源:(3)第三步,选择行上字段:选择位于行上的分组依据,可以选择多个。

(4)第四步,选择列上字段:选择位于列上的分组依据,可以选择多个。

分组依据也可以选择a sc(升序)或d esc(降序)的排序方式,默认为升序。

(5)第五步,选择交叉字段:可以选择多个字段进行交叉汇总计算,界面如下图,此处的可选字段已经过滤,只有数字类型的字段才可选:(平均值)、min(最大值)、max(最大值)、count(计数),默认为s um。

交叉字段位置:默认交叉字段放在X轴上,即列上。

如果不选则交叉字段位于行上,不过也只有当交叉字段有2个或2个以上时才有用。

2.4 JAVA 数据源报表服务平台支持通过写j ava 代码的方式提供报表所需要的数据。

(1)参数:参数的界面如下图,功能为设置该数据源所需要的参数。

参数名是在j ava 代码中用来取得该参数值的唯一标识。

(2)java 代码:JAV A 代码界面如下图:如上图中,用户可以在数据源设计界面里写j ava 代码或是输入一个j ava class 路径来指定一个数据源类。

该类实现了接口com.kingdee.bos.ctrl.data.engine.script.java.IDataProvider。

该接口声明了一个取数方法。

public Object fetchData(HashMap args, IEnvProvider envProvider, IDataExecutor executorRef) throws Exception其中a rgs 是数据的输入参数,是存在哈希表中,其中k ey 存的是参数名称,value是参数的值。

envProvider 是系统的环境信息,可以通过它取到如Bos context 的信息(”_ENV_BOS_CONTEXT”属性),Locale 的信息(”_ENV_LOCAL2_BY_BOS_CONTEXT”)。

executorRef 提供用于执行外部数据的执行器,比如可以通过该接口去执行一个KSQL 对象。

例子代码如下所示:package com.kingdee.bos.ctrl.report.forapp.eas;import java.sql.Connection;import java.util.HashMap;import java.util.Map;import com.kingdee.bos.Context;import com.kingdee.bos.ctrl.data.engine.script.java.IDataProvider;import com.kingdee.bos.ctrl.data.invoke.IDataExecutor;import com.kingdee.bos.ctrl.data.invoke.IEnvProvider;import com.kingdee.bos.framework.ejb.EJBFactory;import Type;import UnitCollection;public class MyDataProvider implements IDataProvider{public Object fetchData(HashMap arg1, IEnvProvider arg2,IDataExecutor executorRef) throws Exception{// bos contextContext bosCtx = (Context) arg2.get("_ENV_BOS_CONTEXT");Connection conn = EJBFactory.getConnection(bosCtx);// eas report contextMap rpt_ctx = (Map) arg1.get("CONTEXT");if (rpt_ctx != null){OrgUnitCollection orgs = (OrgUnitCollection) rpt_ctx.get("easOrgs");System.out.println("current orgs:" + orgs);OrgType orgType = (OrgType) rpt_ctx.get("easOrgType");System.out.println("report orgType:" + orgType);}String cu = (String) arg1.get("cu");if ((cu !=null) && !cu.equals("")){return conn.createStatement().executeQuery("SELECT fnumber,fname_l2,fcreatetime, "+ "fcontrolunitid from t_bd_accountTable "+ "where fcontrolunitid='"+cu+"'");}return conn.createStatement().executeQuery("SELECT fnumber,"+ "fname_l2,fcreatetime,fcontrolunitid from t_bd_accountTable ");}}(3)输出字段:输出字段界面如下图:编辑好j ava 代码(或是指定c lass 路径)后必须建立输出字段,否则在报表设计器总引用该数据源时无法得知可用的字段。

相关主题