찾다
데이터 베이스MySQL 튜토리얼润乾报表实现预置分组报表及改进

润乾报表实现预置分组报表及改进

Jun 07, 2016 pm 03:59 PM
그룹성취하다개발하다보고서개선하다

预置分组报表在报表开发中比较常见而且比较棘手。所谓预置分组报表是指分组没有规律,可能是分组范围没有规律,也可能分组顺序没有规律,需要报表开发人员事先预置(固定)分组的报表。常见的预置分组报表一般有如下三类:按段分组报表、固定次序分组报表、

预置分组报表在报表开发中比较常见而且比较棘手。所谓预置分组报表是指分组没有规律,可能是分组范围没有规律,也可能分组顺序没有规律,需要报表开发人员事先预置(固定)分组的报表。常见的预置分组报表一般有如下三类:按段分组报表、固定次序分组报表、多层固定次序分组报表。下面分别看一下这几类报表的特点,以及润乾报表的实现方法。

按段分组报表

这类报表的特点是分段的区间并未在数据库中存储需要根据相应字段(如年龄、日期)计算,并且每个分段可能会发生变化(如每年节假日所在日期可能不同),经常由用户随意指定。如:统计20-30岁,30-40岁,40-50岁各年龄段的用户数量;每年节假日(春节、端午节、国庆节)期间公路铁路承载的旅客统计。

下面通过实例说明,报表样式如下:

\

该报表是根据订单表统计各(预置)时间段内,各地区的订单数量、订单金额汇总。其中各时间段范围为:

【1996年圣诞前:date

1996年圣诞--1997年国庆:1996-12-25

1997年国庆--1998年五一:1997-10-1

1998年五一以后:date>1998-5-1】

实现

润乾报表实现该类按段分组报表主要使用ds.plot()函数,计算一个值在一个完全划分中的位置。报表模板及其表达式如下:

\

其中,参数arg1为日期组,默认值为:1996-12-25,1997-10-1,1998-5-1。

设置B1显示值表达式:map(to(0,count(arg1)+1),arg2),其中参数arg2为字符串组,默认值为:1996年圣诞前,1996年圣诞--1997年国庆,1997年国庆--1998年五一,1998年五一以后。

使用ds.plot()函数可以非常方便地实现上述报表,而且可以通过该函数的参数控制是否包含边界,对于分组较少并且边界包含规律的分组报表尤其适用。不过,当段界包含不规律时则无法使用ds.plot()实现,比如上例中如果时间范围变成:

【1996年圣诞前:date

1996年圣诞--1997年国庆:1996-12-25

1997年国庆--1998年五一:1997-10-1

1998年五一以后:date>1998-5-1】

起始和结束两段不包含段界日期,而中间的各个分段则包含,ds.plot()函数则存在限制,难以实现这类问题。

固定次序分组报表

这类报表的特点是用户要求分组次序固定,而数据库中并未存储相应的分组字段。如:要统计长三角地区、珠三角地区以及环首都经济圈内客户的订单情况。数据库客户表中只有城市(如:北京、上海、石家庄)和地区(如:华北、东北、华南)字段,如果单纯为该报表在数据库里增加另外一个地区字段显然是不值得的,所以任务自然落到报表端了。

下面通过一个实例来说明使用润乾报表实现这类报表的过程,报表样式如下:

\

要求:

1、 根据源数据中的城市分区分组汇总,其中:

环首都经济圈包括:[北京,天津,张家口,承德,保定,廊坊,唐山,秦皇岛,衡水,沧州,石家庄]

长三角地区包括:[上海,南京,苏州,无锡,常州,镇江,南通,扬州,泰州,杭州,宁波,湖州,嘉兴,绍兴,舟山,台州]

珠三角地区包括:[广州,深圳,珠海,佛山,江门,东莞,中山,惠州,肇庆]

其他城市列为其他地区;

2、报表显示的地区顺序固定,即上图所示顺序显示,这里显然无法通过按字母顺序升降来排序。

实现

该类分组报表主要使用润乾报表的ds.overlap()函数实现,报表模板及其表达式如下:

\

其中,A2的表达式为:

=ds1.overlap(true,城市 in list("北京","天津","张家口","承德","保定","廊坊","唐山","秦皇岛","衡水","沧州","石家庄"),"环首都经济圈",城市 in list("上海","南京","苏州","无锡","常州","镇江","南通","扬州","泰州","杭州","宁波","湖州","嘉兴","绍兴","舟山","台州"),"金三角",城市 in list("广州","深圳","珠海","佛山","江门","东莞","中山","惠州","肇庆"),"珠三角","其他")

