Создать сумму вычисляемых строк в Microsoft Reporting Services
-
10-07-2019 - |
Вопрос
Кажется, все должно быть просто, но я пока ничего не могу найти. В службах Reporting Services у меня есть таблица, содержащая до 6 строк, все из которых имеют рассчитанные значения и динамическую видимость. Я хотел бы суммировать эти строки. В основном у меня есть несколько пунктов счета-фактуры, и я хочу сделать общее количество. Я не могу ничего изменить на стороне БД, поскольку мои хранимые процедуры используются в других местах системы. Каждая строка также извлекает данные из разных наборов данных, поэтому я не могу сделать сумму набора данных. Могу ли я сложить все строки в нижнем колонтитуле таблицы? Аналогично суммированию количества строк в Excel? Кажется очень излишним помещать мое выражение видимости из каждой строки в строку нижнего колонтитула, чтобы вычислить сумму.
Решение
Несколько способов добиться этого:
1. Выполните вычисления в SQL и суммируйте это поле следующим образом:
SELECT Quantity, Amount, Quantity * Amount As TotalAmount FROM MyTable
Затем просто используйте поле TotalAmount в строке сведений и суммируйте его в нижнем колонтитуле.
2. Создайте второй набор данных, который рассчитывает итоговую сумму для вас, и используйте его в нижнем колонтитуле вместо суммы:
=Sum(Fields!TotalAmount.Value, "MyTotalingDataset")
3. Сделайте это с помощью пользовательского кода. Щелкните правой кнопкой мыши пространство «Макет», выберите «Свойства» и перейдите на вкладку «Код». Введите следующий код:
Public Dim TotalAmount As Double = 0
Public Function CalculateRowTotal(ThisValue As Double, ThatValue As Double) As Double
TotalAmount = TotalAmount + (ThisValue * ThatValue)
Return ThisValue * ThatValue
End Function
В поле «Подробности» укажите в столбце, где вы суммируете поле, следующее выражение:
=Code.CalculateRowTotal(Fields!Quantity.Value, Fields!Amount.Value)
Это выполнит приведенный выше код и сделает ваш расчет плюс подсчитает общую сумму в процессе. Р>
В нижнем колонтитуле отображается общая сумма, поэтому в столбце есть выражение:
=Code.TotalAmount
И все готово. Просто будьте осторожны, потому что вам не гарантирован порядок, в котором будет выполняться ваш код, и для некоторых отчетов он будет сначала выполнять нижний колонтитул (например, если вы используете сумму строк в полосе детализации), что приведет к полному нулю поскольку расчеты детальных полос еще не проводились, но в общем случае это должно сработать. Р>
Другие советы
Вы можете изменить базу данных следующим образом.
Знаете ли вы, что вы можете получить агрегированные результаты в SQL без агрегирования данных?
Просто добавьте дополнительный столбец в набор данных следующим образом: , SUM (OrderQty) OVER (PARTITION BY SalesOrderID) AS 'Итого'
В приведенном выше примере: OrderQty - это значение, которое вы хотите суммировать SalerOrderID является эквивалентом 'GROUP BY'
Вы можете использовать ту же технику с COUNT, AVG и т. д.
Больше информации здесь http://msdn.microsoft.com/en-us /library/ms189461(SQL.90).aspx р>
Если у вас возникли проблемы с порядком выполнения, добавьте текстовое поле под таблицей и отобразите TotalAmount в этом поле.