Несколько вложенных IIF

Я думаю, что мне нужен вложенный IIF в SSRS для моей цели, как написано в псевдокоде ниже:

If GoalType.Value = ImplementED And
SavingsGoal.Value <= ImplementEDSavings.Value OR 
If GoalType.Value = ImplementABLE And
SavingsGoal.Value <= ImplementABLESavings.Value 
Then display zero dollars

ELSE

If GoalType = ImplementED And 
SavingsGoal.Value > ImplementEDSavings.value Then
Display SavingsGoal.Value minus ImplementABLESavings

ELSE

If GoalType = ImplementABLE And
SavingsGoal.Value > ImplementABLESavings.Value Then
Display SavingsGoal.Value minus ImplementABLESavings

Я получил это много, чтобы работать:

=IIF(First(Fields!GoalType.Value, "Project_Details") = "Implemented" AND 
Sum(Fields!SavingsGoal.Value, "Project_Details") <= Sum(Fields!ImplementedSavings.Value, "dsInitiatives") OR 
(First(Fields!GoalType.Value, "Project_Details") = "Implementable" AND 
Sum(Fields!SavingsGoal.Value, "Project_Details") <= Sum(Fields!ImplementableSavings.Value, "dsInitiatives")),0,
Sum(Fields!SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementedSavings.Value, "dsInitiatives"))

Все, что мне нужно, чтобы выяснить, как добавить туда это последнее «ELSE», понимая, что мне нужно еще несколько IIF, или Switch, или что-то в этом роде... Я пробовал несколько способов, и мой срок официально поджимает. Спасибо всем, кто может помочь. Обратите внимание, что я действительно новичок в отчетах SSRS.

ОБНОВЛЕНИЕ: Вот несколько методов, которые я пробовал. Я продолжаю получать эту ошибку при каждой попытке: ошибка BC30057 Слишком много аргументов для «Общественной функции IIf (выражение как логическое значение, TruePart как объект, FalsePart как объект) как объект» SSRS

=iif((First(Fields!GoalType.Value, "Project_Details") = "Implemented" AND Sum(Fields!SavingsGoal.Value, "Project_Details") ‹= Sum(Fields!ImplementedSavings.Value, "dsInitiatives")),0 ) ИЛИ

iif((First(Fields!GoalType.Value, "Project_Details") = "Реализуемый" AND Sum(Fields!SavingsGoal.Value, "Project_Details") ‹= Sum(Fields!ImplementableSavings.Value, "dsInitiatives")),0, ) ИЛИ

iif((First(Fields!GoalType.Value, "Project_Details") = "Implemented" AND Sum(Fields!SavingsGoal.Value, "Project_Details") > Sum(Fields!ImplementedSavings.Value, "dsInitiatives")), Sum(Fields !SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementedSavings.Value, "dsInitiatives"), ) ИЛИ

iif((First(Fields!GoalType.Value, "Project_Details") = "Реализуемое И Сумма(Fields!SavingsGoal.Value, "Project_Details") > Sum(Fields!ImplementableSavings.Value, "dsInitiatives")), Sum(Fields! SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementableSavings.Value, "dsInitiatives"))

OR

=IIF(First(Fields!GoalType.Value, "Project_Details") = "Implemented" AND Sum(Fields!SavingsGoal.Value, "Project_Details") ‹= Sum(Fields!ImplementedSavings.Value, "dsInitiatives") ИЛИ (First( Fields!GoalType.Value, "Project_Details") = "Реализуемый" AND Sum(Fields!SavingsGoal.Value, "Project_Details") ‹= Sum(Fields!ImplementableSavings.Value, "dsInitiatives")),0,

Switch(Fields!GoalType.Value, "Project_Details") = "Реализовано", Sum(Fields!SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementedSavings.Value, "dsInitiatives") Switch(First(Fields! GoalType.Value, "Project_Details") = "Реализуемый", Sum(Fields!SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementableSavings.Value, "dsInitiatives"))))

личный комментарий, если бы эти системы не предполагали, что все прирожденные программисты и выдавали бы ошибки, которые говорят по-английски, мне бы не пришлось приходить на эти сайты за переводами. Ладно, мыльница закончилась. Еще раз спасибо всем, кто может помочь


person user3357798    schedule 28.02.2014    source источник
comment
Это поле для комментариев меня смущает - пожалуйста, удалите этот пост   -  person user3357798    schedule 28.02.2014


Ответы (1)


Вот небольшая модификация вашего первого обновления.

=iif( (First(Fields!GoalType.Value, "Project_Details") = "Implemented" AND Sum(Fields!SavingsGoal.Value, "Project_Details") <= Sum(Fields!ImplementedSavings.Value, "dsInitiatives")),0,
iif( (First(Fields!GoalType.Value, "Project_Details") = "Implementable" AND Sum(Fields!SavingsGoal.Value, "Project_Details") <= Sum(Fields!ImplementableSavings.Value, "dsInitiatives")),0,  
iif( (First(Fields!GoalType.Value, "Project_Details") = "Implemented" AND Sum(Fields!SavingsGoal.Value, "Project_Details") > Sum(Fields!ImplementedSavings.Value, "dsInitiatives")), Sum(Fields!SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementedSavings.Value, "dsInitiatives"), 
iif( (First(Fields!GoalType.Value, "Project_Details") = "Implementable" AND Sum(Fields!SavingsGoal.Value, "Project_Details") > Sum(Fields!ImplementableSavings.Value, "dsInitiatives")), Sum(Fields!SavingsGoal.Value, "Project_Details") - Sum(Fields!ImplementableSavings.Value, "dsInitiatives") ) 
)))

Вместо использования ИЛИ я вложил последующие операторы iif в ложный аргумент предыдущего iif. Насчет той ошибки, которую вы получали: «Слишком много аргументов» — на самом деле у вас было слишком мало.

Вот первый (упрощенный) блок вашего кода:

=iif( First(GoalType) = "Implemented" AND Sum(SavingsGoal) <= Sum(ImplementedSavings),0 ) OR

Обратите внимание, что у вас правильное логическое значение, но вы указываете только один аргумент после «0» для истинного. iif требует два аргумента, true и false. В вашем случае вы хотите, чтобы следующий оператор iif находился в ложной (иначе) части.

Обновленный код:

=iif( First(GoalType) = "Implemented" AND Sum(SavingsGoal) <= Sum(ImplementedSavings),0, iif(boolean, true, iif(boolean, true, false)))
person Galfni    schedule 28.02.2014
comment
Ты ангел, Спасибо, Галфни. Последний обновленный код, который вы прислали, помог! Наслаждайся своими выходными. - person user3357798; 28.02.2014