SSRS: IF Else inside Switch 不工作
SSRS: IF Else inside Switch not working
- 我在这里尝试做 switch then if else in it。我不知道我错过了哪里,但这不起作用。
- 对于 switch 中的第一个条件,'WEEKLY',WW2 和 WW1 为数字形式,但数据类型为 text/string。所以在将它们转换为 integer/number 数据类型之后,它们将用于 iff 操作。
- switch 中的第二个条件,'MONTHLY',WW2 和 WW1 是月份名称。所以 objective 是从月份名称中获取月份编号。之后,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))
)
if i 运行 仅报告 'WEEKLY',意味着不需要切换和其他 iif 条件,它工作正常。仅在 'MONTHLY' 上 运行 时也是如此。
编辑
这就是我只使用 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") ) )
完成作业使用 sql 函数。这与上述 SSRS 代码的逻辑相同。
创建或替换函数 ww3_param(ww1 的数量,ww2 的数量)
RETURN VARCHAR2
是
ret_val VARCHAR2(10);
开始
如果 (ww2 - ww1) > 10 那么
ret_val := to_char(ww1);
别的
如果 ww2 < 10 那么
ret_val := '1';
别的
ret_val := to_char(ww2 - 10);<br>
万一;
如果结束;<br>
RETURN ret_val;
结束;
编辑
这是对数据集的查询:
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
- 我在这里尝试做 switch then if else in it。我不知道我错过了哪里,但这不起作用。
- 对于 switch 中的第一个条件,'WEEKLY',WW2 和 WW1 为数字形式,但数据类型为 text/string。所以在将它们转换为 integer/number 数据类型之后,它们将用于 iff 操作。
- switch 中的第二个条件,'MONTHLY',WW2 和 WW1 是月份名称。所以 objective 是从月份名称中获取月份编号。之后,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))
)
if i 运行 仅报告 'WEEKLY',意味着不需要切换和其他 iif 条件,它工作正常。仅在 'MONTHLY' 上 运行 时也是如此。
编辑
这就是我只使用 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") ) )
完成作业使用 sql 函数。这与上述 SSRS 代码的逻辑相同。
创建或替换函数 ww3_param(ww1 的数量,ww2 的数量)
RETURN VARCHAR2
是
ret_val VARCHAR2(10);
开始
如果 (ww2 - ww1) > 10 那么
ret_val := to_char(ww1);
别的
如果 ww2 < 10 那么
ret_val := '1';
别的
ret_val := to_char(ww2 - 10);<br>
万一;
如果结束;<br>
RETURN ret_val;
结束;
编辑
这是对数据集的查询:
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