我如何绕过太阳(第一(...))不允许的限制是SSRS 2005

时间:2009-04-21 04:30:34

标签: sql-server reporting-services reportingservices-2005

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

上下文
我正在创建对帐报告。即。什么袜子我们有一个时期的开始,订购什么和我们最后有什么股票。

数据集返回类似

的内容
Type,Product,Customer,Stock at Start(SAS), Ordered Qty, Stock At End (SAE)
Export,1,1,100,5,90
Export,1,2,100,5,90
Domestic,2,1,200,10,150
Domestic,2,2,200,20,150
Domestic,2,3,200,30,150

我按类型分组,然后按产品列出并列出购买该产品的客户。 我想显示SAS,Ordered Qty和SAE的总数,但是如果我在SAS或SAE上做了总和,那么当产品1和2分别为100和200时,我得到的值分别为200和600。 / p>

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

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

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

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

  • 我们将其出售给(出口,国内)的市场
  • 我们有多少库存,
  • 制作了多少,
  • 卖了多少,
  • 我们卖的是谁,
  • 我们剩下多少钱。

复杂因素是我们将它卖给谁。不管怎样,它本来就很容易。但包括它意味着其他顶线数字(开始时的库存和最后的库存)与销售的产品无关,而不是特定的产品。

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

呸!我的挂钩在哪里?!

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

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

e.g。想象一下一系列值,你想要Min和Max返回,但你也希望返回初始数据(没有数据摘要)。

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

Windowing

Ranking

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

写一个子查询。

  

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

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

我怀疑你的问题是你写了一个查询错误的结果,或者你设计的表格很差。如果不知道你想要做什么,我不能告诉你如何解决它,但它有一个糟糕的“气味”。