[ABI 5.1] 复杂报表制作求助

39954
27

小灰灰1 数据达人Lv4

发表于2020-7-27 13:41

悬赏1

已解决

楼主

报表需求是这样的,我现在只做出来了前面的明细数据扩展
问题在于下面几个地方的实现:
1、一年12个月份的扩展,在abi里是一个个都写出来还是说可以有表达式动态扩展出来?
2、每个月的周数是不一样的,尤其是2月份,这个怎么搞动态判断处理呀?
3、交叉部分的数据,是各种和前面数据的对比判断,这样复杂逻辑的可以在单元格直接搞么?

最近看过此主题的会员

esen_56A4TI9I2P

wanghong

27个回答

只看楼主

xxxl 数据领袖Lv6

发表于2020-7-28 15:02

只看该作者

取消 关注该作者的回复

22#

小灰灰1 发表于 2020-7-28 14:47
有case when的语法说明么?

定义
CASE WHEN condition1 THEN value1 WHEN condition2 THEN value2 WHEN ... THEN ... ELSE defaultValue END 依次判断条件condition1,condition2,....,返回最先满足的条件对应的值。如果都不满足,且有Else,则返回defaultValue。
示例
case when b1=1 then "第一" when b1=2 then "第二" when b1=3 then "第三" else "无名次" end
注意
该函数仅为内存计算函数,不能用于数据库计算,函数参数中不能有 主题表字段

小灰灰1 数据达人Lv4

发表于2020-7-28 15:07

只看该作者

取消 关注该作者的回复

23#


=case when GRID1.E5="年" and GRID1.F3$=MONTH(GRID1.D5) and DAY(GRID1.D5 ) >=(GRID1.F4$-1)*7+1 and DAY(GRID1.D5)<=GRID1.F4$*7 then "○" when GRID1.E5="月" and GRID1.F3$>=MONTH(GRID1.D5) and DAY(GRID1.D5)>=(GRID1.F4$-1)*7+1 and DAY(GRID1.D5)<=GRID1.F4$*7 then "o" when (GRID1.E5="天" and GRID1.F3$=MONTH(GRID1.D5)) OR (GRID1.E5="天" and GRID1.F3$>MONTH(GRID1.D5)) then "o" else "" end
我该出来了,但是不知道结果对不对,因为前面不知道为啥又取不出来数据了,等我再发个帖子问下情况

小灰灰1 数据达人Lv4

发表于2020-7-28 15:31

只看该作者

取消 关注该作者的回复

24#

本帖最后由 小灰灰1 于 2020-7-28 15:34 编辑


GRID1.D5 这里就取不到值了,所以case when的执行本身结果就不对了---这个问题和右侧自动设置的数据类型有关,我再看下

小灰灰1 数据达人Lv4

发表于2020-7-28 17:37

只看该作者

取消 关注该作者的回复

25#

小灰灰1 发表于 2020-7-28 15:31
GRID1.D5 这里就取不到值了,所以case when的执行本身结果就不对了---这个问题和右侧自动设置的数据类型有 ...

if(GRID1.E5="年" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)=MONTH(GRID1.D5) and DAY(GRID1.D5 ) >=(mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)-1)*7+1 and DAY(GRID1.D5)<=mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)*7,"o",if(GRID1.E5="月" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)=MONTH(GRID1.D5) and DAY(GRID1.D5)>=(mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)-1)*7+1 and DAY(GRID1.D5)<=mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)*7,"o",
if((GRID1.E5="天" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)=MONTH(GRID1.D5)) OR (GRID1.E5="天" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)>MONTH(GRID1.D5)),"o","")))
改成if的写法了,但是实际计算出来的结果不大对,我得缕下逻辑再。。。

xxxl 数据领袖Lv6

发表于2020-7-28 17:49

只看该作者

取消 关注该作者的回复

26#

小灰灰1 发表于 2020-7-28 17:37
if(GRID1.E5="年" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)=MONTH(GRID1.D5) and DAY(GRID1 ...

你这里这么多的条件根据不清楚是哪里的条件出现了问题,建议一步步的来做if条件一点点的加看看问题出现在哪里

小灰灰1 数据达人Lv4

发表于2020-7-29 09:40

只看该作者

取消 关注该作者的回复

27#

这个报表在制作过程中需要解决的问题和实现方法总结:
1、月份和周数的扩展,这个需要在数据库表中增加辅助物理表
然后写sql主题表搞成一个结果集出来
2、日期格式处理需要自己各种截取处理:=left(strtodate(left(ceshi21.scjxrq,9),"yyyy-mm-dd"),10)
3、交叉取值格的表达式为:=if(GRID1.E5="年" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)=MONTH(GRID1.D5) and DAY(GRID1.D5 ) >=(mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)-1)*7+1 and DAY(GRID1.D5)<=mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)*7,"o",if(GRID1.E5="月" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)>=MONTH(GRID1.D5) and DAY(GRID1.D5)>=(mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)-1)*7+1 and DAY(GRID1.D5)<=mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)*7,"o",
if((GRID1.E5="天" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)=MONTH(GRID1.D5)) OR (GRID1.E5="天" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)>MONTH(GRID1.D5)),"o","")))

因为单纯表元取出来的结果不对,所以里面用的哦啊了各种截取,导致表达式比较复杂

xxxl 数据领袖Lv6

发表于2020-7-27 13:41

只看该作者

取消 关注该作者的回复

28#

本帖最后由 xxxl 于 2020-7-30 16:29 编辑

小灰灰1 发表于 2020-7-29 09:40
这个报表在制作过程中需要解决的问题和实现方法总结:
1、月份和周数的扩展,这个需要在数据库表中增加辅助 ...


关贴总结:
这个报表在制作过程中需要解决的问题和实现方法总结:
1、月份和周数的扩展,这个需要在数据库表中增加辅助物理表
然后写sql主题表搞成一个结果集出来
2、日期格式处理需要自己各种截取处理:=left(strtodate(left(ceshi21.scjxrq,9),"yyyy-mm-dd"),10)
3、交叉取值格的表达式为:=if(GRID1.E5="年" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)=MONTH(GRID1.D5) and DAY(GRID1.D5 ) >=(mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)-1)*7+1 and DAY(GRID1.D5)<=mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)*7,"o",if(GRID1.E5="月" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)>=MONTH(GRID1.D5) and DAY(GRID1.D5)>=(mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)-1)*7+1 and DAY(GRID1.D5)<=mid(ASSTR(GRID1.F4$),1,len(ASSTR(GRID1.F4$))-2)*7,"o",
if((GRID1.E5="天" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)=MONTH(GRID1.D5)) OR (GRID1.E5="天" and mid(ASSTR(GRID1.F3$),1,len(ASSTR(GRID1.F3$))-2)>MONTH(GRID1.D5)),"o","")))
因为单纯表元取出来的结果不对,所以里面用的了各种截取,导致表达式比较复杂
感谢楼主分享!

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号