可以看到ds.overlap()函数的强大,对于固定的分组以及分组下成员较少的情况尤其适用。但当分组或分组成员过多时,继续使用该函数的可读性就太差了,难于维护;此外,本例中看到的是一层分组,如果要实现多层固定次序分组报表,ds.overlap()函数则无法直接实现。下面看一个例子。

多层固定次序分组报表

再修改一下上例的报表需求,要求按地区和城市分组,且地区和城市的展现顺序固定,如下顺序(没有则不显示):

环首都经济圈包括:[北京,天津,张家口,承德,保定,廊坊,唐山,秦皇岛,衡水,沧州,石家庄]

长三角地区包括:[上海,南京,苏州,无锡,常州,镇江,南通,扬州,泰州,杭州,宁波,湖州,嘉兴,绍兴,舟山,台州]

珠三角地区包括:[广州,深圳,珠海,佛山,江门,东莞,中山,惠州,肇庆]

报表样式如下:

\

该报表由于存在两层固定次序分组(地区、城市),所以无法使用ds.overlap()直接实现,需要先将地区在报表中列出,继而通过ds.overlap()实现,报表模板及其表达式如下:

\

其中,B2、B3、B4表达式分别为:

B2:=ds1.overlap(true,城市=="北京","北京",城市=="天津","天津",城市=="张家口","张家口",城市=="承德","承德",城市=="保定","保定",城市=="廊坊","廊坊",城市=="唐山","唐山",城市=="秦皇岛","秦皇岛",城市=="衡水","衡水",城市=="沧州","沧州",城市=="石家庄","石家庄")

B3:=ds1.overlap(true,城市=="上海","上海",城市=="南京","南京",城市=="苏州","苏州",城市=="无锡","无锡",城市=="常州","常州",城市=="镇江","镇江",城市=="南通","南通",城市=="扬州","扬州",城市=="泰州","泰州",城市=="杭州","杭州",城市=="宁波","宁波",城市=="湖州","湖州",城市=="嘉兴","嘉兴",城市=="绍兴","绍兴",城市=="舟山","舟山",城市=="台州","台州")

B4:=ds1.overlap(true,城市=="广州","广州",城市=="深圳","深圳",城市=="珠海","珠海",城市=="佛山","佛山",城市=="江门","江门",城市=="东莞","东莞",城市=="中山","中山",城市=="惠州","惠州",城市=="肇庆","肇庆")

可以看到,对于多层固定次序分组报表润乾报表也是可以实现的,只是表达式相对复杂,当(地区)分组较多的时候,这种实现的代价会相对较高。

对于上述三类预置分组报表,润乾报表均可以实现,有些做起来也很简单,这也是润乾报表的强大之处(其它报表工具将会更为困难)。但对于一些更复杂的情况,无论是边界包含无规律、表达式过于复杂,还是多层预置分组难于实现,使用润乾报表解决起来就都不那么轻松了。究其原因,是因为报表工具把数据源准备和呈现混在一起导致(需要在报表模板中编写大量复杂计算逻辑),如果能将这两部分分开,则会使报表制作变得清晰、简单。

为解决这些问题,润乾公司对润乾报表进行了完善,推出润乾集算报表5.0版,在保留了润乾报表已有优势后,还在其中内置了独立的计算引擎:集算器,用于解决数据源准备问题。在集算报表中可以将复杂的数据计算(数据源准备)工作交由集算器完成,可将其视为报表的计算层;而报表本身只负责接收计算结果后进行展现(有时包括一些简单计算),从而将数据源准备和报表呈现分开,使得报表制作更为清晰。

下面用集算报表再实现上述三个例子:

按段分组报表

与润乾报表实现时不同之处在于,这里考虑边界无规律的情况,即:

【1996年圣诞前:date

1996年圣诞--1997年国庆:1996-12-25

1997年国庆--1998年五一:1997-10-1

1998年五一以后:date>1998-5-1】

起始和结束两段不包含段界日期,而中间的各个分段则包含。

编写计算脚本

首先使用集算器编写计算脚本,完成分组并返回分组汇总结果:

\

A2:按照arg1指定的分段进行分组A1:取出订单明细表数据

A3:再按照地区分组,并进行分组汇总计算订单数量和订单金额

