单元格爆死循环,这个业务我该怎么写

有一个报表, D2如果有数据则直接展示,如果没有数据,则显示前一天的D5数据,  而D5数据则是根据当天的D2+D3-D4计算得出.

我在D2写的公式是:

   if($$$==$startDate,if(isnull(shiwuID)||shiwuID<=1,0,shiwu),   if(isnull(shiwuID)||shiwuID<=1,D5[;D1:-1],shiwu))

大概意思是:判断是否是第一天,如果是则有值则显示值没值则显示零, 如果不是第一天,则有值则显示值,额米有值则显示前一天的D5数据

但是运行的时候直接报错

2021/5/142021/5/152021/5/16
实物库存1008070
生产计划000
销售计划:20100
计划库存807070

3BC03239-BF16-4304-BC7E-5092C774A8AE.png

--------------------------------------------------

因为数据不好发,所以重新写了一个demo ,下面就是模板和数据  用的fineReport8

image.png

模板和数据.zip

FineReport 用户y3543176 发布于 2021-5-14 10:40 (编辑于 2021-5-14 16:37)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
shirokoLv6资深互助
发布于2021-5-14 10:43(编辑于 2021-5-14 17:05)

你逻辑上就是死了。。D2的来源里有D5  ,  D5的来源里有D2

WorkBook26.cpt

改成前三个的公式绕过

最佳回答
0
snrtuemcLv8专家互助
发布于2021-5-14 10:43(编辑于 2021-5-14 10:44)

~~~~~~

最佳回答
0
InfiniteFutureLv4见习互助
发布于2021-5-14 10:59(编辑于 2021-5-14 11:01)

这样可以不,D5还是直接取单元格的值,D2用数据集.select函数按条件取数据源的值,这样就不存在交叉引用了

数据集函数你直接搜就能搜到,然后D2,if(数据集里当天D2不为空,则取当天,否则取前一天数据集里D2+D3+D4)

  • 用户y3543176 用户y3543176(提问者) 你这个在数据集里再根据条件取数据,该怎么操作?
    2021-05-14 16:40 
  • 用户y3543176 用户y3543176(提问者) 官网有例子吗
    2021-05-14 16:40 
  • InfiniteFuture InfiniteFuture 回复 用户y3543176(提问者) https://help.fanruan.com/finereport/doc-view-850.html数据集函数文档,然后就是.select(日期=D1&&求和!=null),这是我的一个思路,具体也不知道可不可以,你可以试试
    2021-05-17 11:50 
最佳回答
0
用户Q7421702Lv5见习互助
发布于2021-5-14 14:14

额外写个数据集,直接得出前一天的D5的值,然后直接根据单元格判断D2是否有值有值就D2无值就前一天的D5。

然后是否是第一天的可以直接在那个数据集里加进去,判断第一天就0或者null就可以

  • 用户y3543176 用户y3543176(提问者) 前一天的d5 也有可能是动态算出来的
    2021-05-14 16:39 
  • 星旅 星旅 回复 用户y3543176(提问者) 倒推一下,逻辑的话就是查找最近有直接D2的时间节点,然后汇总之后的D3和D4根据公式算出前一天的D5 select max(d2) d2, sum(D3) d3,sum(D4) d4,max(d2)+sum(D3)-sum(D4) d5 from qwe where date>=(select max(date) from qwe where D2 is not null) 这个是我自己建的一个小测试,图放在上面回答了
    2021-05-15 08:24 
  • 5关注人数
  • 538浏览人数
  • 最后回答于:2021-5-14 17:05
    请选择关闭问题的原因
    确定 取消
    返回顶部