请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Eden.Sun Wyn认证
超级版主   /  发表于:2025-6-27 14:27  /   查看:34  /  回复:0
本帖最后由 Eden.Sun 于 2025-7-1 11:09 编辑

今天我们介绍在通过系统日志排查报表内嵌数据集的SQL问题。
报表查询数据的就是把数据集中书写的SQL语句发送给数据库执行,然后把执行结果返回到报表。所以我们可以通过调整日志级别的方式看到发送给数据库的SQL语句,然后进行调整。

1. Wyn系统日志
通过报表日志的方式查看SQL内容,需要调整Wyn系统的日志级别,然后创建数据集时可以在日志中看到具体的SQL内容。具体操作步骤如下:
1.1 调整日志级别
默认的日志级别是"Information",需要在系统后台调整日志级别为"Verbose",然后保存重启服务:


1.2 数据集设计
调整日志级别之后,就可以在报表中创建内嵌数据集,这是我们创建报表的SQL,用到了两个报表参数:
  1. select * from 订单 where 订单编号 in {@订单编号} and 支付方式 = {@支付方式}
复制代码


1.3 报表设计
使用上一步创建的数据集设计报表:

1.4 预览报表
设计完成之后预览查看报表,如果报错,就可以进一步排查:

1.5 查看日志
内嵌数据集报错之后,可以在Wyn的安装目录下 /logs/server 目录下,找到当前的日志文件,然后查看内容:


1.6 内容分析
在日志中,可以看到数据集中的SQL的实际内容如下:
  1. select * from 订单 where 订单编号 in System.Object[] and 支付方式 = 支付宝
复制代码

从日志内容我们可以看到两个问题:
① 第一个是多值参数(订单编号)期望的效果是 订单编号 in ("订单编号1", "订单编号2", ......)
② 第二个参数是单值字符串参数,期望的效果是  支付方式="支付宝"

1.7 问题修改
知道SQL的问题,我们就可以进一步的修改。
① 多值参数问题,在报表中多值参数是一个数组,数据库不能识别数组,所以我们可以通过Join表达式进行处理而且要给每个值都加上单引号:('{Join(@订单编号, "','")}')
② 单值参数是字符串类型,参数值已经获取到了,只需要加上引号:'{@支付方式}'
所以修改后的内嵌数据集SQL语句为:

报表预览效果:

日志中的SQL:select * from 订单 where 订单编号 in ('D06116','D06117','D06118','D06119','D06120','D06121','D06122') and 支付方式 = '微信'


附件是演示demo,需要的小伙伴可以下载体验。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部