我熟悉lookup
,对我来说,我看到(但可能是错误的)等同于inner join
。
我想知道left join
,right join
和full outer join
的等效内容。
感谢。
答案 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的行。