【问题标题】:SSRS nested if conditional formattingSSRS 嵌套 if 条件格式
【发布时间】:2023-03-08 08:45:02
【问题描述】:

我在 javascript 中有这段代码,可以有条件地为数据表着色。我想对 SSRS 报告应用相同优先级的相同颜色条件;所以“rejected”(蓝色)将优先于“expired”(红色)。

蓝色:拒绝
黄色:待定
红色:已过期
橙色:警告
已批准:白色
空:白色,除非被拒绝,然后是蓝色,即使它是空的。

带有我想要的逻辑的Javascript代码

    if (status == '1') 
      {
                        return 'rejected';
                    } 
                    else if (status == '3') 
                    {
                        return 'pending';
                    }
                     else if (status == '5') 
                     {
                        if (celldate < currentdate) 
                        {
                            return 'expired';
                        } 
                        else if (celldate < warningdate && celldate > currentdate) 
                        {
                            return 'warning';
                        } 
                        else 
                        {
                            return 'approved';
                        }
                    } 
   else 
                    {
                        return 'null';
                    };
}

SSRS 报告代码:

=iif(Fields!LICAPPRSTATUSID.Value="1","Blue",
iif(Fields!LICAPPRSTATUSID.Value="3","Yellow",
iif(Fields!EXPIRATIONDATE.Value < Today, "Red",
iif(Fields!EXPIRATIONDATE.Value < DateAdd("d",30,Today) and Fields!EXPIRATIONDATE.Value > Today, "Orange",
iif(IsNothing(Fields!EXPIRATIONDATE.Value),"White","White")))))

我的问题:SSRS 代码对着色条件的优先级错误

【问题讨论】:

  • 您期待什么?根据什么数据,您会得到什么?另外,当你得到错误的结果时,其他变量的值是多少?
  • @ViKiNG 目前我即将过期,即 RED,而不是被拒绝,即 Blue

标签: sql-server reporting-services sql-server-2012 ssrs-2008 ssrs-2012


【解决方案1】:

我会用 SWITCH 做到这一点:

SWITCH
    (
    Fields!LICAPPRSTATUSID.Value="1","Blue",
    Fields!LICAPPRSTATUSID.Value="3","Yellow",
    Fields!LICAPPRSTATUSID.Value="5",
        SWITCH
            (
            Fields!EXPIRATIONDATE.Value < Today, "Red",
            Fields!EXPIRATIONDATE.Value < DateAdd("d",30,Today) and Fields!EXPIRATIONDATE.Value > Today, "Orange",
            IsNothing(Fields!EXPIRATIONDATE.Value),"White"
            )
    )

请注意,上面的代码是基于 SSRS 代码中的变量如何映射到 javascript 中的变量而得出的“最佳猜测”。

您的 javascript 逻辑中的案例是否代表所有案例?如果没有,您可能最后需要一个默认值。请记住,与计算结果为 true 的 FIRST 条件关联的值将是表达式返回的值。

【讨论】:

  • 我已经用颜色更新了我的帖子。您的代码看起来不错,但由于某种原因,一定存在语法错误,因为引号中的某些单词是白色而不是橙色。我试图弄清楚。这应该代表所有情况。
  • 嗯,我在家里写的,凭记忆:)。您可以将该代码放入背景颜色表达式的表达式编辑器中,突出显示指定颜色,然后使用编辑器底部的颜色选择调色板替换它。
  • 哈哈明白了。无论奇怪的语法代码着色(不是错误)如何,我都可以正常工作,但它仍然在拒绝(蓝色)之前显示过期(红色),这对我来说没有意义。
  • 我必须查看数据才能进一步排除故障。根据字段 LICAPPRStatusID,“过期”和“拒绝”记录集不应重叠 - 根据您的颜色描述,“拒绝”的 LICAPPRStatusID 值为“1”,但“过期”的 LICAPPRStatusID 值为“5”。你说的“之前”到底是什么意思?
  • 我真的想说“代替”。这个的 licapprstatusid 肯定是 1,所以我看不到 5 的 switch 语句是如何激活的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2016-03-23
  • 2010-12-17
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多