5

我遇到的问题是 SQL Server Reporting Services 不喜欢 Sum(First()) 表示法。它只允许 Sum() 或 First()。


我正在创建对帐报告的上下文。IE。我们在一个时期开始时有什么袜子,订购了什么以及我们在结束时有什么库存。

数据集返回类似

类型、产品、客户、起始库存 (SAS)、订购数量、结束库存 (SAE)
出口,1,1,100,5,90
出口,1,2,100,5,90
国内,2,1,200,10,150
国内,2,2,200,20,150
国内,2,3,200,30,150

我按类型分组,然后按产品分组并列出购买该产品的客户。我想显示 SAS、Ordered Qty 和 SAE 的总数,但如果我对 SAS 或 SAE 进行求和,则产品 1 和 2 的值分别为 200 和 600,而产品 1 和 2 应该分别为 100 和 200。

我以为我可以做一个 Sum(First()) 但 SSRS 抱怨我不能在聚合中包含聚合。

理想情况下,SSRS 需要一个 Sum(Distinct())

到目前为止的解决方案
1. 不要将“开始时的库存”和“结束时的库存”显示为总数的一部分。
2. 直接在报表中写一些代码来进行计算。试过这个 - 没有像我预期的那样工作。3. 编写程序集进行计算。(这个没试过)

编辑 - 问题澄清
问题源于这实际上是两个报告合并为一个(如我所见)。一份生产报告和一份销售报告。
该报告试图解决这些标准

  • 我们卖给的市场(出口,国内)
  • 我们有多少库存,
  • 生产了多少,
  • 卖了多少钱,
  • 我们把它卖给了谁,
  • 我们还剩下多少。

复杂的因素是我们把它卖给了谁。没有它,它会相对容易。但包括它意味着其他顶线数据(开始时的库存和结束时的库存)与销售的东西无关,除了特定的产品。

4

4 回答 4

5

我遇到了类似的问题,最终在查询中使用 ROW_NUMBER 为行值提供整数,然后使用 SUM(IIF(myRowNumber = 1, myValue, 0))。

当我开始工作并提供更多数据时,我会对其进行编辑,但我认为这可能足以让您入门。我也很好奇阿道夫的解决方案。

于 2009-04-21T10:29:18.917 回答
1

呸! 我的钉子呢?!

您是否考虑过为此在 SQL 中使用窗口/排名函数?

这使您可以在不丢失细节的情况下聚合数据

例如,想象一下对于一系列值,您希望返回最小值和最大值,但您也希望返回初始数据(没有数据摘要)。

Group Value Min Max
A      3    2    9
A      7    2    9
A      9    2    9
A      2    2    9
B      5    5    7
B      7    5    7
C etc..

语法看起来很奇怪,但它只是

AggregateFunctionYouWant  OVER (WhatYouWantItGroupedBy, WhatYouWantItOrderedBy) as AggVal

开窗

排行

于 2009-04-21T06:48:21.163 回答
1

你的数据集有点奇怪,但我想我明白你要去哪里。

尝试按以下顺序返回数据集:类型、产品、SAS、SAE、客户、订购数量

我要做的是创建一个带有表格控件的报告。我会将类型、产品和客户设置为三个单独的组。我会将 sas 和 sae 数据放在与产品相同的组中,并将数量放在客户组中。这应该类似于我相信你想要的。你的 sas 和 sae 应该在 first()

于 2009-04-27T03:27:29.477 回答
0

写一个子查询。

理想情况下,SSRS 需要一个 Sum(Distinct())

重新编写查询以正确执行此操作。

我怀疑您的问题是您编写的查询会得到错误的结果,或者您的表设计不佳。在不了解您正在尝试做什么的情况下,我无法告诉您如何解决它,但它有一种不好的“气味”。

于 2009-04-21T06:21:07.313 回答