0

在 SSRS Report Builder 3.0 中,我有两个表,一个是产品列表(有利润),另一个是产品的已售附加组件列表(有他们的个人利润)。

我正在制作一份报告以显示每件售出的产品、商品的利润、每次添加的利润和总利润。

我正在使用此查询导入数据(为简单起见,省略了其他字段):

SELECT  
  Products.DealID AS DealID  
  ,Profit  
  ,AddonTypeType  
  ,AddOnProfit  
FROM  
  Products  
  LEFT OUTER JOIN productAddOns  
    ON Products.DealID = productAddOns.DealID

我的表看起来像这样(请注意,我事先不知道将调用哪些附加 Adds 或可能有多少个):

当前表

正在发生的事情是,如果一个产品有两个附加组件,那么它总共使用了两倍的利润。在上面的屏幕截图中,第一列总计应该是108.33 + 843.75= 952.08,但它是在843.75第二次添加并显示1795.83

总数的框只是使用

=Sum(CDbl(Fields!Profit.Value)) 

谁能帮助解释为什么会发生这种情况以及如何正确计算?

4

2 回答 2

0

已修改:这是一个动态查询示例,它可以容纳灵活数量的产品插件,并且不需要任何硬编码。

DECLARE @dynamicSqlPivot AS NVARCHAR(MAX)

DECLARE @columnName AS NVARCHAR(MAX)

SELECT @columnName = ISNULL(@columnName + ',',' ')
    + QUOTENAME(addonTypeType) 
    FROM (SELECT DISTINCT addonTypeType FROM Productaddons) AS prodadds



SET @dynamicSqlPivot = 
N'SELECT * 
FROM (
SELECT 

   P.DealID AS dealID
  ,p.Profit 
  ,a.AddonTypeType
  ,a.AddonProfit


FROM  
  Products p
  LEFT OUTER JOIN Productaddons a  
    ON P.dealID = A.DealID
    ) AS s


PIVOT (
SUM(s.addonProfit) 
FOR s.addonTypeType IN (' + @columnName + ')) AS pvttable'

EXEC (@dynamicsqlpivot)
于 2015-10-22T20:27:23.357 回答
0

我最终做的(至少在我找到更好的解决方案之前)是只查询dealID的产品并从中创建一个参数。在表中,我使用该参数执行 MultiLookup 和自定义代码以添加 MultiLookup 对象中的所有项目。

=Code.SumLookup( MultiLookup( Parameters!DealNumbers.value, Fields!DealID.Value, Fields!FrontEndGross.Value, "CompleteDeals" ) )

在这里找到了一个求和的例子:http: //salvoz.com/blog/2013/05/27/sum-result-of-ssrs-lookupset-function/

于 2015-10-23T14:46:50.783 回答