gpt4 book ai didi

sql-server-2008 - SSRS 使用基于多个过程的条件求和?

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

我正在创建一个报告并尝试从多个表中获取一个组合值并且无法弄清楚并且开始怀疑它是否可能?

我有 2 个存储过程返回具有不同时间范围的相同数据。一个存储过程是根据过去 12 个月的金额返回数据。另一个程序是返回 13 个月以上的所有金额的总和。我有一个总和,以获得 1 年收集的总数和 1 年以上的总数。我想把这些总数结合起来得到所有年份的总数。我面临的问题是总数按分类和名称分组。

我有以下示例数据:

Date        Class  Name  Earned Count  Earned Amount  Collected Count  Collected Amount
Sept-11 Red Jack 5 10.50 2 54.20
Sept-11 Red Bill 2 22.75 4 120.58
Sept-11 Blue Jill 9 43.23 25 443.32
Sept-11 Green Bob 84 45846.33 62 4843.22
Sept-11 Green Pam 2 13.55 1 23.23
Sept-11 Green Tammy 32 2332.22 443 33232.33

Aug-11 Red Jack 1 23.50 2 33.20
Aug-11 Red Bill 2 52.75 4 323.22
Aug-11 Blue Jill 3 43.23 23 33.32
Aug-11 Green Bob 4 46.33 22 653.22
Aug-11 Green Pam 5 13.55 1 46.23
Aug-11 Green Tammy 6 1132.22 111 89.33

总计如下所示:
Date      Class  Name  Earned Count  Earned Amount  Collected Count  Collected Amount   
Sub-Total Red Jack 33 ##.## ## ##.##
Bill ## ##.## ## ##.##
Blue Jill ## ##.## ## ##.##
Green Bob ## ##.## ## ##.##
Pam ## ##.## ## ##.##
Tammy ## ##.## ## ##.##

Year+ Red Jack 4344 ##.## ## ##.##
Bill ## ##.## ## ##.##
Blue Jill ## ##.## ## ##.##
Green Bob ## ##.## ## ##.##
Pam ## ##.## ## ##.##
Tammy ## ##.## ## ##.##

因此,我想将每个类(class)和名称的 Year+ total 与 year total 结合起来。例如,我想找到 Jack's Earned Count 一年和一年+,所以它应该是 33 + 4344,但实际上我想为所有列出的值的每个人都这样做。

在 SSRS 中,我按类(class)和姓名分组,并且有一年+的总数,我试图从一年中添加总和,但它只得到每个人的总数,而不仅仅是一个人和他们的类(class)。我对一个字段使用以下表达式:
=Fields!EarnedCount.Value + Sum(Fields!EarnedCount.Value, "MyEmployeeRpt")

有没有办法根据一个值取一个总和,比如只在 Name = Bill 和 Class = Red 时得到 Sum。我面临的另一个问题是我不知道我可能有多少个名字或类。有什么想法吗?谢谢您的帮助!

最佳答案

SSRS 2008 R2

首先,如果您使用的是 SSRS 2008 R2,LOOKUP功能非常值得一看:

Lookup(source_expression, destination_expression, result_expression, dataset)

SSRS 2008

如果你是SSRS 2008,有两种解决方案:

重写 SQL 查询

可以从存储过程中提取 SQL,然后加入查询,从而将时间范围扩展到跨越两者并更新报告以过滤到所需的时间范围,这意味着您可以使用整个数据集的总数来获得所需的结果。

由于存储过程的性质,这可能是不可能的。

使用子报告

此解决方案要求您制作一个子报告,您传递类、名称和获得的计数,然后子报告返回组合值。
  • 使用类别、名称和获得计数的参数创建一个新的子报表
  • 使用 SQL 添加新的 tablix 以返回 Year+
  • 更新 SQL 以过滤参数(由于它是存储过程,这可能是不可能的)示例:
    ...
    Where [Class] = @Class and [Name] = @Name

    或在 Tablix 上使用过滤器,按类和名称过滤,它们在其中相等的相应参数
  • 删除 Tablix 的除一个字段外的所有列和行,添加以下表达式返回 Earned Count 的 Sum of Earned Count + 参数传递的值
    =Sum(Fields!EarnedCount.Value)+Parameters!EarnedCount.Value
  • 将报告大小调整为与 tablix
  • 相同的大小
  • 删除边框格式(否则以双边框结束)
  • 返回到原始报告,将子报告添加为 tablix 中的字段,您希望在其中查看组合的总传递参数 Class、Name 和 EarnedCount
  • 为子报表添加边框
  • 关于sql-server-2008 - SSRS 使用基于多个过程的条件求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531203/

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