gpt4 book ai didi

reporting-services - 需要复制 SSRS 动态列总计并在另一个计算中使用相同的总计

转载 作者:行者123 更新时间:2023-12-04 18:01:59 26 4
gpt4 key购买 nike

我正在处理一个矩阵报告,我们需要计算每个类别组去年和当年之间的年初至今差异。现在我已经为每个类别生成了当年和上一年的总计。现在我需要在另一个计算中使用这些总计值。我怎样才能做到这一点?任何帮助将不胜感激。

例如:2014 年类别 A 的总计为 1000,2015 年的总计为 1200

这里我需要值 1000 和 1200 以进行进一步计算。有没有一种方法或表达式可以达到同样的目的?

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%

此处 2014 年的总计 =3749,2015 年的总计 =2629。计算方差值的公式为:(2629-3749)/3749

最佳答案

哦,这是一个棘手的问题,但它是可行的。我假设您在矩阵中执行此操作,并且数据集看起来像这样

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

获得显示每年每月值所需的布局非常简单。每个“月”都是它自己的行组。每个“年”都是它自己的列组,并且这些年本身包含在“类型”的父组中。使用表达式计算值的总和

=Sum(Fields!Val.Value)

在矩阵底部添加新行允许使用相同的表达式来计算组的总数。

现在默认情况下,由于列按年份分组,因此只有那一年的值在范围内。由于我们想要跨年进行比较,因此我们需要保留此总数以供下一栏评估。我们可以使用报告背后的代码来做到这一点。

右键单击报表主体,选择报表属性,然后选择代码,然后输入以下内容

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

暂时忽略同一个函数两次的事实——我们稍后会回过头来。该代码有效地将传递给它的新值保留为当前值,或者将当前值重置为零。当报告呈现时,它一次处理每个单元格,并依次运行每个单元格的代码,如果您只是在单元格中获得此代码的结果,那么它会返回非常有效

0, value, 0, value, 0 value…

最后,为了将所有这些放在一起,我们需要确保我们将使用的计算如下

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

请注意我们需要如何使用前一列值两次。如果我们对两者使用相同的代码片段,它会为每个单元格计算两次,在我们需要运行它的其中一次将值重置为零。因此需要以上两个功能

将您的百分比与 2014 年的代码设置为单元格

=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)),
"")

这将导致矩阵布局如下

enter image description here

运行起来是这样的

enter image description here

希望这就是您所需要的。如果没有,或者如果您需要进一步的帮助,请告诉我,我会尽力提供进一步的帮助。

关于reporting-services - 需要复制 SSRS 动态列总计并在另一个计算中使用相同的总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33670332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com