我在SSRS 2008中遇到如下问题:
我有一个连接到查询的矩阵,比方说Select * from Table
。它正在返回,让我们说50行数据。在我的矩阵中,只有一行。让我们说:
id name grade
[id] [name] sum[grade]
矩阵按' id'分组。和' name'在Row Group中。此行有一个行可见性表达式,如=IIF(sum(Fields!grade.Value)>95,false,true)
。假设对于这种情况,此表显示没有数据,所有返回的50行数据的总和低于95。因此,我只看到屏幕上没有任何信息的列,如:
id name grade
我想要的是写"没有数据"代替'像:
id name grade
No Data
通常,当没有从查询返回的数据时,我会通过Tablix属性并指定" No Data"到NoRowsMessage属性。这不适用于这种情况,我无法弄清楚如何计算矩阵中显示的行号。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以通过添加行添加Tablix的结尾和行组外部来执行此操作。
创建行后,在行的第一个单元格中键入No Data
。
选择No Data
行并转到Row Visibility
属性并设置此表达式:
=IIF(
Sum(IIF(Fields!Grade.Value>95,1,0))>0,True,False
)
当所有行的等级为95或更低时,将显示无数据行,但数据行将被隐藏。
更新根据OP的反馈进行更新。成绩列是总和表达式。
在这种情况下,使用LookupSet
函数按ID获取成绩很有用。它们将以数组数据类型返回,因此我们需要自定义代码来汇总ID等级。
转到Report
菜单/ Report Properties...
,选择Code
标签并粘贴以下代码。
Dim HiddenFlag as Integer = 0
Function CalculateHiddenFlag(ByVal items As Object()) As Integer
If items Is Nothing Then
Return HiddenFlag
End If
Dim sumItems As Decimal = New Decimal()
sumItems = 0
For Each item As Object In items
sumItems += Convert.ToDecimal(item)
Next
If (sumItems > 95 and HiddenFlag=0) Then
HiddenFlag = 1
End If
Return 0
End Function
Function GetHiddenFlag() As Integer
Return HiddenFlag
End Function
现在修改[Sum(Grade)]
单元格表达式并使用此表达式:
=Sum(Fields!Grade.Value)+
Code.CalculateHiddenFlag(
LookupSet(Fields!ID.Value,Fields!ID.Value,Fields!Grade.Value,"DataSet15"))
将
DataSetName
替换为您的实际名称。
您的矩阵应如下所示:
对于No Data
行可见性属性,请使用以下表达式:
=IIF(Code.GetHiddenFlag()=1,True,False)
当至少一行具有Grade>时,它将返回此值95。
当没有等级大于95的行时。
如果有帮助,请告诉我。