找回密码
 立即注册

QQ登录

只需一步,快速开始

MatrixTian 讲师达人认证 悬赏达人认证

高级会员

141

主题

211

帖子

1378

积分

高级会员

积分
1378

微信认证勋章讲师达人元老葡萄悬赏达人

MatrixTian 讲师达人认证 悬赏达人认证
高级会员   /  发表于:2020-4-28 16:46  /   查看:2556  /  回复:0
本帖最后由 James.Lv 于 2023-1-5 19:08 编辑

在某些ERP当中,数据的存储是按照账套存储的,每年一个账套,对应一个数据库,这样在查询报表时,Sql语句就需要动态的从相应的数据中查询数据。
也有需要在同一张样式的报表中,通过不同的条件,分别查看同一样式,不同聚合维度的数据等场景。
类似以上的场景,就需要根据参数条件,动态的执行对应的Sql语句。

场景一:根据选择不同年度,从不同账套(即数据库)查询数据
例如:有三年的账套,分别对应三个数据库,2017、2018、2019,三个数据库查询的表结构一样。
根据选择年份,从不同数据库查询数据。
image.png190791014.png

1.创建报表:使用完整的sql语句创建数据集获取结构,验证数据。
image.png737695922.png
image.png899936523.png

2.添加报表参数:查询年度:cyear,可选数据手动添加3个年份;
image.png280038451.png
3.重新编辑数据集:使用动态Sql,通过参数值来控制数据库的名称。
动态数据集查询语句:="select * from  [" & Parameters!cyear.Value & "].dbo.sales_订单",之后点击确定。
可以将改语句放到文本框表达式中,验证语句输出结果,将结果复制到数据库管理工具执行,验证SQL正确性。
image.png393757933.png

4.验证效果。
在参数中选择不同年份时,从不同的数据库查询sql。
选2017时,查询数据库【2017】中的sales_订单表数据。
image.png296504210.png
选2018时,查询数据库【2018】中的sales_订单表数据。
image.png995619201.png

场景二、不同的查询维度,执行不同的sql语句。
例如:查询周期参数值选择【天】时,查看每日明细;参数值为【月】时,查看每月汇总。

1.完整sql创建数据集获取结构,并绑定表格。
select 订购日期,运货费 from sales_订单
image.png952264404.png
image.png205413817.png

2.添加查询周期参数:每日、每月、每季度,并设置可选值。
image.png368983764.png

3.修改数据集,改为动态参数。
此处,根据不同的参数值,执行不同的sql语句,有两种实现方法:
函数1.IIF函数
数据集写法:
=IIF(Parameters!cxzq.Value="每日","select convert(varchar(10),订购日期,112) 订购日期,运货费 from sales_订单",IIF(Parameters!cxzq.Value="每月","select convert(varchar(2),month(订购日期)) + '月' as 订购日期,sum(运货费) 运货费 from sales_订单 group by month(订购日期) order by month(订购日期) "," select datename(quarter,订购日期) + '季度' as 订购日期,sum(运货费) 运货费 from sales_订单 group by datename(quarter,订购日期) order by datename(quarter,订购日期)"))
image.png894045104.png

函数2.Switch函数
数据集写法:
=Switch(Parameters!cxzq.Value="每日","select convert(varchar(10),订购日期,112) 订购日期,运货费 from sales_订单",Parameters!cxzq.Value="每月","select convert(varchar(2),month(订购日期)) + '月' as 订购日期,sum(运货费) 运货费 from sales_订单 group by month(订购日期) order by month(订购日期)  ",Parameters!cxzq.Value="每季","select datename(quarter,订购日期) + '季度' as 订购日期,sum(运货费) 运货费 from  sales_订单 group by datename(quarter,订购日期) order by datename(quarter,订购日期)")

image.png108613280.png

函数的意思类似,就是分别根据不同的参数值,决定返回的sql语句。

4.预览效果:选择不同参数值,查看报表。
每日:
image.png562131652.png

每月:
image.png212966918.png

每季:
image.png210549925.png


0 个回复

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