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 

Моя таблица выглядит следующим образом (обратите внимание, что я не знаю заранее, что будет называться дополнительным Прибавляет или сколько там может быть):

Current Table

что происходит в том, что если продукт имеет два дополнения, она использует прибыль в два раза в общей сложности. На приведенном выше снимке экрана первое значение столбца должно быть 108.33 + 843.75= 952.08, но оно добавляется в 843.75 во второй раз и показывает 1795.83.

Ящик для общей просто использует

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

Может кто-нибудь объяснить, почему это происходит и как заставить его правильно рассчитать?

ответ

0

MODIFIED: Ниже приведен пример динамического запроса, который может вместить гибкое количество дополнительных дополнений и не требует жесткого кодирования.

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) 
+0

Я согласен, что это то, что происходит, но я не думаю, что я могу использовать ваше решение. Продукты могут иметь теоретически бесконечное количество добавлений и будут варьироваться от поставщика по поставщикам, поэтому у меня нет твердого списка, который я могу использовать таким образом. Кроме того, я собираю больше информации, чем просто продукт и прибыль. – user2603293

+0

В этой ситуации не будет работать стержень. Я получаю постоянно меняющийся список столбцов, которые нужно будет отображать, и не будет выбирать их, поскольку я не знаю имена раньше времени. Кроме того, мне нужно больше информации о каждом продукте, чем просто имя и общая прибыль. – user2603293

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/