微软BI SSRS渐悟之使用Lookup应对SQL能力不足

浏览: 5519

引言

相信大家都曾经或多或少的遇到过类似这样的问题:

1、在一个报表中,统计年度、月度值,但是我只会写简单的T-SQL;

2、在一个报表中同时显示两个数据库或两个数据库实例中的数据,或者不同数据源下的两份数据。没办法在查询层面关联。


我们通常会尽可能在在数据层面聚合这些数据,但是当条件不足或者是不具备这样的SQL能力时该怎么办?

关键知识点

函数lookup:使用 Lookup 可以从指定的数据集中为具有一对一关系的名称-值对检索对应的值。例如,对于表中的 ID 字段,可以使用 Lookup 从未与数据区域绑定的数据集中检索对应的“名称”字段。示例:lookup(本数据集关键字段,目标数据集关键字段,目标数据集显示字段,"目标数据集名称"),返回目标数据集显示字段。

函数lookupset:使用 LookupSet 可以从指定的数据集中为具有一对多关系的名称-值对检索一组值。例如,对于表中的客户标识符,可以使用 LookupSet 从未与数据区域绑定的数据集中检索该客户的所有关联电话号码。lookup(本数据集关键字段,目标数据集关键字段,目标数据集显示字段,"目标数据集名称")。示例:用法同lookup,不同之处在于它返回一组结果,近似于数组。

函数Join:返回通过联接数组中包含的多个子字符串而创建的字符串。示例:Join(结果集,"分隔符"),类似于我们C#中的string.join。

Lookup案例

step1、构造两个数据集

with tmp 
as --尺寸数据集
(
select '2014/11/1' as tdate, 1234 as c20, 2234 as c40, 3234 as c45
union all
select '2014/11/2', 2234, 3234, 4234
)
select * from tmp
;

with tmp
as --次数数据集
(
select '2014/11/1' as tdate, 111 as ttime
union all
select '2014/11/2', 222
)
select * from tmp
;

step2、报表中添加数据源、数据集


step3、插入表格、添加DS_SIZE数据

因为DS_SIZE字段要多,当然也可以先添加DS_TIME数据集。区别在于这个表格的DataSetName是那个数据集,相当于默认数据集是那个。



setp4、使用lookup函数获取次数,这儿是重点

=Lookup(Fields!tdate.Value,Fields!tdate.Value,Fields!ttime.Value, "DS_TIME")


setp5、预览效果如下


LookupSet案例

lookupset和lookup其实很像,就是返回结果不同。我们仍参考上面的例子,对数据集略作调整。


setp1、构造两个数据集

with tmp 
as --尺寸数据集
(
select '2014/11/1' as tdate, 1234 as c20, 2234 as c40, 3234 as c45
union all
select '2014/11/2', 2234, 3234, 4234
)
select * from tmp
;

with tmp
as --姓名数据集
(
select '2014/11/1' as tdate, '张三' as tname
union all
select '2014/11/1', '李四'
union all
select '2014/11/2', '王五'
union all
select '2014/11/1', '陈六'
union all
select '2014/11/2', '周七'
union all
select '2014/11/2', '吴八'
)
select * from tmp
;

step2、报表中添加数据源、数据集


step3、插入表格、添加DS_SIZE数据



step4、使用lookupset函数获取同天多人姓名,这儿是重点

=Join(LookupSet(Fields!tdate.Value,Fields!tdate.Value,
Fields!tname.Value, "DS_NAME"),",")


setp5、预览效果如下


总结

当然,这儿的示例可能不那么恰如其分。本文主要是讲述下在SQL聚合能力不足,或者数据源原因无法在SQL层面聚合数据时,该如何将数据关联起来呈现。

推荐 0
本文由 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

前几天刚刚用了LookUp用于排序,超级好用
悟

回复 choc

厉害

要回复文章请先登录注册