SSRS 2008: использование StDevP из нескольких полей/объединение нескольких полей в целом

Я хотел бы рассчитать стандартное отклонение по двум полям из одного и того же набора данных.

пример:
MyFields1 = 10, 10
MyFields2 = 20

То, что я хочу сейчас, это стандартное отклонение для (10,10,20), ожидаемый результат 4,7

В SSRS я хотел бы иметь что-то вроде этого:
=StDevP(Fields!MyField1.Value + Fields!MyField2.Value)

К сожалению, это невозможно, так как (Fields!MyField1.Value + Fields!MyField2.Value) возвращает одно значение, а не список значений. Нет ли способа объединить два поля из одного и того же набора данных в какой-то временный набор данных?

Единственные решения, которые у меня есть:

  1. Чтобы создать новый набор данных, содержащий все значения из обоих полей. Но это очень раздражает, потому что мне нужно около двадцати из них, и у меня есть шесть параметров отчета, которые должны фильтровать каждый запрос. => Вероятно, он становится очень медленным и раздражающим в обслуживании.

  2. Напишите формулу от руки. Но я еще не знаю как. StDevP для меня не так тривиален. Вот как я сделал это с помощью Avg, что математически проще:
    =(SUM(Fields!MyField1.Value)+SUM(Fields!MyField2.Value))/2
    найдено здесь: http://social.msdn.microsoft.com/Forums/is/sqlreportingservices/thread/7ff43716-2529-4240-a84d-42ada929020e

Кстати. Я знаю, что странно делать такой расчет, но это то, что хочет мой заказчик, и я должен как-то это реализовать.

Спасибо за любую помощь.


person SoftwareAsAClient    schedule 07.02.2013    source источник


Ответы (1)


CTDevP — это стандартное отклонение. Такое выражение мне подходит =StDevP(Fields!MyField1.Value + Fields!MyField2.Value), но это отклонение от одного значения (Fields!MyField1.Value + Fields!MyField2.Value) которое всегда равно 0. вы можете посмотреть здесь формулу: стандартное отклонение (вики)

Я считаю, что вам нужно вычислить это для какой-то группы (или полного набора данных), для этого вам нужно установить в CTDevP вашу область:

=StDevP(Fields!MyField1.Value + Fields!MyField2.Value, "MyDataSet1")
person Roman Badiornyi    schedule 08.02.2013
comment
Спасибо за Ваш ответ. Я не понимал, что (Fields!MyField1.Value + Fields!MyField2.Value) — это одно значение. Я надеялся получить все значения из обоих полей в каком-то временном наборе данных. Я немного изменил свой вопрос, он был немного запутанным. - person SoftwareAsAClient; 11.02.2013
comment
Я полагаю, что вы не можете сделать такую ​​​​комбинацию наборов данных. Единственный способ - использовать UNION ALL на уровне SQL или реализовать свою собственную формулу с помощью пользовательского кода. - person Roman Badiornyi; 11.02.2013
comment
Я сделал это с помощью UNION ALL в хранимой процедуре. Пока это работает, я немного беспокоюсь о производительности, так как запрос имеет много условий (из параметров ssrs) и внутренних функций (для разделения многозначных параметров). Я также пробовал это с пользовательским кодом, но единственное решение, которое я нашел для передачи всех значений из поля в функцию пользовательского кода, проходит через скрытый многозначный параметр. Это ужасный хак, но если производительность станет проблемой, я тоже могу попробовать. Спасибо за вашу помощь. - person SoftwareAsAClient; 11.02.2013