2009-03-11 2 views
3

Кажется, что это должно быть просто, но я пока ничего не могу найти. В Reporting Services у меня есть таблица с 6 строками, каждая из которых имеет рассчитанные значения и динамическую видимость. Я хотел бы суммировать эти строки. В основном у меня есть несколько элементов счета и вы хотите сделать общее. Я не могу ничего изменить на стороне БД, так как мои хранимые процедуры используются в другом месте в системе. Каждая строка также извлекает данные из другого набора данных, поэтому я не могу сделать сумму набора данных. Можно ли суммировать все строки с нижним колонтитулом таблицы? Аналогично суммированию нескольких строк в Excel? Кажется очень излишним, чтобы вывести выражение видимости из каждой строки в строку нижнего колонтитула, чтобы вычислить сумму.Создать сумму вычисляемых строк в службах Microsoft Reporting Services

ответ

13

несколько способов, которыми Вы могли бы добиться этого:

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 

На Detail полосы, сделать столбец, где вы просуммировать поле есть это выражение:

=Code.CalculateRowTotal(Fields!Quantity.Value, Fields!Amount.Value) 

Это будет выполнять код, указанным выше, и сделать ваш расчет плюс перевычислении общая сумма в этом процессе.

В нижнем колонтитуле группа отображает общую сумму, так что столбец имеет выражение:

=Code.TotalAmount 

И вы сделали. Просто будьте осторожны, потому что вам не гарантирован порядок, в котором будет выполняться ваш код, а для некоторых отчетов он будет выполнять нижний колонтитул первым (например, если вы используете Sum строк в группе Detail), что сделало бы полный ноль поскольку расчеты в деталях еще не произошли, но для общего случая это должно работать.

+0

Благодарим вас за то, что сообщили мне, что мне не гарантирован порядок выполнения кода, что имеет большее значение для того, почему сложнее суммировать строки. – kd7iwp

3

Вы можете изменить db следующим образом.

Знаете ли вы, что вы можете получить агрегированные результаты в SQL без агрегирование данных?

Просто добавьте дополнительный столбец в наборе данных следующим образом: , SUM (OrderQty) OVER (PARTITION BY SalesOrderID) AS 'Total'

В приведенном выше примере: OrderQty значение, которое вы хотите подвести SalerOrderID является эквивалентом 'GROUP BY'

Вы можете использовать ту же технику, с COUNT, AVG и так далее

Больше информации здесь http://msdn.microsoft.com/en-us/library/ms189461(SQL.90).aspx

-2

Если у вас возникли проблемы с исполнением, добавьте текстовое поле ниже таблицы и отобразите TotalAmount в этом поле.

+1

Не могли бы вы быть более конкретными. -1 для абсолютной неопределенности – cjds

Смежные вопросы