2010-05-06 13 views
8

En SSRS 2008 estoy intentando mantener una SUMA de SUM en un grupo usando un Código personalizado. La razón es que tengo una tabla de datos, agrupados y devolviendo SUM de los datos. Tengo un filtro en el grupo para eliminar las líneas donde las sumas grupales son cero. Todo funciona, excepto que tengo problemas con los totales del grupo: debe sumar los totales del grupo visible, pero en su lugar se suma el conjunto de datos completo. Hay muchísimos artículos sobre cómo solucionar esto, generalmente usando código personalizado. He hecho las funciones y variables personalizadas para mantener un contador:Restablecimiento de la variable de código SSRS en la página nueva

Public Dim GroupMedTotal as Integer 
Public Dim GrandMedTotal as Integer 

Public Function CalcMedTotal(ThisValue as Integer) as Integer 
    GroupMedTotal = GroupMedTotal + ThisValue 
    GrandMedTotal = GrandMedTotal + ThisValue 
    Return ThisValue 
End Function 

Public Function ReturnMedSubtotal() as Integer 
    Dim ThisValue as Integer = GroupMedTotal 
    GroupMedTotal = 0 
    Return ThisValue 
End Function 

Básicamente CalcMedTotal se alimenta una suma de un grupo, y mantiene un total acumulado de esa suma. Luego, en la línea total del grupo, produzco ReturnMedSubtotal, que se supone que me da el total acumulado y lo reinicio para el siguiente grupo. En realidad, funciona de maravilla, EXCEPTO: restablece el valor de GroupMedTotal en cada salto de página. No tengo los saltos de página explícitamente establecidos, es solo la ruptura natural en el visor de SSRS. Y si exporto los resultados a Excel todo funciona y se ve correctamente.

Si imprimo Code.GroupMedTotal en cada fila de grupo, veo que cuenta correctamente, y luego si un grupo abarca varias páginas en la página siguiente GroupMedTotal se restablece y comienza a contar nuevamente desde cero.

¿Alguna ayuda en lo que está pasando o cómo evitar esto? ¡Gracias!

+0

Tengo el mismo problema. Buena ol 'Microsoft en eso otra vez. –

Respuesta

19

Finalmente encontré la solución yo mismo. Aquí es decir, añadir compartido a la declaración de variables:

Public Shared Dim GroupMedTotal as Integer 
Public Shared Dim GrandMedTotal as Integer 
+3

Esto debe marcarse como una solución porque funciona. Por alguna razón, los dlls a los que se hace referencia se restablecen incluso cuando se usan variables y métodos compartidos/estáticos en cada página nueva. Sin embargo, los bloques de código en línea no lo son. Entonces, si nada más, puede configurar variables compartidas para guardar los totales página por página y dejar que todas las demás funciones permanezcan en sus dlls. –

+0

Esta respuesta no es correcta. Intenta ejecutar el informe y luego exporta a PDF. Verás que GrandMedTotal en realidad está duplicado. – ScottRFrost

+0

Esto está mal. La variable compartida aumentará con cada llamada. –

-2

No sé dónde usas esto. pero en su caso, si yo fuera usted, sólo tiene que utilizar la expresión sencilla de comprobar la visibilidad de SUMA

por ejemplo, que haría uso de Right Click On Sum Box \ Select Expression \ then use IIF(SUM <> 0, sum. "")

Se trabajó en cada reinicio dónde y costumbre, en su caso de tener una La región y su código se restablecerán en cada región, por lo que se verá con serios isses si no cambia su camino.

5

Simplemente cambiar las variables a compartir no va a funcionar. Si los configura para que sean compartidos, se DUPLICARÁN cuando exporten a PDF/XLS/etc (porque simplemente continuaron agregando a la var existente). Tienes que hacer algo como esto:

Public Shared Dim grandTotal as Decimal 
Public Shared Dim costCenterTotal as Decimal 
Public Shared Dim workerTotal as Decimal 

Public Shared Function Initialize() 
    grandTotal = 0 
    costCenterTotal = 0 
    workerTotal = 0 
End Function 

Public Function AddTotal(ByVal b AS Decimal) AS Decimal 
    grandTotal = grandTotal + b 
    costCenterTotal = costCenterTotal + b 
    workerTotal = workerTotal + b 
    return b 
End Function 

Public Function GetWorkerTotal() 
    Dim ret as Decimal = workerTotal 
    workerTotal = 0 
    return ret 
End Function 

Public Function GetCostCenterTotal() 
    Dim ret as Decimal = costCenterTotal 
    costCenterTotal = 0 
    return ret 
End Function 

Public Function GetGrandTotal() 
    Dim ret as Decimal = grandTotal 
    grandTotal= 0 
    return ret 
End Function 
+0

Éste trabajó para mí. Solo el uso de Compartido causa el problema de duplicar discutido anteriormente. Tenga en cuenta el uso de Shared en la función Initialize para que solo se llame una vez. –

+1

¿Cómo y cuándo llama a Initialize() ?? –

+0

Llamé a initialize en la función GetGrandTotal(), eso lo hizo por mí – asmgx

Cuestiones relacionadas