如何在ssrs的矩阵报告中实现这一点

时间:2013-03-29 07:18:38

标签: reporting-services

我正在使用SSRS矩阵控制开发报告。

以下是我正在使用的示例表

funmix

以下是我在SSRS中使用矩阵工具尝试实现的目标

Results

现在描述

报告需要记录类型A,B,C及其案例数量,按位置代码对其进行分组。第6行将包含从第4行和第5行(类型A和类型B)派生的计算值。

如屏幕截图所示,用于推导结果($ 44)的公式是使用公式

(Case Value of Type B * average of Type B) + (Case Value of Type C * average of Type C)
-------------------------------------------------------------------------------------
                           (Case Value of Type B + Case Value of Type C)

所以44美元的价值可以实现

(57 * 18) + (44 * 78) / (57 + 44)

有人请求指导我如何在ssrs中实现这一点。 我已经制定了结构但无法计算总价值。

1 个答案:

答案 0 :(得分:1)

这取决于你获得平均值的方式。这种情况是在您预先确定的情况下发生在幕后,还是基于您可以加入的其他表格进行?

如果全部都在数据集中,我会这样做:

  1. 确定既是数据又是平均值的数据集。我不确定你是来自SQL还是只是在Excel中这样做。我暂时会在SQL中伪装:

    declare @Avgs Table ( location int, type varchar(1), cs int, average int);
    
    insert into @Avgs values (1, 'A', 21, 10),(1, 'B', 57, 18),(1, 'C', 44, 78);
    
    Select top 10 *
    from @Avgs
    
  2. 您可能想要添加一个'计算列'或直接在SQL中进行数学计算,因为SSRS中的表达式编辑器通常可以用于一个函数或两个函数,但是当你有一个非常复杂的数学时我会发现SQL引擎更适合处理它。这也可以让以后更好地改变现状。

  3. 所以我会修改SQL:

    declare @Avgs Table ( location int, type varchar(1), cs int, average int);
    
    insert into @Avgs values (1, 'A', 21, 10),(1, 'B', 57, 18),(1, 'C', 44, 78);
    
    With a as 
         (
         select *, cs * average as compound
         from @Avgs
         )
     , b as 
         (
         Select 
             (max( case when type = 'B' then compound end) +    max( case when type = 'C' then compound end)) /
             (max( case when type = 'B' then cs end) + max( case when type = 'C' then cs end))  as CompoundMath
         from a
        )
    select *
    from a, b
    
  4. 这将是你在SSRS中的数据集,复合函数可以在'when'为逻辑之后(在...之后的情况下)在'then'结果之后进行更改。

  5. 只需添加一个新行,就可以将自定义表达式设置为名为“复合数学”的列。