在SSRS Report Builder 3.0中,我有两个表,一个是产品列表(有利润),另一个是产品的已售出附件列表(带有个人利润)。
我正在制作一份报告,显示每件产品的销售情况,项目的利润,每次增加的利润以及总利润。
我正在使用此查询导入数据(为简单起见,省略了其他字段):
SELECT
Products.DealID AS DealID
,Profit
,AddonTypeType
,AddOnProfit
FROM
Products
LEFT OUTER JOIN productAddOns
ON Products.DealID = productAddOns.DealID
我的表格看起来像这样(请注意,我事先并不知道将调用额外的附加内容或可能有多少附加内容):
正在发生的事情是,如果一个产品有两个附加组件,那么它总共使用两次利润。在上面的屏幕截图中,第一列总计应为108.33 + 843.75= 952.08
,但它会在843.75
中再次添加并显示1795.83
。
总计的框只是使用
=Sum(CDbl(Fields!Profit.Value))
任何人都可以帮助解释为什么会发生这种情况以及如何正确计算吗?
答案 0 :(得分: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)
答案 1 :(得分: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/