#reporting-services
#службы отчетов
Вопрос:
В моем наборе данных в настоящее время 12 строк данных. Каждый представляет данные за месяц. Я хотел бы иметь разницу в столбце между строками, причем строки должны быть предпоследними, т.Е. Данными за последний месяц и за предыдущий месяц.
Это могло бы быть просто, если бы я работал с tablix, но это не так. Мне нужны эти значения для текстового поля.
У кого-нибудь есть идеи по этому поводу?
Ответ №1:
Я надеюсь, что вы используете SSRS 2008R2:
R2 представил функцию поиска, которая идеально подходит для этого сценария.
=Lookup( Fields!ProductUID.Value ,Fields!ProductID.Value,Fields!Price.Value,"PriceDataSet")
Функция поиска, описанная выше, оценит первый параметр («Поля!ProductUID.Value») в текущем наборе данных, затем найдите соответствующее значение в поле, указанном во втором параметре («Поля!ProductID.Value») в наборе данных, указанном в четвертом параметре. Затем значение третьего параметра вычисляется в этой строке набора данных и возвращается.
Немного запутанный, но очень полезный.
В вашем случае вы можете использовать это в текстовом поле с вычисляемым статическим числом:
=Lookup(
Month(DateAdd(DateInterval.Month, -1, GetDate())),
Fields!MonthID.Value,
Fields!Name.Value,
"DataSet1")
Это должно вычислить число за прошлый месяц, затем найдите совпадение в DataSet1.
Комментарии:
1. как насчет определения области поиска для группы? Возможно ли это?
2. Как насчет более ранних версий SSRS? Как бы вы добились такой же функциональности? Пользовательский код?
Ответ №2:
В этом примере у меня есть табликс с кодом состояния и именем, как показано ниже. введите описание изображения здесь
Предположим, вы хотите отобразить имя состояния CA, напишите выражение как —
=Lookup(
"CA" ,
Fields!StateCode.Value,
Fields!StateName.Value,
"ReportData"
)
Это вернет ‘California’ в текстовое поле
Ответ №3:
Я наткнулся на этот пост, пытаясь решить аналогичную проблему, но со столбцами двойного типа данных. Не уверен, почему, но SSRS не хотел возвращать мою первую строку, используя ПОИСК в сочетании с ROW_NUMBER в SQL (если кто-то может решить это, тем лучше). Вместо этого я использовал сумму (IIF). Надеюсь, это полезно для кого-то еще.
=Sum(IIF(Fields!RowNum.Value=1,CDBL(Fields!MyNumericColumn.Value),CDBL(0)))
Примечание: Если SSRS жалуется на типы данных, просто приведите обе части IIF к желаемому типу данных.