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

Assigning NO DATA instead showing blank cells in ssrs 2008 - based on row visibility expression

我在 SSRS 2008 中遇到如下问题:

我有一个连接到查询的矩阵,比方说 Select * from Table。它正在返回,比方说 50 行数据。在我的矩阵中,只有一行。让我们说:

id   name    grade
[id] [name]  sum[grade]

矩阵在 Row Group 中按 'id' 和 'name' 分组。此行有一个行可见性表达式,如 =IIF(sum(Fields!grade.Value)>95,false,true)。假设对于这种情况,这个table显示没有数据,那么返回的50行数据的总分都低于95。因此,我在屏幕上只看到没有任何信息的列,例如:

id name grade

我想要的是写"No Data"而不是像:

id name grade
No Data

通常,当查询没有返回数据时,我会通过 Tablix Properties 并将 "No Data" 分配给 NoRowsMessage 属性 来完成。这不适用于这种情况,我不知道如何计算矩阵中显示的行号。任何帮助将不胜感激。

您可以通过在 tablix 的末尾和行组之外添加一行来完成此操作。

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

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

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

当所有行的等级都在 95 或以下时,将显示无数据行,但数据行将被隐藏。

UPDATE 根据OP的反馈进行更新。成绩列是求和表达式。

在这种情况下,使用 LookupSet 函数按 ID 获取成绩很有用。它们将 return 编入数组数据类型,因此我们需要自定义代码来对 ID 成绩求和。

转到 Report 菜单 / Report Properties...、select 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"))

Replace DataSetName by the actual name of yours.

您的矩阵应如下所示:

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

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

它会 return 当至少一行的等级 > 95 时。

当没有行的成绩大于 95 时。

如果有帮助请告诉我。