数据集参数中的if条件执行顺序

image.png

这个if的执行顺序是否应该是:

先判断用户是否是管理员,不是的话再判断是否是教师,不是教师再判断是否是培训组,都不是这三个角色就执行最后一句and dept_hrbp ='"+fine_username+"'

但是我给一个用户设置了教师角色后,是先执行管理员的判断,再执行培训组的判断,教师的判断放在了最后,导致我设置的教师角色没效果。这是什么情况

image.png

image.png

有大佬知道什么原因吗

SELECT user_id,user_name,user_num,ud_user_id,ud_dept_id,dept_name,ud_pos_id,pos_name,user_mobile,user_type,user_entry_date,user_cardNo from hr_user LEFT JOIN hr_user_dept on user_id=ud_user_id left join hr_department on dept_id=ud_dept_id left join hr_position on pos_id=ud_pos_id where dept_id in  ( SELECT dept_id FROM [dbo].[v_dept] where 1=1  ${if(INARRAY("HRBP管理员",fine_role)>0,"" ,if(INARRAY("教师",fine_role)>0,"and '4ab45e9a-057d-4394-81f7-82ba40dfbe8a' in (dept_id,dept_id1,dept_id2,dept_id3,dept_id4,dept_id5,dept_id6,dept_id7)" ,if(INARRAY("培训组",fine_role)>0,"and dept_name like '%分公司%'" ," and dept_hrbp ='"+fine_username+"'")))} ${if(len(dept_id) == 0,"" ," and '" + dept_id + "' in (dept_id,dept_id1,dept_id2,dept_id3,dept_id4,dept_id5,dept_id6,dept_id7)")} ) and  user_status='在职' and  dept_name not like '%旧%'  and   (  user_name like '%${search}%'  or user_mobile like '%${search}%'  or dept_name like '%${search}%'  or pos_name like '%${search}%' ) ORDER BY user_num

这是数据集语句

image.png

FineReport 霜凡 发布于 2021-9-2 14:49 (编辑于 2021-9-3 10:35)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
霜凡Lv5中级互助
发布于2021-9-3 15:44

自己把自己坑了,实际上什么问题都没有,错误的数据显示和日志的sql都是另一个数据集

最佳回答
0
烟尘Lv6高级互助
发布于2021-9-2 15:03

执行顺序不会有问题的

确定角色名称是否是“教师”

  • 霜凡 霜凡(提问者) 我确定,直接复制的角色名,只是这个用户除了教师角色还有其他角色。这个语句会产生两个参数,一个账号参数,一个角色参数。我用账号参数预览数据集得到的结果和直接执行判断教师角色的语句的结果不同。
    2021-09-02 15:14 
最佳回答
0
陈阿大Lv5初级互助
发布于2021-9-2 15:04(编辑于 2021-9-2 15:08)

逻辑没问题image.png

看看是否是sql 写错了,问题应该出在这里

image.png

  • 霜凡 霜凡(提问者) 应该没有,我试过不用fine_username参数直接执行教师角色的过滤条件和三个角色都不是的过滤条件,对比了下用fine_username参数的结果,结果就是用了参数后得到的数据跟三个角色都不是的过滤条件结果相同,但实际我想要的是教师角色的过滤条件得到的数据。
    2021-09-02 15:27 
最佳回答
0
zsh331Lv8专家互助
发布于2021-9-2 23:24

日志简介-https://help.fanruan.com/finereport/doc-view-991.html

——报表开发完成后,挂载到决策平台目录下,用相关用户账号登录;预览报表后,从二个方向排查:

其一:直接在报表某个单元格输入公式:=$fine_role,查看角色参数返回的内容,是否符合预期;

其二:报表预览后,查阅详细运行日志,看最终执行的SQL脚本是否符合预期;

——————————————————

  • 霜凡 霜凡(提问者) 返回的参数里面的确是有教师这个角色,这是对的, 但是查看sql脚本的时候,它就是执行的最后一个过滤条件,教师角色的判断完全失效了。 这算什么情况,我传下sql和日志截图
    2021-09-03 10:28 
  • 3关注人数
  • 494浏览人数
  • 最后回答于:2021-9-3 15:44
    请选择关闭问题的原因
    确定 取消
    返回顶部