低代码可视化操作手册第三篇

复杂报表组件

在“组件-通用”里选择报表(DataSheet2)组件,可以制作多表头复杂报表。


112b6914b29854d8d4de8ec2eb2612a8.jpeg



报表计算模型介绍

在DataSheet2中单元格之间存在依赖关系,对于任意一个单元格都可以设置它的左父格与上父格。单元格父格是可选的,默认情况下,单元格的左父格就是其最近左边与其位于同一行的单元格;上父格则是其最近上方与其位于同一列的的单元格。如果一个单元格位于第一行,那默认它就没有上父格,同样,如果位于第一列,默认它就没有左父格。打开DataSheet2报表设计器,选中任意单元格,都可以在其属性面板看到它的默认上父格或左父格,如下afda933d435d5fbc220327abfab27801.jpeg

 如上图所示,对于某一特定单元格,我们可以手动更改它的左父格或上父格。任意单元格在绑定数据集中某个字段会,如果这个字段有一条以上的数据,那么单元格就可以展开以显示这些数据。对于父格而言,父格展开时会带动子格一起展开,如父格向下展开,则带其下所有子格及子格的子格一起向下展开;同时,如果子格中绑定的数据集与父格中数据集同属一个,则子格中的数据将受父格限制。子格绑定的数据集字段数据在展开时,同样也会带动其下子格一起展开,而当前子格的父格如与子格处于同一行或列,则会将父格拉大。利用上述迭代单元格的特性,我们就可以制作出各种复杂的报表样式,掌握了这一报表计算模型的特点,是开发报表的前提。

数据集选择

打开DataSheet2的报表设计器,在操作面板选择数据集页签,页签下可以引用数据集模块创建好的数据集

6f787ac48ba8c694c9566c7761f4d07a.jpeg

454261736ff7909b40e79717db8f381e.jpeg

双击要使用的数据集,将数据集引入报表,自动列出数据集的全部字段

32cb9a373499a80d93c68fabff8f9132.jpeg

左侧选中某个单元格,双击字段即可给单元格绑定字段。

参数与筛选器

 参数指的是从报表筛选器传入报表的值,在DataSheet2中,下面介绍如何SQL数据集如何定义参数。

SQL数据集参数

在SQL数据集SQL编辑器中需要添加动态参数,供报表筛选器绑定,动态参数形式如下:<p1>and 产品种类 =?[p1]</p1> &nbsp;其中p1代表参数名称,报表查询时如果没有参数值,则改条件不生效,相当于不存在。如果有参数值,则自动加到列过滤。 写好sql后点击刷新按钮,右侧会刷出数据、字段信息以及识别的参数

&nbsp; &nbsp; &nbsp; &nbsp;c68408ff6b551cb1d21ad320c822fdaa.jpeg

筛选器

在报表设计界面,点击工具栏上方的查询表单设计器按钮

345e14eafd422b55dff6d6c8ab90da5b.jpeg


f6d2aaca888307321fa6782095c089f9.jpeg

在组件区域可以拖动组件到右侧预览区域,默认从左到右排列,可以通过先放置布局组件,在放置查询组件的方式调整查询布局,如下图

bdb8c46ce5b69910dce01fad9e8c5eda.jpeg

选中某个查询组件,左侧切换到属性面板,可以针对改组件设置属性,例如绑定参数,设置数据来源、设置必填、显示名称等

13dfb5ef6cdd58723f133268d5ffb995.jpeg


绑定查询参数:查询条件需要绑定参数才能用于数据筛选,参数来自于关联的数据集参数


数据来源:下拉组件的待选项数据可以是固定值,也可以从数据集中动态查询,选择数据来源为数据集后,可设置来源数据集、来源字段、显示字段等属性


b6f8b9d505f9c40d7d353a4bc7b8545d.jpeg




级联筛选

以省份-城市-区县级联为例:

前提:3个组件的数据来自同一个数据集的3个字段,数据上构成分组级联关系

f883eeeb34c2df8eef6aadcf516662bd.jpeg


2676d7dc18c9a4d24500f5be82c0b64c.jpeg


选中省份组件,在属性面板设置属性“级联组件标题,多个用,隔开”, 将要级联控制的“城市”、“区县”组件的名称配置好即可。效果如下

d642a0719d20642c68011735436174ea.jpeg



页面进入时默认不查询

页面进入时默认不查询

04226feb693d85870638c09942384161.jpeg


表达式

在报表使用过程当中,不可避免的要使用函数及表达式实现一些数据的计算,在DataSheet2当中,很多地方都支持编写表达式,比如最典型的我们可以将单元格类型改为“表达式”,这样就可以在下面的表达式编辑器里输入相应的表达式与函数,除此之外,DataSheet2还允许我们在条件、图片来源、二维码数据来源等地方使用表达式,所以学习并掌握DataSheet2中提供的表达式,是制作复杂报表的前提。

基本语法

