-
-
小灰灰1 数据达人Lv4
发表于2020-7-27 13:41
悬赏1
已解决
楼主
报表需求是这样的,我现在只做出来了前面的明细数据扩展
问题在于下面几个地方的实现:
1、一年12个月份的扩展,在abi里是一个个都写出来还是说可以有表达式动态扩展出来?
2、每个月的周数是不一样的,尤其是2月份,这个怎么搞动态判断处理呀?
3、交叉部分的数据,是各种和前面数据的对比判断,这样复杂逻辑的可以在单元格直接搞么?
最佳答案
本帖最后由 xxxl 于 2020-7-30 16:29 编辑

关贴总结:
这个报表在制作过程中需要解决的问题和实现方法总结:
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","")))
因为单纯表元取出来的结果不对,所以里面用的了各种截取,导致表达式比较复杂
感谢楼主分享!
小灰灰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","")))
因为单纯表元取出来的结果不对,所以里面用的了各种截取,导致表达式比较复杂
感谢楼主分享!
27个回答
1 2问题您这里的月份是怎么进行存储的呢,是数据库中已经存在的数据吗
3交叉部分如果是数据库中存在数据的话使用 交叉浮动就可以实现
xxxl 发表于 2020-7-27 13:55
1 2问题您这里的月份是怎么进行存储的呢,是数据库中已经存在的数据吗
3交叉部分如果是数据库中存在数据的 ...
数据库里的数据是这样的,月份肯定是从1扩展显示到12,只是这个扩展能不能动态搞,还是说必须写死?
每个月份下需要扩展出来周数,例如2月份如果是28天,那么我要扩展出来1 2 3 4,否则就是到5,这也是需要动态判断处理和扩展的
交叉部分是需要自己按照需求写表达式计算的,不是简单的直接取数就完了
所以这就是三个问题了
小灰灰1 发表于 2020-7-27 14:06
数据库里的数据是这样的,月份肯定是从1扩展显示到12,只是这个扩展能不能动态搞,还是说必须写死?
每个 ...
就是说您这里的月浮动是根据实际要求来浮动出多少月多少月 下面的周同样是根据月来浮动实际的周对吧
xxxl 发表于 2020-7-27 14:38
就是说您这里的月浮动是根据实际要求来浮动出多少月多少月 下面的周同样是根据月来浮动实际的周对吧 ...
不是,月是固定的,就是12个月
周是按照年份下各个月的周数,比如有的2月份是28天,有的是29天,对应就分别是4周和5周
小灰灰1 发表于 2020-7-27 14:49
不是,月是固定的,就是12个月
周是按照年份下各个月的周数,比如有的2月份是28天,有的是29天,对应就分 ...
这样做动态的浮动不好做 但是如果是单纯的取到周数是可以用WOFM(D) WOFY(D)来做的
xxxl 发表于 2020-7-27 15:29
这样做动态的浮动不好做 但是如果是单纯的取到周数是可以用WOFM(D) WOFY(D)来做的 ...
现在需求要求是这样的,有没有变相实现的方法或者思路呀?
xxxl 发表于 2020-7-27 15:58
只有考虑再数据库表中再加一个有关周的数据了
这个加也不好加的呀,年份不固定,周数也不固定的呀,主要牵扯到2月份的周数
这个搞不了的话,下面的交叉判断有思路搞么?
小灰灰1 发表于 2020-7-27 16:23
这个加也不好加的呀,年份不固定,周数也不固定的呀,主要牵扯到2月份的周数
这个搞不了的话,下面的交叉 ...
交叉浮动这一块是需要做表达式的计算弄过滤条件这种的可以试试
xxxl 发表于 2020-7-27 16:51
交叉浮动这一块是需要做表达式的计算弄过滤条件这种的可以试试
这个需求也没那么简单的哦,他需要根据检修日期和周期单位来进行算,比如第一次检修周期是 1月1号,如果周期单位是月,那么每月的第一周标出,如果检修周期是日,那么每周都标出。
这种按照ABI的逻辑能搞的了么?


