2015-11-20 41 views
-1
  • 在这里即时通讯尝试做切换,然后如果在其他地方。我不知道我错过了什么,但这不起作用。
  • 对于开关中的第一个条件,'WEEKLY',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:如果其他内部开关不工作

如果我在“每周”报告仅意味着犯规需要开关和其他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")))

+0

,尽管所有的文字上面目前还不清楚你的期望的输出是什么。如果我是正确的,则选择每周或每月给予您一个星期数字(?)或月份名称。计算的另一端是什么? – Jonnus

+0

WW1和WW2都提供有相应的date_range_type列表,无论是当前的每周还是每月。对于每周类型,在进入iif之前的第一个动作是将WW1和WW2转换为数字,然后可以对两个值进行数学运算。而每月,因为提供的价值是以月份名称,它必须转换为月份数然后转换为数字。 – user2300035

+0

上面的表达式会输出一个数字,表示输出和WW2值之间的范围总是大于或等于10,如果不是,则输出是差值为10且低于WW2的值。输出取决于WW1和WW2之间的范围这意味着WW1和WW2之间的差值。当差值大于10时,输出将取WW1的值,如果小于11,则输出固定为1(因为输出和WW2之间的距离需要至少10个,日期范围有效期只有1个,代表第1周或第1个月) – user2300035

回答

0

最终使用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;

编辑

这是数据集中查询:

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是的,它是oracle。 10g版本。谢谢。 – user2300035