灵活数据源的固定行列交叉报表的制作

论坛里,http://bbs.csdn.net/topics/390883416中提的问题,其目的是为了实现一个固定行列的交叉表,用SQL准备好固定行数的数据源非常麻烦。而润乾集算报表则有非常灵活的计算能力,能够充分利用问题特点应付各种非常规的计算需求。

这里就以链接中业务为背景,给出集算报表实现某种固定列交叉报表的方案。

报表背景

        源数据例如以下:

现须要在报表中显演示样例如以下内容:

这里要求依照分类统计总记录数。并将每月的记录数分别填充到1-12月中。当中无数据的记录显示为0。

这个报表的难点数据库中的数据并不完整,按分类和月份分组后可能缺少一些组。

用SQL补齐分组比較麻烦。而一般报表工具不具备数据源计算能力。须要在报表中完毕计算。比如用润乾报表会这样实现:

使用润乾报表完毕这个报表时,须要採用多数据源的方案,在单元格中自行编写条件表达式完毕过滤和统计运算,而不能使用报表工具交叉表模型自己主动限定数据集。

尽管难度不算非常大。但实际运算中数据源(集)要被多次遍历,报表效率较低。

集算报表内置了适合结构化计算的脚本。能够事先将数据准备好(相当于一种更使用更简单的自己定义数据集)。报表工具仅仅要简单地使用交叉表模型绘制就可以。上述报表需求使用集算报表能够这样完毕:

编写集算脚本

首先使用集算脚本编辑器。新建集算脚本,设置脚本參数:年份。

编写脚本完毕数据补齐操作,为报表输出计算后结果集。

A1:连接数据源。

A2:运行取数sql,依据年份參数取得明细数据。



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

A3:将分类、月份序列进行叉乘,并设置数据量为0,得到带有分类、月份和数量的结果集。

A4-B5:循环源数据,依据分类和月份相应A3集合的相应字段。匹配则改动A3.数量=A3.数量+1。得到的A3集合例如以下:

这里利用了固定行列的特点,直接计算出目标数据的位置,从而避免了遍历式的推断查找。而报表工具无法利用这样的直接定位的办法找到目标记录,仅仅能採用慢速的条件遍历。

A7:为报表返回结果集。

编辑报表模板

使用集算报表编辑器。编辑报表模板。用于数据展现。连接报表默认数据源demo。



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

新建參数,并设置默认值。

新建报表并设置集算器数据集,调用上述编辑好的脚本文件。

当中,dfx文件路径既能够是绝对路径。也能够是相对路径,相对路径是相对选项中配置的dfx主文件夹的;參数y_date为报表模板參数,year为脚本參数。其实二者能够同名。

编辑报表表达式,这时仅仅要採用普通的单数据源交叉报表方法就可以:



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

报表展现结果例如以下:



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM4ODQ5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

假设脚本已经调试好。且不须要复用的时候,还能够直接使用集算报表的脚本数据集,当中能够直接使用报表定义好的数据源和參数,过程更为简单:

1.在数据集设置窗体中点击“添加”button,弹出数据集类型对话框。选择“脚本数据集”;

2.在弹出的脚本数据集编辑窗体中编写脚本。

在脚本数据集中直接使用了报表中定义好的数据源demo和參数y_date。比起单独的集算脚本更加简单、直接。

3. 报表模板和表达式与使用集算器数据集方式一致,不再赘述。

时间: 2024-10-09 15:49:47

灵活数据源的固定行列交叉报表的制作的相关文章

润乾集算报表非常规统计之固定行列交叉表

实际信息系统中很多数据计算是为前端展示而进行的,其中报表是最常见的一种形式.这些计算的实现过程往往并不简单,使用SQL或存储过程实现起来比较困难,从而影响到前端报表设计.像http://bbs.csdn.net/topics/390883416中提的问题,其目的是为了实现一个固定行列的交叉表,用SQL准备好固定行数的数据源很麻烦.而润乾集算报表则有很灵活的计算能力,可以充分利用问题特点应付各种非常规的计算需求.这里就以链接中业务为背景,给出集算报表实现某种固定列交叉报表的方案. 报表背景 源数据

固定格式填报表的制作

