【问题标题】:sum based on background color ssrs基于背景颜色 ssrs 的总和
【发布时间】:2019-05-14 07:29:41
【问题描述】:

在我的表中,根据以下表达式,在 20 条记录中,我得到 4 条记录“红色”:

=Switch(DateDiff(DateInterval.Hour, Fields!SLA.Value, Now())<=72,"White",Fields!SLA.Value<now(),"Red",true,"White")

我想根据背景颜色“RED”对“count_of_value”求和。

这是我正在尝试的。但是,它的显示错误。

="The number is " & IIF("Red",Sum(Fields!count_of_value.Value, "DataSet1"),'') & "."

and 

 ="The number is " & Sum(IIF("Red",Sum(Fields!count_of_value.Value, "DataSet1"),'')) & "."

有两件事我想实现:

从第 1 列中,我想获取颜色“RED”的最后日期。例如,在这种情况下,2019 年 2 月 5 日。

从第二列,我想得到颜色为“RED”的数字的总和。例如,在这种情况下,214519

我在做什么?如何做到这一点? 谢谢

【问题讨论】:

  • 如果遇到错误,至少告诉我们错误信息是什么。
  • 它显示#Error,而我正在尝试预览报告。

标签: sql-server reporting-services ssrs-expression ssrs-2017


【解决方案1】:

这里看起来有点像XY problem。您的表达式正在根据SWITCH 语句为单元格着色。要解决求和问题,您需要使用为单元格着色的相同条件语句。基本上,你需要的表达式应该如下。

= SUM(IIF(Fields!SLA.Value<now(), Fields!count_of_value.Value, 0), "DataSet1")

此表达式应隔离SWITCH 红色的相同字段,将它们相加,如果它们的计算结果不为真,则添加零。由于您对另一个答案的评论表明您收到一个表明范围不足的错误,因此您需要在 SUM 函数中包含数据集名称。

至于从另一列获取最后一个日期值,您应该可以使用类似的表达式,但使用 MAX 函数。

=MAX(IIF(Fields!SLA.Value<now(), Fields!SLA.Value, Nothing), "DataSet1")

【讨论】:

  • @AskMe 顺便说一句,这是我回答的你的第二个或第三个问题。如果您接受一个答案作为您许多问题中某些问题的正确答案,那就太好了。单击复选标记以标记正确答案。
  • 非常感谢。当然。让我检查一下。
【解决方案2】:

您的 IIF 语句基本上只是说“如果 'Red' = True”,它将始终返回 false。

您需要将其与您的颜色表达所在的“单元格”进行比较。

如果该单元格称为myTextBox,那么您的 SUM 表达式将类似于(简化)

=SUM(
    IIF(ReportItems!myTextBox.Value = "Red", Fields!count_of_value.Value, 0)
    )

或者,您可以在 IIF 语句中重复整个颜色表达式。

如果这没有帮助,请编辑您的问题以显示报告设计的图像,包括任何分组和每个表达式的位置。

【讨论】:

  • 使用这个后,我收到错误,“文本框'Textbox4'的值表达式使用没有范围的聚合表达式。在数据区域之外使用的所有聚合都需要范围除非报告只包含一个日期集。
  • 按照我的建议编辑您的问题。没有看到布局和行和/或列组,很难知道解决方案是什么。
  • 添加了布局和其他细节。
  • 需要查看设计,使用表达式的行和列组面板,以便我们了解表达式的范围。如果没有行组或列组,请说明。
【解决方案3】:

也许我过分简化了您的问题陈述,但我尝试在本地机器上使用虚拟数据。

=DateDiff(DateInterval.Hour,Fields!SLAValue.Value,now)

用于捕获数字的新临时列

=IIF(DateDiff(DateInterval.Hour,Fields!SLAValue.Value,now)<=72,0,
IIF(Fields!SLAValue.Value<now,DateDiff(DateInterval.Hour,Fields!SLAValue.Value,now),0))

现在专栏

=now

颜色列表达式

=IIF(DateDiff(DateInterval.Hour,Fields!SLAValue.Value,now)<=72,"White",
IIF(Fields!SLAValue.Value<now,"Red","white"))

最后一个 Count_Value 表达式

=Sum(
IIF(DateDiff(DateInterval.Hour,Fields!SLAValue.Value,now)<=72,0,
IIF(Fields!SLAValue.Value<now,DateDiff(DateInterval.Hour,Fields!SLAValue.Value,now),0)))

【讨论】:

  • 你在做红色的价格总和吗?如果您可以考虑前五名记录并将其背景设置为“红色”。然后将前 5 名(背景为红色)相加会有所帮助。
  • 我的 Sum 表达式有类型,如果你查看我的 Count_of_Value 它的总和只有红色列,即只有那些 Price>500。
  • 此外,如果您在问题中看到我的第一个表达式,则第一列是日期。因此,基于该表达式,我正在做出背景颜色决定,并且我想汇总 RED 背景以及需要获取 RED 背景颜色的最后日期。希望我正确解释了这一点。
  • 是的,我收到了您的问题,但无论如何您都将日期差异视为小时数(我相信),您的小时数可以是数字。您可以将此数字用作总和。也许为了帮助我的观点,我应该将我的数据集更改为接近您的问题陈述并向您显示最终结果。但我的意思是你可以很容易地实现求和,我展示了一种简单的方法。
  • 实际上,你已经完成了硬编码,即'price.value > 500',我不能考虑硬编码任何值,因为它是动态的,我无法控制。不过,会试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多