与一般的编程语言类似,DataSheet2中的表达式也有一些基本的数据类型,比如数字、字符串、布尔值等。上述的有三种基本的数据类型,可以单独使用,也可以用“+”、"-"、"*"、"/"、"%"连接,进行组合运算,如下表所示:


操作符

描述

示例

+

求两个数的和,或者是连接两个值

21+31,这就表示求这两个数的和,结果就是52,“值:”+331则表示连接两个值,其结果就是“值:331”

-

求两个数差

21 - 31,这就表示求这两个数的差,结果就是-10

*

求两个数的乘积

3*6,结果就是18

/

求两个数除的结果

6/3,结果就是2,如果除不尽,则会保留8位小数

%

求两个数除的余值

5%3,结果是2;6%2结果是0


&nbsp;DataSheet2中还提供了几种类型的条件判断运算符,我们首先来看一下三元表达式。

三元表达式

&nbsp;基本所有的语言都支持三元表达式判断,它的特点是简洁明晰,可以用最少的代码进行条件判断,DataSheet2中的三元表达式语法结构如下图所示:

b7a1b8c86ad083e442593774bfc897e5.jpeg

可以看到,和普通的三元表达式一样,它的第一部分是条件部分,条件部分可以有多个条件(用and或or连接),“?”后面是条件满足后执行并返回的表达式部分,“:”后面则是条件不满足时执行返回的表达式部分。

三元表达式示例

说明

A1>1000 ? "正常值" : "低值"

表达式计算时,先取到A1单元格的值,判断值是否大于1000,如果是返回“正常值”字符串,否则返回“低值”字符串

A1>1000 and A1<20000 ? "正常值" : "修正值:"+(A1+100)

条件部分,判断A1值是否大于1000且小于20000,如果是返回"正常值",否则返回字符串”修正值“与A1值加100后结果连接的值,如果A1是2000,那么就返回”修正值:2100“


if判断

&nbsp; DataSheet2中if判断表达式语法结构如下图所示:

489bd2d6948231de70bb8a3ea184719e.jpeg

从图中可以看到,if判断表达式则一个if条件判断部分加若干个可选的elseif条件判断部分,最后再加一个可选的else部分构成,语法结构类似java或javascript。

if判断表达式示例

说明

if(A1>1000){

return "正常值"

}

判断A1单元格的值是不是大于1000,如果是返回”正常值“字符串,否则什么都不做

if(A1>1000){

return "正常值"

}else{

"低值";

}

判断A1单元格的值是不是大于1000,如果是返回”正常值“字符串,否则返回”低值“字符串。

这里需要注意的是,在if表达式中,return关键字是可选的,同是行尾添加';'也是可选的,这主要是为了照顾一些java及javascript程序的习惯

if(A1>1000 and A1<20000){

return "正常值:"+A1

}else if(A>20000 and A1<40000){

return "超高值"

}else{

"低值"

}

在这个例子当中,条件部分添加了多个组合条件,同时elseif多重判断

case判断

case判断是DataSheet2中提供的另一种条件判断形式,与if判断有些类似,但case判断看起来更为简洁,其语法结构图如下所示:

6a2af601abdd74128b50e5233baea0b6.jpeg


可以看到,case判断要由case{...}包裹,然后是若干条件加返回值。


case表达式示例

说明

case{

A1==100

return "正常值",

A1>100 and A1<1000

return '偏高'

}

有两个条件,分别返回不同的值

case{

A1==100

return "正常值",

A1>100 and A1<1000

'偏高'

}

在case表达式中,return关键字同样是可选

单元格引用

在报表当中,大多数的计算都是针对单元格或与单元格有关,因为报表中单元格多数都与数据绑定,而数据往往又是多条,所以计算后的报表一个单元格会产生多个,这样对于单元格的引用就变的比较复杂。在DataSheet2中,引用的目标单元格是相对当前单元格来进行计算的,引用方法就是直接在表达式里书写单元格名称,比如引用A1单元格,就直接写A1即可,如下面的例子:

06658bc8d3fb535f6fb7806307c5f5f7.jpeg

&nbsp;在上图当中,我们在D1单元格中输入表达式A1,这就表示,在D1单元格里填入相对当前D1单元格的A1单元格的值,运行后的效果如下:

45fb8da1bed96ee477a9cc5ca33910c9.jpeg

&nbsp;可以看到,因为D1是A1的子格,A1单元格绑定的数据就是分组结构,根据当前D1单元格的位置,就产生的上图所示的结果。如果在D1单元格中输入B1,那么运行后的效果又是下图的样子:

0aa10dca47d8d6013dbcc9d38805a6bf.jpeg

同样,如果在D1中输入表达式C1,那么运行后将会在每个D1单元格中填入与D1单元格位于同一行的C1单元格的值,运行结果这里就不再贴出来了。

&nbsp;通过上面的例子我们可以看到,DataSheet2中某个单元格的表达式引用目标单元格,首先判断的是目标单元格与其所在单元格是否位于同一行或行,如果是则直接取对应行或列上目标单元格的值。如果当前单元格与目标单元格不在同一行或列,那情况又不

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值