Как вызвать функцию в итоговой строке табликсной группы?

У меня есть отчет, который возвращает около 200+ строк, и в одном из столбцов я планировал использовать функцию, которая должна вычислять общее количество заданного типа (т.е. сколько мармеладок в инвентаре). Есть ли способ выполнить SQL или вызвать функцию или хранимую процедуру внутри определенной ячейки/текстового поля, чтобы я мог выполнить эту функцию только для текущего свойства столбца группы?

Однократное выполнение этой функции занимает около 3 секунд. Однако, если я использую его в хранимой процедуре, используемой для тела отчета, хранимая процедура занимает около 3 минут, потому что она выполняет функцию для каждой записи в определенной таблице базы данных (более 27000 записей).


person clockwiseq    schedule 20.01.2013    source источник
comment
Очень сложно представить ваш контекст, можете ли вы привести пример запроса, иллюстрирующий вашу проблему? Звучит как простой оператор CASE в запросе? В качестве альтернативы: пробовали ли вы использовать какие-либо выражения SSRS? ?   -  person Jeroen    schedule 20.01.2013
comment
Могу ли я выполнить SQL-запрос внутри выражения? Я использовал пару выражений, но только для вывода значений параметров или полей набора данных.   -  person clockwiseq    schedule 20.01.2013
comment
Вы уже читали страницу MSDN, на которую я ссылался? В нем подробно объясняется, для чего нужны выражения и что с ними можно делать.   -  person Jeroen    schedule 20.01.2013
comment
Только что посмотрел. Думаю, я мог бы использовать пользовательское кодирование для решения этой проблемы.   -  person clockwiseq    schedule 20.01.2013


Ответы (1)


Скалярная функция в теле вашего набора данных должна работать нормально. Это было бы намного проще, чем тратить время на создание функции в SSRS или в другом случае, поскольку SQL под капотом сделает всю работу и, вероятно, также быстрее вернет данные. Если вам не нужно связывать два разных набора данных, вам, вероятно, придется использовать пользовательское выражение. Я склонен делать большую часть своей математики в наборе данных, когда это возможно. Чем больше выражений вы используете в службах SSRS, тем медленнее становятся ваши отчеты.

Если я создам простую базу данных, простую таблицу и скалярную функцию (например, простую):

use test-- database I created for concepts

create table Person ( id int identity, person varchar(64), orders int );

insert into Person values ('Brett',10),('Brett',20),('John',10)
GO

create function dbo.tester ( @intputint int )

returns int

as 

begin

declare @return int 


select @return = @intputint * 10

return @return

end
GO

Я должен иметь возможность иметь столбец, использующий эту скалярную функцию, просто отлично, когда я только что сделал это в SQL Server 2008:

select *, dbo.tester(orders) as OrdersTimesTen
from Person
person djangojazz    schedule 20.01.2013