分配NO DATA而不是在ssrs 2008中显示空白单元格 - 基于行可见性表达式

时间:2016-04-11 12:06:14

标签: reporting-services ssrs-2008 ssrs-2008-r2

我在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属性。这不适用于这种情况,我无法弄清楚如何计算矩阵中显示的行号。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以通过添加行添加Tablix的结尾和行组外部来执行此操作。

enter image description here

创建行后,在行的第一个单元格中键入No Data

enter image description here

选择No Data行并转到Row Visibility属性并设置此表达式:

=IIF(
Sum(IIF(Fields!Grade.Value>95,1,0))>0,True,False
)

当所有行的等级为95或更低时,将显示无数据行,但数据行将被隐藏。

enter image description here enter image description here

更新根据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替换为您的实际名称。

您的矩阵应如下所示:

enter image description here

对于No Data行可见性属性,请使用以下表达式:

=IIF(Code.GetHiddenFlag()=1,True,False)

当至少一行具有Grade>时,它将返回此值95。

enter image description here

当没有等级大于95的行时。

enter image description here

如果有帮助,请告诉我。