A5:为结果集增加时间段字段,即每个分段的显示名称,如:“1996年圣诞前”、“1998年五一以后”

A6:为报表返回的ResultSet

报表调用

使用集算报表设计器,新建报表,使用“集算器”数据集类型,选择上面编辑好的集算脚本(按段分组.dfx):

\

 其中,arg1、arg2为集算脚本参数,param1和param2为报表参数。

设置报表模板及其表达式如下:

\

 在报表中只进行简单的分组汇总,即可完成报表的制作。

使用集算报表实现的最大好处是灵活,无论段界包含与否,均可以使用P.enum()函数实现。所以这里看到,在集算报表中将数据准备(集算脚本)和报表呈现(报表模板)分开带来的好处,在计算层通过集算器完备的计算体系完成数据源准备的工作,在展现层通过报表模板专司展现,层次清晰、实现简单。

下面给出剩余两类报表的实现方法,其他不再赘述。

固定次序分组报表

编写集算脚本

\ A8:按照预置地区顺序对位分组,保证地区顺序满足要求A6:增加地区字段,并在A9中根据城市判断并填充地区信息

A9:计算各组汇总值

A10:为报表返回结果集

报表调用

\

设置报表模板及表达式

\

相对润乾报表的实现,在集算报表中可以逐步(分步编写代码)实现,从而避免过于冗长的表达式带来的编写和维护问题;而且集算器对集合运算的有效支持使得实现更加简单,如这里通过P.align()函数对订单数据按照固定顺序的地区集合进行对位分组,继而完成汇总的代码就体现了对集合运算支持的有效性和简单性。无论对于开发实现,还是后期报表维护都非常容易。

多层固定次序分组报表

编写计算脚本

\ 在A8中按照指定的城市顺序排序(此时地区也已有序),最后通过A9将排序后的结果集(明细数据)返回给报表。

报表调用

\

设置报表模板及表达式

\

本例则进一步体现了集算报表中内置的集算器的强大计算能力,对于无法直接在报表工具中完成的多层固定顺序的分组计算,在集算器中通过前面提到的灵活、分步以及本例中完备的计算能力等特点,使实现变得非常简单。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
MySQL은 sqlite와 어떻게 다릅니 까?MySQL은 sqlite와 어떻게 다릅니 까?Apr 24, 2025 am 12:12 AM

MySQL과 Sqlite의 주요 차이점은 설계 개념 및 사용 시나리오입니다. 1. MySQL은 대규모 응용 프로그램 및 엔터프라이즈 수준의 솔루션에 적합하며 고성능 및 동시성을 지원합니다. 2. SQLITE는 모바일 애플리케이션 및 데스크탑 소프트웨어에 적합하며 가볍고 내부질이 쉽습니다.

MySQL의 색인이란 무엇이며 성능을 어떻게 향상 시키는가?MySQL의 색인이란 무엇이며 성능을 어떻게 향상 시키는가?Apr 24, 2025 am 12:09 AM

MySQL의 인덱스는 데이터 검색 속도를 높이는 데 사용되는 데이터베이스 테이블에서 하나 이상의 열의 주문 구조입니다. 1) 인덱스는 스캔 한 데이터의 양을 줄임으로써 쿼리 속도를 향상시킵니다. 2) B-Tree Index는 균형 잡힌 트리 구조를 사용하여 범위 쿼리 및 정렬에 적합합니다. 3) CreateIndex 문을 사용하여 CreateIndexIdx_customer_idonorders (customer_id)와 같은 인덱스를 작성하십시오. 4) Composite Indexes는 CreateIndexIdx_customer_orderOders (Customer_id, Order_Date)와 같은 다중 열 쿼리를 최적화 할 수 있습니다. 5) 설명을 사용하여 쿼리 계획을 분석하고 피하십시오

MySQL에서 트랜잭션을 사용하여 데이터 일관성을 보장하는 방법을 설명하십시오.MySQL에서 트랜잭션을 사용하여 데이터 일관성을 보장하는 방법을 설명하십시오.Apr 24, 2025 am 12:09 AM

MySQL에서 트랜잭션을 사용하면 데이터 일관성이 보장됩니다. 1) STARTTRANSACTION을 통해 트랜잭션을 시작한 다음 SQL 작업을 실행하고 커밋 또는 롤백으로 제출하십시오. 2) SavePoint를 사용하여 부분 롤백을 허용하는 저장 지점을 설정하십시오. 3) 성능 최적화 제안에는 트랜잭션 시간 단축, 대규모 쿼리 방지 및 격리 수준을 합리적으로 사용하는 것이 포함됩니다.

