我已经制作了一份销售报告,显示了销售人员,客户,然后显示去年的销售额,今年的销售额,今年的待定销售额,今年&#39失去了销售,然后在最后一列叫做#34;在游戏中#34;。 In Play公式应该是去年的销售额 - SUM(今年的销售额,今年还有待定,今年还有#)。如果公式的结果小于0,那么我希望它显示为0.
在客户端级别,我可以使用以下代码:= Iif(SUM(Fields!InPlay.Value)< 0,0,SUM(Fields!InPlay.Value))。我创建了一个计算字段来提供InPlay,其中包含以下内容:= Fields!LastSeasonRevenue.Value-Fields!CurrentSeasonContractedRevenue.Value-Fields!CurrentSeasonPendingRevenue.Value-Fields!CurrentSeasonLostBusiness.Value。
当我试图把它放到推销员甚至总计的总排中时,我的斗争就来了。我的数据的结构使得每个合约都有多行,因此计算字段显然是逐行计算的。当我在" In Play"中总结客户端的所有内容时,这似乎工作正常。专栏,但不会为总计工作。部分原因是因为我有Iif公式,但我无法找到更好的方法。
我已尝试过各种方法,以销售员和总计来计算总数,结果是#error或错误的结果。
我尝试添加图片,但stackoverflow不会让我。
编辑: 这是我的问题的文本表示,只是我列表中的推销员之一。
LastYearRev, ThisYearRev, Pending, Lost, InPlay
Client1 0,0,4972,0,0
Client2 0,16800,0,0,0
Client3 4800,0,0,0,4800
Client4 6375,0,0,0,6375
Client5 26754,0,0,0,26754
Client6 0,1200,0,0,0
Client7 5300,0,0,0,5300
总计43229,18000,4972,0,43229
在InPlay列和总行中,我希望报告显示为43,429,但公式适用于该行的方式总计为20,257。
这应该会为您提供我正在使用的数据:
CREATE TABLE #SampleData ([Salesman] Varchar(255),
Season varchar(255),
Company varchar(255),
Client varchar(255),
ContractNo int,
LastSeasonRevenue Decimal,
CurrentSeasonNewContractedRevenue Decimal,
CurrentSeasonContractedRevenue Decimal,
CurrentSeasonPendingRevenue Decimal,
CurrentSeasonLostBusiness Decimal,
BusinessClosedLastWeek Decimal)
;
INSERT INTO #SampleData (Salesman,Season,Company,Client,ContractNO,LastSeasonRevenue,CurrentSeasonNewContractedRevenue,CurrentSeasonContractedRevenue,CurrentSeasonPendingRevenue,CurrentSeasonLostBusiness,BusinessClosedLastWeek)
Values('Salesman1','2014-2015','Company5','Client6',1157,0,1200,1200,0,0,0),
('Salesman1','2014-2015','Company1','Client1',1267,0,0,0,4972,0,0),
('Salesman1','2013-2014','Company4','Client7',298,1600,0,0,0,0,0),
('Salesman1','2013-2014','Company4','Client7',298,3400,0,0,0,0,0),
('Salesman1','2013-2014','Company4','Client7',298,300,0,0,0,0,0),
('Salesman1','2013-2014','Company2','Client5',442,4653.75,0,0,0,0,0),
('Salesman1','2013-2014','Company9','Client3',491,4800,0,0,0,0,0),
('Salesman1','2013-2014','Company1','Client4',519,2975,0,0,0,0,0),
('Salesman1','2013-2014','Company1','Client4',519,680,0,0,0,0,0),
('Salesman1','2013-2014','Company1','Client5',674,22100,0,0,0,0,0),
('Salesman1','2013-2014','Company1','Client4',676,2720,0,0,0,0,0),
('Salesman1','2014-2015','Company1','Client2',868,0,16800,16800,0,0,0)
答案 0 :(得分:0)
Jared,我实际上会在SQL数据集本身处理这个问题并添加一个名为" InPlay"的计算列:
SELECT Client
, LastSeasonRevenue
, CurrentSeasonContractedRevenue
, CurrentSeasonPendingRevenue
, CurrentSeasonLostBusiness
, CASE WHEN LastSeasonRevenue - CurrentSeasonContractedRevenue
- CurrentSeasonPendingRevenue
- CurrentSeasonLostBusiness <0 THEN 0 ELSE
LastSeasonRevenue - CurrentSeasonContractedRevenue
- CurrentSeasonPendingRevenue
- CurrentSeasonLostBusiness
END InPlay
FROM #SampleData
虽然这个逻辑在ReportBuilder中是可行的,但最佳做法是推回这个计算,以便在报告的其他部分中引用它(同样,我认为SQL看起来比SSRS公式语法更好)。
如果您想在SSRS中执行此操作(或者由于某些原因需要使用共享数据集),则公式为:
=Sum(iif(Fields!LastSeasonRevenue.Value - Fields!CurrentSeasonContractedRevenue.Value - Fields!CurrentSeasonPendingRevenue.Value - Fields!CurrentSeasonLostBusiness.Value< 0 , 0, CDBL(Fields!LastSeasonRevenue.Value) - CDBL(Fields!CurrentSeasonContractedRevenue.Value) - CDBL(Fields!CurrentSeasonPendingRevenue.Value) - CDBL(Fields!CurrentSeasonLostBusiness.Value)))
应用程序截图:
原始等式中缺少的重要因素是在IIF()语句中的SUM()。在SSRS中,SUM()接受一个集合,并且个人评估该集合中的每个项目。所以在这个例子中,我们传递SUM()一系列IIF()语句,而不是将SUM()语句的返回传递给IIF()语句。