Reporting services 在SQL Reporting Services中,是否可以根据同一行中多个其他列的值从数据集中检索特定值?

Reporting services 在SQL Reporting Services中,是否可以根据同一行中多个其他列的值从数据集中检索特定值?,reporting-services,Reporting Services,在SQL Reporting Services中,是否可以根据同一行中多个其他列的值从数据集中检索特定值 因此,如果这是我的数据集: Id | Name | Number | Score 1 | "John" | 16 | 22 2 | "Jane" | 64 | 24 3 | "John" | 20 | 18 我希望有某种形式的where子句,这样我就可以检索所有的/where值,例如Name=='John'和

在SQL Reporting Services中,是否可以根据同一行中多个其他列的值从数据集中检索特定值

因此,如果这是我的数据集:

Id    | Name      | Number | Score
1     | "John"    | 16     | 22
2     | "Jane"    | 64     | 24
3     | "John"    | 20     | 18
我希望有某种形式的where子句,这样我就可以检索所有的/where值,例如
Name=='John'
Number==16
。然后返回
22


我尝试过LookUnder,但这只会比较另一列的值。我需要比较两者。

如果基于数据集创建新的Tablix,则可以根据以下表达式添加列:

Iif(Fields!Name.Value = "John" & Fields!Number.Value = Parameters!Number.Value, Fields!Score, 0)
当Name列的值为“John”且数字与前面提到的隐藏参数匹配时,这将返回Score列的值,如果不匹配,则返回0。您还可以将其与行上的可见性表达式相结合,如下所示:

Iif(Fields!Name.Value = "John" & Fields!Number.Value = Parameters!Number.Value, false, true)
这将隐藏与所需值不匹配的行。如果合适的话,您也可以很容易地将Name值作为参数传入


或者,如果确实要过滤数据集本身,可以在数据集属性过滤器选项卡上指定这些表达式,而不是在Tablix级别—这取决于您是否需要在报表中的其他位置重复使用数据集。

实际上,查找函数的工作方式是使用表达式进行比较。因此,如果我正确理解您的问题,您可以这样做:


=Lookup(Fields!Name.Value+“-”+CStr(Fields.Number.Value)、Fields!Name.Value+“-”+CStr(Fields.Number.Value)、Fields!Score.Value、“Dataset2”)

您的“WHERE”子句值是固定的,还是根据行中的其他值而变化?好问题。它们不会被修复。一个值是行中的另一个值(即“John”),而另一个值实际上是来自另一个数据集的值(但我可以通过一个隐藏参数来绕过它)。好的。那么你想回到这里干什么?它是单个值还是整行?对于非匹配项,您希望有什么行为?排除整行或返回特定的默认值?一个值就足够了,不需要默认值。请注意,
Lookup()
函数仅在SSRS 2008 R2及更高版本上可用。