Как я могу "указать агрегат набора данных" в этом выражении SSRS?

Мне нужно значение строки в моем отчете SSRS, которое рассчитывается на основе пары полей, которые уже используются в отчете. Я хочу, чтобы он отображался в текстовом поле с именем "textboxPercentageValue". В полупростом английском языке выражение / формула:

If the value of the "Week" field is "WK1", display the value of the Variance field divided by the value of the Price field; otherwise, just display the value from the Variance field.

В VB-скрипте gobbledygook выражение / формула, которую я добавил в свойство Value textboxPercentageValue:

=IIF((Fields!Week.Value="WK1"), Fields!Variance.Value / Fields!Price.Value, Fields!Variance.Value)

Тем не менее, когда я пытаюсь загрузить файл.rdl в службы отчетов SQL Server, я получаю:

" Выражение" Значение "для текстового поля" textboxPercentageValue "относится непосредственно к полю" Неделя "без указания агрегата набора данных. Когда отчет содержит несколько наборов данных, ссылки на поля вне области данных должны содержаться в функциях агрегата, которые задают область набора данных. (rsFieldReferenceAmbiguous) Получить интерактивную справку. Выражение "Значение" для текстового поля "textboxPercentageValue" относится непосредственно к полю "Дисперсия" без указания агрегата набора данных. Когда отчет содержит несколько наборов данных, ссылки на поля вне области данных должны содержаться в функциях агрегата. которые задают область набора данных. (rsFieldReferenceAmbiguous) Получить интерактивную справку Выражение "Значение" для текстового поля "textboxPercentageValue" относится непосредственно к полю "Цена" без указания агрегата набора данных. Когда отчет содержит несколько наборов данных, ссылки на поля находятся за пределами области данных. должны содержаться в агрегатных функциях, которые определяют область набора данных. (rs FieldReferenceAmbiguous) Получить интерактивную справку. Выражение Value для текстового поля textboxPercentageValue напрямую относится к полю Variance без указания агрегата набора данных. Когда отчет содержит несколько наборов данных, ссылки на поля вне области данных должны содержаться в агрегатных функциях, которые задают область набора данных. (rsFieldReferenceAmbiguous) "

Итак, что мне нужно сделать, чтобы сделать это выражение / формулу недвусмысленной для служб отчетов SQL Server, синтаксического анализатора VBScript или "кто бы то ни было" жалуется на это?

3 ответа

Решение

Похоже, ваше текстовое поле было добавлено в область отчета, которая не является "областью данных" (например, таблица или список). Область данных будет иметь ссылку на конкретный набор данных отчета в качестве одного из своих свойств, поэтому службы Reporting Services знают все ссылки на поля внутри этой области данных, ссылающиеся на этот набор данных. Эта ошибка пытается сказать (довольно многословно):

  • если вы ссылаетесь на поле за пределами области данных, эта ссылка должна быть внутри агрегированного выражения, такого как Sum() - это потому, что набор данных может содержать несколько строк для поля, но вне области данных текстовое поле может отображать только одно значение.
  • это агрегатное выражение также должно включать ссылку на набор данных отчета, из которого поступает поле

Таким образом, если поле "WK1" было из набора данных "MyDataset1", выражение для ссылки на это поле будет выглядеть так:

=Sum(Fields!WK1, "MyDataset1")

См. Также: Использование ссылок на коллекции полей набора данных в выражениях

Это интересная проблема, потому что, если в вашем отчете есть ТОЛЬКО 1 набор данных, вам не нужна таблица, вы можете напрямую ссылаться на поле, которое существует в этой таблице.

Однако, если у вас более 1 набора данных, вы должны создать таблицу, которая может содержать несколько строк. Затем вам, возможно, придется сгруппировать по этому полю и скрыть лишние столбцы и строки. Однако вы НЕ МОЖЕТЕ отобразить эти данные в TEXTBOX, однако вы можете создать прямоугольник, который может содержать таблицу и другое текстовое поле. Или отобразите таблицу напрямую.

Текстовое поле может быть выбито из своего контекста и все еще оставаться в нем. Я пришел к этому сообщению в поисках одного и того же сообщения об ошибке, и это было одно текстовое поле в серии из нескольких, и оно сработало всего за несколько минут до того, как я изменил форматирование. Получив информацию в первом ответе, я вернулся, покопался и обнаружил, что текстовое поле, выдающее ошибку, на самом деле было полем со списком, но, похоже, находилось на тех же уровнях, что и другие, если только я не пытался переместить или изменить размер списка . Перемещение текстового поля и опускание его обратно в фиксированные вещи. Как кто-то, кто быстро осваивает SSRS с точки зрения программиста, понимание в первом ответе решило разочарование, которое возникало неоднократно!

Другие вопросы по тегам