-
-
辰哥 管理员
发表于2018-11-8 16:19
楼主
在报表模板中,有一个sql数据源,这个sql数据源到底有什么作用呢?这就是我们今天要给大家介绍的内容。
什么是sql数据源
sql数据源使用规则
sql数据源如何使用
sql数据源的简单使用
新建SQL数据源
引用SQL结果中的字段
将报表参数传递给sql数据源
参数单选
层级维多选
通用维多选
将表元值传递给sql数据源
Sql数据源分页
Totalcount中的sql语句是为了求出总行数。

什么是sql数据源
所谓sql数据源,是提供了一个直接写sql语句的地方,并将该sql的查询结果作为BI报表的数据源。正是这样,所以用sql数据源能实现任意复杂的报表,且一张报表取多个库中的数据。
sql数据源使用规则
1. 支持select开头的sql语句
2. 支持调用存储过程,将该存储过程的返回结果集作为数据源
3. 在表格中不能对sql数据源的结果再次分组求和
知道了什么是sql数据源及其使用规则,那在报表设计过程中如何使用sql数据源?下面一起了解下:
sql数据源如何使用
sql数据源的简单使用
新建SQL数据源


在使用已定义的sql数据源之前,可测试是否通过:

引用SQL结果中的字段
rs1.字段名
分析表中引用sql字段时,可输入“代号.字段名”:

rs1.列字段
直接写“代号.1,代号.2……”:

将报表参数传递给sql数据源
参数单选
现分析表有一报表参数“行政区划”,分析表使用的sql数据源。

如何将报表参数传递给sql数据源呢?

用宏表达式,将维表的内容传递到sql数据源中。
层级维多选
现需求变更,“行政区划”需多选,那报表参数内容如何传递给sql数据源?
sql的where条件应该写成:<#=if(@xzqh="","1=1","("+asstr(@xzqh).split("\|").select(true,"E3 like'"+diminf("行政区划(卫生)",@,"$prefix")+"%'").join(" or")+")")#>
其中:@xzqh是报表参数,E3是“行政区划(卫生)”维表所对应的主题表字段。

通用维多选
若是维表是通用维,即维表格式如下:

且此时参数内容多选,那报表参数内容如何传递给sql数据源?
sql的where条件应该写成:
<#=if(@sp<>null,asstr(@sp).split("\|").select(true,"a.dl||'$'||a.xllike '"+@+"%'").join(" or "),"1=1") #>
数据源全部sql如下:
selectsp ,xse from fact_bbsj_sql sql,dim_bbsj_sp a
wheresql.sp=a.xl(+) and(<#=if(@sp<>null,asstr(@sp).split("\|").select(true,"a.dl||'$'||a.xllike '"+@+"%'").join(" or "),"1=1")#>)
如果你还想在分析表中将维字段的名称显示出来:
select a.dl,a.dl_mc spdl,a.xl,a.xl_mcspxl,sql.xse from fact_bbsj_sql sql,dim_bbsj_sp a
where sql.sp=a.xl(+) and(<#=if(@sp<>null,asstr(@sp).split("\|").select(true,"a.dl||'$'||a.xllike '"+@+"%'").join(" or "),"1=1")#>)
分析表设计如下:

分析表结果如下:

将表元值传递给sql数据源
“sql参数”中输入的表元代号,与sql数据源中的问号一一对应,表示分别用这些表元的值去替换sql数据源中的“?”。
如下图中,在计算的时候,将A2表元的值传递给sql数据源的where语句。
如下图中,在计算的时候,将A2表元的值传递给sql数据源的where语句。

Sql数据源分页
定义2个sql数据源,rs1为分析表数据,再
定义一个叫"totalcount"的sql数据源,表格属性中的"每页行数"就能起作用了
Totalcount中的sql语句是为了求出总行数。

