SSRS按百分比运行总计,仅基于每10个值显示

时间:2016-02-11 02:15:26

标签: reporting-services

在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

我试图使用具有不同记录集的解决方案,这就是我能看到的内容

Result Set

1 个答案:

答案 0 :(得分:0)

每当我在标记中发现这样的问题时,我会想到如果有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
)

对于第一行,它将通过35以确定是否必须显示3,然后通过5和6确定是否必须显示累计值,依此类推

我已经创建了另一个列作为示例,并使用了上面的表达式。它说如果函数Code.Visible函数返回true,则显示Textbox169(累积值列)否则显示Nothing

enter image description here

对于Running列,我使用了典型的运行值表达式:

=RunningValue(Fields!Value.Value,Sum,"DataSet11")

结果是这样的:

enter image description here

如果有帮助,请告诉我。