Sql server 这是RS表达式标准还是黑客

Sql server 这是RS表达式标准还是黑客,sql-server,reporting-services,ssrs-2008,Sql Server,Reporting Services,Ssrs 2008,我使用的是开关,而表达式中似乎没有明显的ELSE部分,因此我以以下内容结束,但感觉有点像黑客-是吗 它的工作原理是:如果字符串是foo或bar,则它会修改字符串,但任何其他产品字符串都会被忽略: =Switch(Fields!Product.Value = "foo" , "foo (incl sad)", Fields!Product.Value = "bar", "bar (incl sick)", Cdbl(1)=Cdbl(1), Fields!Product

我使用的是
开关
,而表达式中似乎没有明显的
ELSE
部分,因此我以以下内容结束,但感觉有点像黑客-是吗

它的工作原理是:如果字符串是
foo
bar
,则它会修改字符串,但任何其他产品字符串都会被忽略:

=Switch(Fields!Product.Value = "foo" , "foo (incl sad)", 
       Fields!Product.Value = "bar", "bar (incl sick)",
       Cdbl(1)=Cdbl(1), Fields!Product.Value)

您可以使用开关,另一件您可以做的事情是使用MSDN中的
=IIF(…)

Iif函数返回两个值中的一个,具体取决于 表达是否真实。下面的表达式使用Iif 函数,如果LineTotal的值为 超过100。否则返回False:

另一个表达式可以包含另一个
IIF
,因此不限于单个
IIF
。 可在此处找到所有RS表达式:


如果它起作用,它就起作用。您还可以使用IIF(Fields!Product.Value=“foo”,“foo2”,IIF(Fields!Product.Value=“bar”,“bar2”,Fields!Product.Value)

,因为有人请求它:

=Switch(Fields!Product.Value = "foo" , "foo (incl sad)",  
        Fields!Product.Value = "bar", "bar (incl sick)", 
        Cdbl(1)=Cdbl(1), Fields!Product.Value) 
将成为

=Switch(Fields!Product.Value = "foo" , "foo (incl sad)",  
        Fields!Product.Value = "bar", "bar (incl sick)", 
        true, Fields!Product.Value) 
我认为这更具可读性-我可以理解
1=1
,但有人能告诉我在原始代码中转换为double是为了什么吗


据我所知,这是从switch语句返回'else'的唯一方法。否则将返回null/Nothing(分别针对c#/VB gurus).

您可以使用
true
而不是1=1-可能会读一点clearer@Charleh那就把它作为一个答案吧……肯定会让它更具可读性;有趣的是,我在你的答案之前2小时发布了相同的答案,结果被否决了。我认为有人只是无缘无故地否决了投票。代表人数>10k的用户可以看到它……互联网是一个变化无常的place.@JonH+1-它在哪里?…你删除了吗?“>10k的用户可以看到它”…可以看到什么?@whytheq-我现在取消删除了它…当你有足够的声誉时,whytheq你会看到被删除的“答案”。这就是为什么我说>10k的用户可以看到它。这意味着他们可以看到我删除的答案。“如果它有效,它就有效”…直到它破裂;如果它没有经过足够的测试,它可能会破裂-因此最好在SOI上询问我在SSRS表达式中比较不同类型时遇到了一些意想不到的错误,所以我通常现在总是将andy数字转换为双精度。你的
null/Nothing:c 35;/VB
注释关于所有的/Nothing都是相等的valent(几乎!)在c#/VB中,但是SSRS使用VB,所以我只是把它放在那里,因为我使用c#:P(它们是等效的,但我认为VB允许您将不可为null的值类型分配给
Nothing
,它只会默认值)+1(这是叛逆的)在其他语言中,
iif
是一个不推荐使用的运算符,正在被
if
替换;RS中是否有此计划?…可能是它最初被标记的原因