ssrs查找内部连接但是如何左连接?

时间:2016-03-30 08:18:59

标签: join reporting-services left-join ssrs-2012 outer-join

我熟悉lookup,对我来说,我看到(但可能是错误的)等同于inner join

我想知道left joinright joinfull outer join的等效内容。

感谢。

2 个答案:

答案 0 :(得分:3)

对我来说,Lookup看起来不像是一个内连接,而是等同于

str1 <- c("1,287.85", "234.13")

连接需要两个表,并根据一些on-clause匹配两个表上的行。连接类型规定了如何处理任何一方的不匹配行。

查找和上面的SQL等价,至少在概念上循环通过一个表,并尝试在每个行中查找其他表中的匹配行。结果更像是左连接而不是内连接,因为不匹配的行将保留在结果中。但是,由于Lookup期望在右侧找到一行,并且连接会将结果集扩展到右侧的所有匹配行,因此存在差异。因此,查找通常用于从关系的多方向查找,例如从上面的订单到客户。此外,联接表将参与聚合。

LookupSet function,它会查找多个值,但与连接不同,它不会展开结果集,而是返回一个将嵌套的值数组。在行中。

因此,总结一下,我不认为查找是内部联接的等价物,并且SSRS中没有任何其他类型的联接存在等价物。

话虽如此,您通常会在报表的数据源中执行连接,假设这是一个SQL数据源。

答案 1 :(得分:3)

R. Schreurs的解释是正确的,lookup函数最像左联接,但是如果编辑数据源不是一个选项,可以使用解决方法。

在大多数情况下,模拟右连接的最简单方法是反转数据集,即使用DataSet2作为表格的数据集和DataSet1中的Lookup值。< / p>

要模拟内部联接,您可以使用lookup来控制数据的哪些行可见。使用“行可见性”属性中的表达式,可以隐藏两个数据集中不存在ID的行:

=IIF(IsNothing(Lookup(Fields!ID_1.Value, Fields!ID_2.Value, Fields!ID_2.Value, "DataSet2")), True, False)

对于像完全外部联接一样的表格,我不知道在不使用第三个数据集的情况下可以使用的解决方案。如果DataSet0具有来自DataSet1和DataSet2的所有可能ID,则可以将其用于来自其他数据集的lookup值。然后,您可以使用与上面类似的表达式来隐藏在DataSet1或DataSet2中找不到ID的行。