Создать сумму вычисляемых строк в Microsoft Reporting Services

StackOverflow https://stackoverflow.com/questions/636573

  •  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 в этом поле.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top