在前面几篇文章中,我们学习了多种类型填报表的制作,对润乾报表的填报机制有了一定的了解.今天我们来研究一下如何制作固定格式填报表,同时检验下自己之前学习的内容是否已熟练掌握. 今天要学习的固定格式填报表效果图如下所示: 左侧为固定内容,蓝色部分是需要客户填写的内容,最后将整个页面数据更新到数据库表中. 这里的难点在于,如何把左侧固定内容也更新到数据库中,也就是如何设置单元格分区. 带着这个问题我们来看一下具体实现步骤: 第一步 新建填报表 编辑填报表内容和样式,如下图所示: 一般这类报表会对应一个

双区间交叉报表的制作

使用Jasper或BIRT等报表工具时,常会碰到一些非常规的统计,用报表工具本身或SQL都难以处理,比如交叉表的行组和列组都是分段区间,测度(measurem)来自其他数据库表.集算器具有结构化强计算引擎,集成简单,可以协助报表工具方便地实现此类需求.下面通过一个例子来说明双区间交叉表的实现过程. 表account_detail的主键为account_no,与表Paysoft_result和NAEDO都是1对多关系.Paysoft_result的外键是custno,NAEDO的外键是custom

ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案

原文:ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案 在 ActiveReports 中可以通过矩阵控件非常方便的实现交叉报表,同时还可以设置数据的分组.排序.过滤.小计.合计等操作,可以满足您报表的智能数据分析等需求.在矩阵控件中组的行数和列数由每个行分组和列分组中的唯一值的个数确定.同时,您可以按行组和列组中的多个字段或表达式对数据进行分组.在运行时,当组合报表数据和数据区域时,随着为列组添加列和为行组添加行,矩阵将在页面上水平和垂直增长. 在矩阵控件中,

什么是交叉报表

交叉报表,也是报表当中常见的类型,和分组报表一样,也是基本的报表类型.分组报表是只有行方向上有分组,而交叉报表则是行.列方向都有分组的报表.传统的报表一般都是通过专门的交叉报表生成向导来设计交叉报表.      交叉报表看似简单,但是在实际应用中,特别是处理中国式复杂报表时,作用巨大:主要是因为中国式报表的自身特点决定的. 避开纯技术的数据源和运算等等不说,单单说一说中国报表的形式.中国式报表一般都会有格线,这样会使得报表内容一目了然.在格线划分的时候,交叉形式的格线使用率就很高.这样也就解释了

交叉报表列头排序时遇到的oracle问题—oracle ORA-12704:字符集不匹配、varchar2转化为nvarchar2字符缺失、case when else后的字符类型要一致

在做交叉报表列头的排序时,遇到这三个问题,下面具体来说一下. 设计的数据库的表结构如图1所示: 图1 要处出来student_name_,s.grade_,s.subject_name_,这三个属性,当时我是这样写的sql语句: select  s.student_name_, s.grade_,  s.subject_name_, case  s.subject_name_ when  '语文' then 'A语文' when  '数学' then 'B数学' when  '英语' then 

锐浪 报表, 交叉报表中 对交叉字段,做条件改变背景颜色 .

var fieldCount = Report.RunningDetailGrid.ColumnContent.ContentCells.Count; // 总字段列数 var lockFieldCount = Report.DetailGrid.CrossTab.ListCols; // 锁定字段列数 var crossFieldCount = fieldCount - lockFieldCount; for(var colIndex = 1; colIndex <=crossFieldCou

锐浪 报表, 当多行交叉报表时,对多行交叉报表中自由格中的多个字段控件,进行颜色控制. 取值 判断等实现

需要注意的点是: 1 . 要对自由格中对应的 字段框的背景填充方式改为:填充,否则没有效果. 2 . 代码中红色部门代码: Column 为明细网络对象属性中的 列集合 中的 交叉列的 名称,  Report.RunningDetailGrid.Columns.Item("Column_2") 3.  蓝色部门 为自由格中 控件的索引位置 ,也可以根据字段框的名称来进行控制如:  contentCell.Controls.Item("FieldBox8") 代码如下

关联跨行计算报表的制作

实际信息系统中很多数据计算是为前端展示而进行的,其中报表是最常见的一种形式.这些计算的实现过程往往并不简单,使用SQL或存储过程实现起来比较困难,从而影响到前端报表设计.像http://bbs.csdn.net/topics/390813196中提的问题,其目的往往是为了实现一个供生产或采购部门使用的报表(包含库存覆盖周期,方便生产调度或实施采购任务),用SQL写起来会比较麻烦,一般报表工具又不具备很强的计算能力,也无法直接完成.而润乾集算报表则有很灵活的计算能力,可以充分利用问题特点应付各种非