SSRS, используя сумму на основе условия из нескольких процедур? - PullRequest
3 голосов
/ 23 сентября 2011

Я создаю отчет и пытаюсь получить сумму, объединяющую значения из нескольких таблиц, и не могу понять это, и начинаю задумываться, возможно ли это вообще?

У меня есть 2 хранимые процедуры, возвращающие одни и те же данные с разными временными рамками.Одна хранимая процедура возвращает данные, основанные на суммах за последние 12 месяцев.Другая процедура возвращает сумму всех сумм за 13+ месяцев.У меня есть сумма как для получения общей суммы за 1 год, так и для общей суммы за 1 год +.Я хочу объединить эти итоги, чтобы получить итоги за все годы.Проблема, с которой я сталкиваюсь, заключается в том, что итоги сгруппированы по классификации и имени.

У меня есть следующие данные примера:

Date        Class  Name  Earned Count  Earned Amount  Collected Count  Collected Amount
Sept-11     Red    Jack      5         10.50           2                54.20                  
Sept-11     Red    Bill      2         22.75           4                120.58
Sept-11     Blue   Jill      9         43.23           25               443.32  
Sept-11     Green  Bob       84        45846.33        62               4843.22
Sept-11     Green  Pam       2         13.55           1                23.23
Sept-11     Green  Tammy     32        2332.22         443              33232.33

Aug-11      Red    Jack      1         23.50           2                33.20                  
Aug-11      Red    Bill      2         52.75           4                323.22
Aug-11      Blue   Jill      3         43.23           23               33.32  
Aug-11      Green  Bob       4         46.33           22               653.22
Aug-11      Green  Pam       5         13.55           1                46.23
Aug-11      Green  Tammy     6         1132.22         111              89.33

Итоги выглядят следующим образом:

Date      Class  Name  Earned Count  Earned Amount  Collected Count  Collected Amount   
Sub-Total Red    Jack   33           ##.##          ##               ##.##      
                 Bill   ##           ##.##          ##               ##.## 
          Blue   Jill   ##           ##.##          ##               ##.## 
          Green  Bob    ##           ##.##          ##               ##.## 
                 Pam    ##           ##.##          ##               ##.## 
                 Tammy  ##           ##.##          ##               ##.##   

Year+     Red    Jack   4344         ##.##          ##               ##.##      
                 Bill   ##           ##.##          ##               ##.## 
          Blue   Jill   ##           ##.##          ##               ##.## 
          Green  Bob    ##           ##.##          ##               ##.## 
                 Pam    ##           ##.##          ##               ##.## 
                 Tammy  ##           ##.##          ##               ##.##    

Поэтому я хочу объединить год + итоговое значение в год для каждого класса и названия.Например, я хочу найти Заработанный счет Джека за год и год +, поэтому это будет 33 + 4344, за исключением того, что на самом деле я хочу сделать это для всех для всех перечисленных значений.

В SSRS я сгруппировалпо классу и имени, и у меня есть итоги за год +, и я пытаюсь добавить сумму за год, но она получает только общую сумму для всех, а не только для одного человека и его класса.Я использую следующее выражение для одного поля:

=Fields!EarnedCount.Value + Sum(Fields!EarnedCount.Value, "MyEmployeeRpt")

Есть ли способ взять сумму, основанную на значении, например, получить сумму только когда Name = Bill и Class = Red.Другая проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, сколько имен или классов у меня может быть.Какие-нибудь мысли?Спасибо за помощь!

1 Ответ

1 голос
/ 26 ноября 2012

SSRS 2008 R2

Во-первых, если вы используете SSRS 2008 R2, стоит обратить внимание на функцию LOOKUP :

Lookup(source_expression, destination_expression, result_expression, dataset)

SSRS 2008

Если вы являетесь SSRS 2008, есть два решения:

Переписать запрос SQL

SQL можно извлечь из хранимых процедур, а затемзапросы объединяются, расширяя временные рамки, чтобы охватить оба, и обновляя отчет для фильтрации до требуемых временных периодов, что означает, что вы можете использовать общее количество всего набора данных для достижения требуемого результата.

Это может быть невозможно из-зак природе хранимых процедур.

Использование подотчетов

Это решение требует от вас создания подотчета, в котором вы передаете класс, имя и заработанный счет, после чего подотчет возвращает объединенное значение.

  1. Создать новый подотчет с параметрами для класса, имени и заработанного количества
  2. Добавить новый табликс с SQL для возврата Год +
  3. Либо обновить SQL для фильтрации по параметрам (это может быть невозможно из-за того, что это хранимая процедура) Пример:

    ...
    Where [Class] = @Class and [Name] = @Name
    

    ИЛИ с использованием фильтров в Tablix, фильтрация по классу и имени, где они равны соответствующим параметрам

  4. Удалите все столбцы и строки таблицы, кроме одного поля, добавьте следующее выражение, чтобы получить значение суммы заработанного количества +, переданное параметром

    =Sum(Fields!EarnedCount.Value)+Parameters!EarnedCount.Value
    
  5. Измените размер отчета, чтобы он соответствовал размеру таблицы.
  6. Удалите форматирование границы (в противном случае добавьте двойную границу)
  7. Вернитесь к исходному отчету и добавьте вспомогательный отчет каквведите в таблицу, в которой вы хотите увидеть общие параметры прохождения Class, Name и EarnedCount
  8. Добавьте границу к подотчету
...