分配 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 时。
如果有帮助请告诉我。
我在 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 时。
如果有帮助请告诉我。