- Здесь im пытается сделать переключатель, если в нем нет. Я не знаю, где я пропустил, но это не работает.
- для первого условия в коммутаторе, «ЕЖЕНЕДЕЛЬНО», WW2 и WW1 имеет номерную форму, но тип текста/строки. поэтому после того, как они были добавлены к типу целого числа/числа, тогда они используются в операции iff.
- для второго условия в переключателе, «MONTHLY», WW2 и WW1 - это название месяца. поэтому цель состоит в том, чтобы получить номер месяца от имени месяца. После этого WW1, WW2 используются в iff-операции.
=SWITCH(Parameters!date_range_type.Value = "WEEKLY", IIF((cInt(Parameters!WW2.Value) - cInt(Parameters!WW1.Value)) > 10, Parameters!WW1.Value,IIF(cInt(Parameters!WW2.Value) < 11,1,cInt(Parameters!WW2.Value) - 10)), Parameters!date_range_type.Value = "MONTHLY", IIF((cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) - cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW1.Value & "-01"))) > 10, MONTH(datepart("YYYY",today())& "-" & Parameters!WW1.Value & "-01"),IIF(cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) < 11,1,cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) - 10)) )
SSRS: IF Else inside Switch не работает
если я запускаю отчет для «WEEKLY» только означает оленья кожа необходимости переключения и другое условие IIF, оно работает нормально. так что при запуске только «ЕЖЕМЕСЯЧНО».
EDIT
это то, как он выглядит, как если бы я использовать IIF только ..
IIF(Parameters!date_range_type.Value = "MONTHLY",(IIF((cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) - cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW1.Value & "-01"))) > 10,MONTH(datepart("YYYY",today())& "-" & Parameters!WW1.Value & "-01"),IIF(cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) < 11,1,cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) - 10))), (IIF(Parameters!date_range_type.Value = "WEEKLY",(IIF((cInt(Parameters!WW2.Value) - cInt(Parameters!WW1.Value)) > 10, Parameters!WW1.Value, IIF(cInt(Parameters!WW2.Value) < 11,1,cInt(Parameters!WW2.Value) - 10))), "0")))
Несмотря на все, что текст выше это не ясно, что ваш требуемый выход. Если я прав, вы выбираете еженедельно или ежемесячно, что дает вам либо номер недели (?), Либо название месяца соответственно. Что вы хотите от другого конца расчета? – Jonnus
WW1 и WW2 поставляются со списком соответствующего date_range_type, будь то еженедельно или ежемесячно в текущем году. для еженедельного типа, первое действие перед тем, как перейти к iif, - это указать WW1 и WW2 на число, чтобы затем можно было выполнить математическое вычисление по обоим значениям. в то время как ежемесячно, так как значение указано в имени месяца, оно должно быть преобразовано в номер месяца, а затем переведено на номер. – user2300035
Вышеприведенное выражение выведет число, в котором диапазон между выводом и значением WW2 всегда будет больше или равен 10, если выход не является значением, которое отличается от 10 и ниже, чем WW2.output зависит от диапазона между WW1 и WW2 что означает разницу в значении между WW1 и WW2.когда разница больше 10, будет принимать значение WW1, если меньше, если WW2 меньше 11, то выход фиксирован на 1 (поскольку в то время как диапазон между выходом и WW2 должен быть равен не менее 10, диапазон дат действителен только до 1, который представляет рабочую неделю 1 или первый месяц) – user2300035