SSRS - выражение для создания строки для заголовка отчета

У меня есть отчет, в котором есть 6 параметров. Я бы хотел сделать эти параметры частью заголовка моего отчета. Мои параметры следующие:

@BMDataType1  Text
@BMDataComp1  Float
@BMDataType2  Text
@BMDataComp2  Float
@BMDataType3  Text
@BMDataComp3  Float

Всегда будут передаваться параметры @ BMDataType1 и @ BMDataComp1, остальные могут иметь значение NULL. Мне нужно, чтобы заголовок выглядел так: если переданы только @ BMDataType1 и @ BMdataComp1, тогда заголовок должен быть, например:

Бенчмарк1 100% контрольный компонент

До сих пор я кодировал это ниже:

=Parameters!BMDataType1.Value + " " + Parameters!BMDataComp1.Value.ToString + "%" + " Benchmark Constituents"

Однако, если заполнены @ BMDataType2 и @ BMDataComp2, мне нужно, чтобы заголовок выглядел так:

Контрольный показатель1 50% Контрольный показатель2 50% составляющие контрольного показателя

То же самое, если передано 3, то:

Контрольный показатель1 50% Контрольный показатель2 30% Контрольный показатель3 20% Составляющие контрольного показателя

Никогда не будет, скажем, Контрольного показателя 1 и Контрольного показателя 3. Он будет всегда только 1, или 1 и 2, или 1, 2 и 3.

Может ли кто-нибудь указать мне в правильном направлении, как написать инструкцию IIF для этой проверки, чтобы увидеть, являются ли параметры Benchmark2 и Benchmark3 NULL?

Спасибо

РЕДАКТИРОВАТЬ:

После некоторой работы над этим я придумал следующий код, но все еще получаю:

"Object reference not set to an instance of an object"

Мой код следующий:

=IIF(
    IIF(IsNothing(Parameters!BMDataType1.Value),1,0)=0 AND IIF(IsNothing(Parameters!BMDataType2.Value),1,0)=1 AND IIF(IsNothing(Parameters!BMDataType3.Value),1,0)=1
,   Parameters!BMDataType1.Value + " " + Parameters!BMDataComp1.Value.ToString + "%" + " Benchmark Constituents"
, IIF(
    IIF(IsNothing(Parameters!BMDataType1.Value),1,0)=0 AND IIF(IsNothing(Parameters!BMDataType2.Value),1,0)=0 AND IIF(IsNothing(Parameters!BMDataType3.Value),1,0)=1
,   Parameters!BMDataType1.Value + " " + Parameters!BMDataComp1.Value.ToString + "%" + " " + Parameters!BMDataType2.Value + " " + Parameters!BMDataComp2.Value.ToString + "%" + " Benchmark Constituents"
, IIF(
    IIF(IsNothing(Parameters!BMDataType1.Value),1,0)=0 AND IIF(IsNothing(Parameters!BMDataType2.Value),1,0)=0 AND IIF(IsNothing(Parameters!BMDataType3.Value),1,0)=0
,   Parameters!BMDataType1.Value + " " + Parameters!BMDataComp1.Value.ToString + "%" + " " + Parameters!BMDataType2.Value + " " + Parameters!BMDataComp2.Value.ToString + "%" + " " + Parameters!BMDataType3.Value + " " + Parameters!BMDataComp3.Value.ToString + "%" + " Benchmark Constituents"
, " ")))

Однако, если все 3 параметра не равны нулю, он не возвращает ошибки и заполняет заголовок так, как я бы хотел, чтобы он отображался. Как это может быть?


person chrissy p    schedule 25.11.2015    source источник
comment
Используется ли BMDataComp2 или BMDataComp2 в этом контексте?   -  person Jonnus    schedule 25.11.2015
comment
Используйте IIF несколько раз, отметив Isnothing()   -  person pedram    schedule 25.11.2015


Ответы (3)


Я не использую SSRS с мая, но конкатенация строк в SSRS использует синтаксис VB. Поэтому вместо конкатенированных строк со знаком + вы должны использовать знак &.

=Parameters!BMDataType1.Value & " " & Parameters!BMDataComp1.Value.ToString & "%" & " Benchmark Constituents"
person Teis Lindemark    schedule 25.11.2015

Я нашел решение этого, и мой код выглядит следующим образом:

=Parameters!BMDataType1.Value + " " + CStr(Parameters!BMDataComp1.Value) + "% " 
+ IIF(IIF(IsNothing(Parameters!BMDataType2.Value),1,0)=0,Parameters!BMDataType2.Value + " " + CStr(Parameters!BMDataComp2.Value)+"%","") + " "
+ IIF(IIF(IsNothing(Parameters!BMDataType3.Value),1,0)=0,Parameters!BMDataType3.Value + " " + CStr(Parameters!BMDataComp3.Value)+"%","") + " Benchmark Constituents"

По какой-то причине ему не понравился .ToString, который возвращал «Ссылка на объект не установлена ​​на экземпляр объекта». Обернув это в CStr, я смог удалить ошибку и получить необходимое решение.

Спасибо за все ответы, все они помогли.

person chrissy p    schedule 25.11.2015

Что-то вроде этого должно сработать для вас:

=Parameters!BMDataType1.Value + " " + Parameters!BMDataComp1.Value.ToString + "%" + IIf(IsNothing(Parameters!BMDataType3.Value) OR IsNothing(Parameters!BMDataComp3.Value), IIf(IsNothing(Parameters!BMDataType2.Value) OR IsNothing(Parameters!BMDataComp2.Value), " Benchmark Constituents", " " + Parameters!BMDataType2.Value + " " + Parameters!BMDataComp2.Value.ToString + "%" + " Benchmark Constituents"), " " + Parameters!BMDataType2.Value + " " + Parameters!BMDataComp2.Value.ToString + "%" + " " + Parameters!BMDataType3.Value + " " + Parameters!BMDataComp3.Value.ToString + "%" + " Benchmark Constituents")
person Jason    schedule 25.11.2015
comment
Спасибо за ответ, я получаю сообщение об ошибке: Ссылка на объект не установлена ​​на экземпляр объекта? Я изменил параметры @ start на Parameters! ....., но я не вижу, где еще могла быть ошибка? - person chrissy p; 25.11.2015
comment
Возможно, эта статья может помочь в этом: social.msdn.microsoft.com/Forums/sqlserver/en-US/ - person Jason; 25.11.2015