ssrs 查找类似于内部连接,但是左连接怎么样?
ssrs lookup like an inner join but how how about a left join?
我熟悉 lookup
,我认为(但可能是错误的)等同于 inner join
。
我想知道 left join
、right join
和 full outer join
的等价物。
谢谢。
对我来说,Lookup 看起来并不等同于内部联接,而是等同于
select
CustomerName = (select
Customer.Name
from
Customers
where
Orders.CustomerId = Customer.Id),
Orders.OrderDate
from
Orders
一个连接需要两个 tables 并根据一些 on-clause 匹配两个 tables 上的行。连接类型规定了如何处理两边不匹配的行。
Lookup 和上面的 SQL 等价物,循环,至少在概念上,通过一个 table 并尝试为每一行在另一个 table 中找到匹配的行。结果更像是左连接而不是内部连接,因为不匹配的行将保留在结果中。但是,存在差异,因为 Lookup 期望在右侧找到一行,而 join 会将结果集扩展到右侧的所有匹配行。因此,查找通常用于从关系的多边到单边查找,如上面的从订单到客户。此外,加入的 table 将参与聚合。
有一个 LookupSet function,它会查找多个值,但与连接不同的是,它不会扩展结果集,而是 return 一个值数组 'nested' 在行中。
所以,总而言之,我不认为查找等同于内部联接,并且在 SSRS 中不存在任何其他类型联接的等价物。
话虽如此,您通常会在报表的数据源中执行联接,假设这是一个 SQL 数据源。
R. Schreurs 的解释是正确的,lookup
函数的工作方式最像左联接,但如果无法编辑数据源,您可以使用一些变通方法。
大多数情况下模拟右连接的最简单方法是反转数据集,即使用 DataSet2 作为您的 table 的数据集,Lookup
来自 DataSet1 的值。
要模拟内部联接,您可以使用lookup
来控制哪些数据行可见。使用行可见性属性中的表达式,您可以隐藏两个数据集中不存在 ID 的行:
=IIF(IsNothing(Lookup(Fields!ID_1.Value, Fields!ID_2.Value, Fields!ID_2.Value, "DataSet2")), True, False)
对于像 完全外连接 一样工作的 table,我不知道有什么解决方案可以在不使用第三个数据集的情况下工作。如果 DataSet0 具有来自 DataSet1 和 DataSet2 的所有可能 ID,您可以将它用于 lookup
来自其他数据集的值。然后,您可以使用与上述类似的表达式来隐藏在 DataSet1 或 DataSet2 中找不到 ID 的行。
我熟悉 lookup
,我认为(但可能是错误的)等同于 inner join
。
我想知道 left join
、right join
和 full outer join
的等价物。
谢谢。
对我来说,Lookup 看起来并不等同于内部联接,而是等同于
select
CustomerName = (select
Customer.Name
from
Customers
where
Orders.CustomerId = Customer.Id),
Orders.OrderDate
from
Orders
一个连接需要两个 tables 并根据一些 on-clause 匹配两个 tables 上的行。连接类型规定了如何处理两边不匹配的行。
Lookup 和上面的 SQL 等价物,循环,至少在概念上,通过一个 table 并尝试为每一行在另一个 table 中找到匹配的行。结果更像是左连接而不是内部连接,因为不匹配的行将保留在结果中。但是,存在差异,因为 Lookup 期望在右侧找到一行,而 join 会将结果集扩展到右侧的所有匹配行。因此,查找通常用于从关系的多边到单边查找,如上面的从订单到客户。此外,加入的 table 将参与聚合。
有一个 LookupSet function,它会查找多个值,但与连接不同的是,它不会扩展结果集,而是 return 一个值数组 'nested' 在行中。
所以,总而言之,我不认为查找等同于内部联接,并且在 SSRS 中不存在任何其他类型联接的等价物。
话虽如此,您通常会在报表的数据源中执行联接,假设这是一个 SQL 数据源。
R. Schreurs 的解释是正确的,lookup
函数的工作方式最像左联接,但如果无法编辑数据源,您可以使用一些变通方法。
大多数情况下模拟右连接的最简单方法是反转数据集,即使用 DataSet2 作为您的 table 的数据集,Lookup
来自 DataSet1 的值。
要模拟内部联接,您可以使用lookup
来控制哪些数据行可见。使用行可见性属性中的表达式,您可以隐藏两个数据集中不存在 ID 的行:
=IIF(IsNothing(Lookup(Fields!ID_1.Value, Fields!ID_2.Value, Fields!ID_2.Value, "DataSet2")), True, False)
对于像 完全外连接 一样工作的 table,我不知道有什么解决方案可以在不使用第三个数据集的情况下工作。如果 DataSet0 具有来自 DataSet1 和 DataSet2 的所有可能 ID,您可以将它用于 lookup
来自其他数据集的值。然后,您可以使用与上述类似的表达式来隐藏在 DataSet1 或 DataSet2 中找不到 ID 的行。