Не удалось разрешить перегрузку SSRS, поскольку ни один доступный » IIf » не принимает такое количество аргументов

#reporting-services #ssrs-tablix

Вопрос:

Я написал формулу, используя значения других текстовых полей в текстовом поле, но система ее не принимает. Формула выглядит следующим образом

 =IIF(ReportItems!Textbox66.Value>=1,IIF(ReportItems!Textbox257.Value>=500,CInt((ReportItems!Textbox66.Value*100-100)/5),IIF(CInt((ReportItems!Textbox66.Value*100-100)/5)>=4,4,CInt((ReportItems!Textbox66.Value*100-100)/5))),IIF(ReportItems!Textbox257.Value<500,IIF(CInt((100-ReportItems!Textbox66.Value*100)/5)>-4,-4,IIF((100-ReportItems!Textbox66.Value*100)/5*(-1))),(CInt((100-ReportItems!Textbox66.Value*100)/5*(-1)))))
 

Ответ №1:

Похоже, что есть утверждение IIF только с одним из трех аргументов.

 IIF((100-ReportItems!Textbox66.Value*100)/5*(-1))
 

У него должен быть аргумент для значения, когда выражение IIF равно True или False.

 IIF((100-ReportItems!Textbox66.Value * 100) / 5 * (-1), ?, ?)
 

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

 =IIF(ReportItems!Textbox66.Value >= 1,
    IIF(ReportItems!Textbox257.Value >= 500,
        CInt((ReportItems!Textbox66.Value * 100 - 100) / 5),
            IIF(CInt((ReportItems!Textbox66.Value * 100 - 100) / 5) >= 4,
                4,
                CInt((ReportItems!Textbox66.Value * 100 - 100) / 5)
                )
        ),
    IIF(ReportItems!Textbox257.Value<500,
        IIF(CInt((100 - ReportItems!Textbox66.Value * 100) / 5) > -4,
            -4,
            IIF((100 - ReportItems!Textbox66.Value * 100) / 5 * (-1), ?, ?)
            ),
        CInt((100 - ReportItems!Textbox66.Value * 100) / 5 * (-1))
        )
    )
 

Возможно, использовать ПЕРЕКЛЮЧАТЕЛЬ будет немного утомительнее, но его будет легче прочитать и заставить работать так, как вы хотите.

 =SWITCH(ReportItems!Textbox66.Value >= 1 AND ReportItems!Textbox257.Value >= 500, CInt((ReportItems!Textbox66.Value * 100 - 100) / 5),
        ReportItems!Textbox66.Value >= 1 AND CInt((ReportItems!Textbox66.Value * 100 - 100) / 5) >= 4, 4,
        ReportItems!Textbox66.Value >= 1, CInt((ReportItems!Textbox66.Value * 100 - 100) / 5), 
        ReportItems!Textbox257.Value < 500 AND CInt((100 - ReportItems!Textbox66.Value * 100) / 5) > -4,
            -4,  
        ReportItems!Textbox257.Value < 500 AND (100 - ReportItems!Textbox66.Value * 100) / 5 * (-1) = ?????, ?????,
        ReportItems!Textbox257.Value < 500, CInt((100 - ReportItems!Textbox66.Value * 100) / 5 * (-1))
)