Reporting services SSRS:如果其他内部开关不工作 在这里我试图做开关,然后如果在它的其他。我不知道我错过了什么,但这不起作用 对于开关“WEEKLY”中的第一个条件,WW2和WW1为数字形式,但为文本/字符串数据类型。因此,在将它们转换为整数/数字数据类型之后,它们将用于iff操作 对于开关中的第二个条件,“MONTHLY”,WW2和WW1是月份名称。因此,目标是从月份名称中获取月份编号。然后,在iff操作中使用WW1、WW2

Reporting services SSRS:如果其他内部开关不工作 在这里我试图做开关,然后如果在它的其他。我不知道我错过了什么,但这不起作用 对于开关“WEEKLY”中的第一个条件,WW2和WW1为数字形式,但为文本/字符串数据类型。因此,在将它们转换为整数/数字数据类型之后,它们将用于iff操作 对于开关中的第二个条件,“MONTHLY”,WW2和WW1是月份名称。因此,目标是从月份名称中获取月份编号。然后,在iff操作中使用WW1、WW2,reporting-services,oracle10g,ssrs-2008,Reporting Services,Oracle10g,Ssrs 2008,=SWITCH(Parameters!date\u range\u type.Value=“WEEKLY”,IIF((cInt(Parameters!WW2.Value)-cInt(Parameters!WW1.Value))>10,Parameters!WW1.Value,IIF(cInt(Parameters!WW2.Value)

=SWITCH(Parameters!date\u range\u 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),
参数!date_range_type.Value=“MONTHLY”,IIF((cInt(MONTH)(MONTH)(datepart(“yyy”,today())和“-”和参数!WW2.Value&“-01”))-cInt(MONTH)(MONTH)(datepart(“YYYY”,today())和“-”和参数),IIF(MONTH)(MONTH)(datepart(“YYYY”,today())和“-”参数!wwww2.Value和“-01”)<11,1,cInt(月(datepart(“yyy”,today())&“-”和Parameters!WW2.Value&“-01”)-10))
)

如果我只运行“每周”报告,意味着不需要开关和其他iif条件,它工作正常。当只运行“每月”报告时也是如此

编辑

如果我只使用iif,情况就是这样

IIF(Parameters!date\u range\u type.Value=“MONTHLY”),(IIF((cInt(MONTH)(datepart(“yyy”,today())&Parameters!WW2.Value&“-01”))-cInt(MONTH)(datepart(“yyy”,today())&10,MONTH(datepart(“yyy”,today())&Parameters!www1.Value&“-01”)),IIF(cInt(MONTH)(datepart(“yyyyy”,today())&MONTH())&-&Parameters!WW2.Value&“-01”)<11,1,cInt(月(日期部分(“YYYY”,今天())&“-”&Parameters!WW2.Value&“-01”)-10),
(IIF(Parameters!date\u range\u 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_参数(编号为ww1,编号为ww2)
返回VARCHAR2
是
ret_val VARCHAR2(10);
开始
如果(ww2-ww1)>10,则
ret_val:=to_char(ww1);
其他的
如果ww2<10,则
ret_val:=“1”;
其他的
ret_val:=to_char(ww2-10)
如果结束; 如果结束
返回返回值; 结束

编辑

这是对数据集的查询:

选择以下情况:日期范围类型='MONTHLY',然后选择ww3参数(to_char(to_date(:WW1,'MON'),'MM'),to_char(to_date(:WW2,'MON'),'MM'))
当:date_range_type='WEEKLY'时,则ww3_参数(to_number(:WW1)、to_number(:WW2))以ww3_参数值结束

从dual

中,尽管上面有这么多文本,但不清楚您想要的输出是什么。如果我是正确的,您可以选择每周或每月,分别为您提供周数(?)或月份名称。您希望从计算的另一端得到什么?WW1和WW2都提供了各自的日期范围类型列表,无论是当前年度的每周还是每月。对于weekly类型,在继续iif之前的第一个操作是将WW1和WW2强制转换为number,这样就可以对这两个值进行数学运算。而每月,因为提供的值是在月份名称中,所以必须将其转换为月份编号,然后转换为编号。上面的表达式将输出一个数字,该数字在输出和WW2值之间的范围始终尝试大于或等于10,如果不是,则输出为差值为10且小于WW2的值。输出取决于WW1和WW2之间的范围,即WW1和WW2之间的差值。当差值大于10时,输出将取WW1的值,如果小于,则如果WW2小于11,则输出固定为1(因为虽然输出和WW2之间的范围至少需要为10,但日期范围仅适用于代表工作周1或第一个月的1)您无法在SSRS中将月份名称转换为数字(非常容易)。最好将数据类型保留为日期或int,并在向用户呈现数据时将其显示为字符串。我认为这是可行的,但需要更多语法,如this=MONTH(“”)。上述exp可能太复杂,无法放入SSRS(为了可读性/调试),我想我会将所有内容放在sql proc中。我会遵守您的建议,简化SSRS。谢谢。看起来像Oracle语法?您能确认它是Oracle吗?我会标记您的问题accordingly@Nick.McDermaid是的,这是oracle.10g版本。谢谢。