MySQL을 통해 어떤 시나리오에서 PostgreSQL을 선택할 수 있습니까?MySQL을 통해 어떤 시나리오에서 PostgreSQL을 선택할 수 있습니까?Apr 24, 2025 am 12:07 AM

MySQL 대신 PostgreSQL을 선택한 시나리오에는 다음이 포함됩니다. 1) 복잡한 쿼리 및 고급 SQL 기능, 2) 엄격한 데이터 무결성 및 산 준수, 3) 고급 공간 기능이 필요하며 4) 큰 데이터 세트를 처리 할 때 고성능이 필요합니다. PostgreSQL은 이러한 측면에서 잘 수행되며 복잡한 데이터 처리 및 높은 데이터 무결성이 필요한 프로젝트에 적합합니다.

MySQL 데이터베이스를 어떻게 보호 할 수 있습니까?MySQL 데이터베이스를 어떻게 보호 할 수 있습니까?Apr 24, 2025 am 12:04 AM

MySQL 데이터베이스의 보안은 다음 조치를 통해 달성 할 수 있습니다. 1. 사용자 권한 관리 : CreateUser 및 Grant 명령을 통한 액세스 권한을 엄격히 제어합니다. 2. 암호화 된 전송 : 데이터 전송 보안을 보장하기 위해 SSL/TLS를 구성합니다. 3. 데이터베이스 백업 및 복구 : MySQLDump 또는 MySQLPump를 사용하여 정기적으로 백업 데이터를 사용하십시오. 4. 고급 보안 정책 : 방화벽을 사용하여 액세스를 제한하고 감사 로깅 작업을 가능하게합니다. 5. 성능 최적화 및 모범 사례 : 인덱싱 및 쿼리 최적화 및 정기 유지 보수를 통한 안전 및 성능을 모두 고려하십시오.

MySQL 성능을 모니터링하는 데 사용할 수있는 몇 가지 도구는 무엇입니까?MySQL 성능을 모니터링하는 데 사용할 수있는 몇 가지 도구는 무엇입니까?Apr 23, 2025 am 12:21 AM

MySQL 성능을 효과적으로 모니터링하는 방법은 무엇입니까? Mysqladmin, Showglobalstatus, Perconamonitoring and Management (PMM) 및 MySQL Enterprisemonitor와 같은 도구를 사용하십시오. 1. MySQLADMIN을 사용하여 연결 수를보십시오. 2. showglobalstatus를 사용하여 쿼리 번호를보십시오. 3.pmm은 자세한 성능 데이터 및 그래픽 인터페이스를 제공합니다. 4. MySQLENTERPRISOMITOR는 풍부한 모니터링 기능 및 경보 메커니즘을 제공합니다.

MySQL은 SQL Server와 어떻게 다릅니 까?MySQL은 SQL Server와 어떻게 다릅니 까?Apr 23, 2025 am 12:20 AM

MySQL과 SqlServer의 차이점은 1) MySQL은 오픈 소스이며 웹 및 임베디드 시스템에 적합합니다. 2) SQLServer는 Microsoft의 상용 제품이며 엔터프라이즈 수준 애플리케이션에 적합합니다. 스토리지 엔진의 두 가지, 성능 최적화 및 응용 시나리오에는 상당한 차이가 있습니다. 선택할 때는 프로젝트 규모와 향후 확장 성을 고려해야합니다.

MySQL을 통해 어떤 시나리오에서 SQL Server를 선택할 수 있습니까?MySQL을 통해 어떤 시나리오에서 SQL Server를 선택할 수 있습니까?Apr 23, 2025 am 12:20 AM

고 가용성, 고급 보안 및 우수한 통합이 필요한 엔터프라이즈 수준의 응용 프로그램 시나리오에서는 MySQL 대신 SQLServer를 선택해야합니다. 1) SQLServer는 고 가용성 및 고급 보안과 같은 엔터프라이즈 수준의 기능을 제공합니다. 2) VisualStudio 및 Powerbi와 같은 Microsoft Ecosystems와 밀접하게 통합되어 있습니다. 3) SQLSERVER는 성능 최적화에서 우수한 성능을 발휘하며 메모리 최적화 된 테이블 및 열 스토리지 인덱스를 지원합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.