-
-
小灰灰1 数据达人Lv4
发表于2020-7-27 13:41
悬赏1
已解决
报表需求是这样的,我现在只做出来了前面的明细数据扩展
问题在于下面几个地方的实现:
1、一年12个月份的扩展,在abi里是一个个都写出来还是说可以有表达式动态扩展出来?
2、每个月的周数是不一样的,尤其是2月份,这个怎么搞动态判断处理呀?
3、交叉部分的数据,是各种和前面数据的对比判断,这样复杂逻辑的可以在单元格直接搞么?
27个回答
小灰灰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 |
注意 |
| 该函数仅为内存计算函数,不能用于数据库计算,函数参数中不能有 主题表字段 |
=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 于 2020-7-28 15:34 编辑
GRID1.D5 这里就取不到值了,所以case when的执行本身结果就不对了---这个问题和右侧自动设置的数据类型有关,我再看下
小灰灰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的写法了,但是实际计算出来的结果不大对,我得缕下逻辑再。。。
小灰灰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、月份和周数的扩展,这个需要在数据库表中增加辅助物理表
然后写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 于 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","")))
因为单纯表元取出来的结果不对,所以里面用的了各种截取,导致表达式比较复杂
感谢楼主分享!


