在SSRS报告中,我有一个具有百分比值的字段,我从中计算累计运行总计。在第三个字段中,用户只想查看最接近每十个值的值,并清除其他所有值。 因此在示例中我们将8显示为累积值,因为它最接近10.对于第二个值,我们选择20,因为它是最接近20的值。对于第三个值,我们取32,最接近30.然后40,52,62 ,73,79,91
% cumulative val showed values
3 3
5 8 8
6 14
3 17
2 19
1 20 20
4 24
3 27
5 32 32
7 39
1 40 40
2 42
2 44
3 47
5 52 52
2 54
3 57
1 58
4 62 62
3 65
1 66
7 73 73
2 75
1 76
3 79 79
4 83
2 85
3 88
1 89
2 91 91
我试图使用具有不同记录集的解决方案,这就是我能看到的内容
答案 0 :(得分:0)
每当我在reporting-services标记中发现这样的问题时,我会想到如果有NEXT()
函数之类的用户可能会遇到的可能性,与PREVIOUS()
支持的函数相反。
好的,我发泄了。
我重新创建了您在问题中发布的表格,并在数据集中添加了行号。
转到Report
菜单/ Report Properties
/ Code
标签,在文本区域输入以下代码。
Dim running_current as Integer = 0
Dim flag as Integer = 0
Public Function Visible(ByVal a as Integer,ByVal b as Integer) As String
running_current = running_current + a
Dim running_next as Integer = running_current + b
Dim a_f as Integer = CInt(Math.ceiling(running_current / 10.0)) * 10
Dim b_f as Integer = CInt(Math.ceiling(running_next / 10.0)) * 10
if flag = 1 Then
flag = 0
return "true"
End If
If a_f = b_f Then
return "false"
Else
IF Closest(running_current,running_next) = "false" Then
flag = 1
return "false"
End If
return "true"
End if
End Function
Public Function Closest(ByVal a as Integer, ByVal b as Integer) as String
Dim target as Integer = CInt(Math.ceiling(a / 10.0)) * 10
IF Math.abs(a-target)>= Math.abs(b-target) Then
return "false"
Else
return "true"
End IF
End Function
此函数根据行号将每个值与下一个值进行比较,以确定是否必须显示。如果必须显示该值,则返回true
,否则返回false
字符串。
您必须根据行号将值传递给函数及其旁边的函数。 lookup()
函数加行号给出了与NEXT()
函数类似的行为。
=IIf(
Code.Visible(Fields!Value.Value,
Lookup(Fields!RowNumber.Value+1,Fields!RowNumber.Value,Fields!Value.Value,"DataSet11")),
ReportItems!Textbox169.Value,
Nothing
)
对于第一行,它将通过3
和5
以确定是否必须显示3
,然后通过5和6确定是否必须显示累计值,依此类推
我已经创建了另一个列作为示例,并使用了上面的表达式。它说如果函数Code.Visible函数返回true,则显示Textbox169(累积值列)否则显示Nothing
。
对于Running列,我使用了典型的运行值表达式:
=RunningValue(Fields!Value.Value,Sum,"DataSet11")
结果是这样的:
如果有帮助,请告诉我。