2015-11-12 1 views
2

Je travaille sur un rapport matriciel où nous devons calculer l'écart cumulatif entre la dernière année et l'année en cours pour chaque catégorie de groupe. Maintenant, j'ai généré le total général pour l'année en cours et l'année précédente pour chaque catégorie. Maintenant, j'ai besoin d'utiliser cette valeur totale dans un autre calcul. Comment puis-je atteindre cet objectif? Toute aide serait appréciée.SSRS Colonnes dynamiques grand total requis pour être copié et utiliser le même dans un autre calcul

Par exemple: Pour l'année 2014 pour la catégorie A Grand total est de 1000, et grand total pour le même en 2015 est de 1200

Ici, je dois les valeurs 1000 et 1200 pour le calcul plus loin. Existe-t-il une méthode ou une expression pour parvenir à la même chose?

There are n number of categories for an year, so each category would be having a Grand Total for each year. 

sample data

  Search   Website 
Month  2014  2015 2014 2015 
January 376  306 489 649 
February 295  167 439 534 
March  245  206 425 609 
April  425  241 465 597 
May  313  269 524 845 
June  346  285 497 686 
July  372  243 509 636 
August 410  349 523 753 
September 409  296 442 642 
October 288  267 475 446 
November 169  315 
December 101  347 
GTotal 3,749  2,629 5,450 6,397 

% vs 2014   -30%   17% 
% YTD vs 2014  -26%   38% 

Ici, le grand total pour l'année 2014 est = 3749 et même pour 2015 = 2629. Et la formule pour calculer la valeur de la variance est: (2629-3749)/3749

+0

Pouvez-vous mettre à jour votre question pour fournir un exemple de votre sortie actuelle (image via imgur?) Et ce que vous souhaitez faire (par exemple dans une nouvelle colonne déterminer "valeur 2015 - valeur 2014") – Jonnus

+0

édité le commentaire, mais foiré avec le formatage. –

Répondre

1

Ooh, qui était une question délicate, mais il est faisable. Je suppose que vous faites cela dans une matrice, et l'ensemble de données ressemble à quelque chose comme ça

Month  Year Category Value 
--------- ----- ----------- ----- 
January 2014 Search  376 
January 2015 Search  306 
February 2014 Search  295 
February 2015 Search  167 
March  2014 Search  245 
March  2015 Search  206 
January 2015 Website  489 

Il est alors assez simple pour obtenir la mise en page dont vous avez besoin pour afficher les valeurs par mois par an. Chaque mois est son propre groupe de lignes. Chaque 'Année' est son propre groupe de colonnes, et les années sont elles-mêmes contenues dans un groupe parent sur 'Type'. La somme des valeurs est calculée en utilisant l'expression

=Sum(Fields!Val.Value) 

Ajout d'une nouvelle rangée du bas de la matrice permet la même expression à utiliser pour calculer le total pour le groupe.

Par défaut, comme les colonnes sont regroupées par année, seules les valeurs de cette année sont incluses dans la portée. Comme nous voulons comparer les années, nous devons préserver ce total pour être évalué par la colonne suivante. Nous pouvons le faire en utilisant le code derrière le rapport.

Clic droit sur le corps du rapport, sélectionnez Propriétés du rapport, puis choisissez Code et entrez les informations suivantes

Dim CurrentSubtractor AS Integer 
Dim CurrentDivisor AS Integer 

Public Function GetPrevValueForSubtraction(NewSubtractor AS Integer) AS Integer 
    Dim ReturnValue AS Integer = NewSubtractor 

    if CurrentSubtractor = 0 then 
     CurrentSubtractor = NewSubtractor 
    else 
     ReturnValue = CurrentSubtractor 
     CurrentSubtractor = 0 
    end if 

    return ReturnValue 
end function 

Public Function GetPrevValueForDivisor(NewDivisor AS Integer) AS Integer 
    Dim ReturnValue AS Integer = NewDivisor 

    if CurrentDivisor = 0 then 
     CurrentDivisor = NewDivisor 
    else 
     ReturnValue = CurrentDivisor 
     CurrentDivisor = 0 
    end if 

    return ReturnValue 
end function 

Ignorer le fait qu'il est la même fonction à deux reprises pour le moment - nous reviendrons à plus tard . Le code préserve efficacement la nouvelle valeur passée en tant que courant, ou réinitialise la valeur actuelle à zéro. Le rapport rend traite chaque cellule une à la fois, et exécute le code pour chaque cellule à son tour, de manière efficace si vous venez d'avoir le résultat de ce code dans la cellule qu'il retournerait

0, value, 0, value, 0 value… 

Enfin, pour apporter tout cela ensemble, nous devons nous assurer que le calcul nous utiliserons comme suit

For every alternative column 
    Take the Sum of this column 
    Minus the previous column value 
    And divide the result by the previous column value 

Notez la façon dont nous devons utiliser la valeur de la colonne précédente deux fois. Si nous utilisions le même extrait de code pour les deux, il l'évaluerait deux fois pour chaque cellule, en réinitialisant la valeur à zéro pour l'une des fois où nous devions l'exécuter.D'où l'exigence de deux fonctions ci-dessus

Définir le code de votre pourcentage vs 2014 à la cellule à

=iif(Fields!Year.Value = MAX(Fields!Year.Value, "DataSet10"), 
    (sum(Fields!Val.Value) - 
     Code.GetPrevValueForSubtraction(sum(Fields!Val.Value)))/
     Code.GetPrevValueForDivisor(sum(Fields!Val.Value)), 
    "") 

Cela se traduira par une matrice disposé comme ce

enter image description here

Et quand courir, il ressemblera à ceci

enter image description here

J'espère que c'est ce dont vous avez besoin. Si ce n'est pas le cas, ou si vous avez besoin d'aide, s'il vous plaît faites le moi savoir et j'essaierai d'aider davantage.

+0

Merci beaucoup Jonnus. Cela a fonctionné pour moi. Appréciez votre temps et effort pour donner cette réponse, c'était vraiment utile car j'ai lutté pour obtenir une réponse pour la même chose depuis la semaine dernière. –