2015-11-20 4 views
-1
  • Здесь 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")))

+0

Несмотря на все, что текст выше это не ясно, что ваш требуемый выход. Если я прав, вы выбираете еженедельно или ежемесячно, что дает вам либо номер недели (?), Либо название месяца соответственно. Что вы хотите от другого конца расчета? – Jonnus

+0

WW1 и WW2 поставляются со списком соответствующего date_range_type, будь то еженедельно или ежемесячно в текущем году. для еженедельного типа, первое действие перед тем, как перейти к iif, - это указать WW1 и WW2 на число, чтобы затем можно было выполнить математическое вычисление по обоим значениям. в то время как ежемесячно, так как значение указано в имени месяца, оно должно быть преобразовано в номер месяца, а затем переведено на номер. – user2300035

+0

Вышеприведенное выражение выведет число, в котором диапазон между выводом и значением WW2 всегда будет больше или равен 10, если выход не является значением, которое отличается от 10 и ниже, чем WW2.output зависит от диапазона между WW1 и WW2 что означает разницу в значении между WW1 и WW2.когда разница больше 10, будет принимать значение WW1, если меньше, если WW2 меньше 11, то выход фиксирован на 1 (поскольку в то время как диапазон между выходом и WW2 должен быть равен не менее 10, диапазон дат действителен только до 1, который представляет рабочую неделю 1 или первый месяц) – user2300035

ответ

0

End с использованием SQL функции для работы. это та же логика, что и выше код SSRS.

CREATE OR REPLACE FUNCTION ww3_param (ww1 IN NUMBER, ww2 IN NUMBER) RETURN VARCHAR2 IS ret_val VARCHAR2(10); BEGIN IF (ww2 - ww1) > 10 THEN ret_val := to_char(ww1); ELSE IF ww2 < 10 THEN ret_val := '1'; ELSE ret_val := to_char(ww2 - 10);
END IF; END IF;
RETURN ret_val; END;

EDIT

Это запрос для набора данных:

select case when :date_range_type = 'MONTHLY' then ww3_param(to_char(to_date(:WW1,'MON'),'MM'),to_char(to_date(:WW2,'MON'),'MM')) when :date_range_type = 'WEEKLY' then ww3_param(to_number(:WW1),to_number(:WW2)) end as ww3_param_value from dual

+0

Похож на синтаксис Oracle? Можете ли вы подтвердить, что это Oracle, и я помечаю ваш вопрос соответственно. –

+0

@ Nick.McDermaid да, это оракул. 10g версия. Благодарю. – user2300035

Смежные вопросы