报表生成器表达式

Report Builder Expressions

我是 Report Builder 的新手,对我尝试在报表中实现的某些表达式有疑问。我得到了标准的工作但是一旦我尝试任何区别,我就会收到错误消息。在过去的几周里,我尝试了很多组合,阅读了表达式帮助 google 并查看了互联网站点上的其他问题。为了减少我的挫败感,我什至会跳到其他表达方式然后走开,希望我能有不同的见解回来。 它可能是一些简单的东西或者我不知道的关于编写表达式的东西。 我希望有人可以帮助这些表达;它们是我得到的错误最少的版本(通常只是预期的表达)并展示了我试图完成的事情。

=IIF((Fields!RECORDFLAG.Value)='D',COUNTDISTINCT(Fields!TICKETNUM.Value),0)
=IIF((Fields!TRANSTYPE.Value)='1' and (Fields!RECORDFLAG.VALUE)='A' or 
  'B',SUM(Fields!DOLLARS.Value),0)
=IIF((Fields!TRANSTYPE.Value)='1' and 
  (Fields!RECORDFLAG.VALUE)='P',SUM(Fields!DOLLARS.Value),0)
=Sum([DOLLARS] case when [RECORDFLAG]='P' then -1*[DOLLARS])

谢谢。

=IIF((Fields!RECORDFLAG.Value)=”D”,COUNTDISTINCT(Fields!TICK‌​ETNUM.Value))

这里的错误消息给了你答案——没有指定 iif() 的错误部分。使用 =IIF((Fields!RECORDFLAG.Value)=”D”,COUNTDISTINCT(Fields!TICK‌​ETNUM.Value), 0)

=IIF((Fields!TRANSTYPE.Value)="1" and (Fields!RECORDFLAG.VALUE)="A" or "B",SUM(Fields!DOLLARS.Value),0)

这不是 SSRS 中 OR 的工作方式。采用: =IIF((Fields!TRANSTYPE.Value)="1" and (Fields!RECORDFLAG.VALUE="A" or Fields!RECORDFLAG.Value = "B"),SUM(Fields!DOLLARS.Value),0)

由于您的报表设计,返回了 0。 countdistinct() 是一个聚合函数 - 它旨在用于一组数据。但是,您的 iif() 仅在每行的基础上进行测试 - 您基本上是在说 "if the current row is thing, count all the distinct values" 这没有意义。有几种前进方式:

  • 您可以使用 sum() 计算特定值在给定条件下出现的次数。这与 countdistinct() 不同,但如果您使用 =sum(iif(Fields!RECORDFLAG.Value = "D", 1, 0)),那么您将获得该集合中 RECORDFLAG 为 D 的次数。注意:这需要聚合数据(因此在 SSRS 中,分组在 tablix 中)。

  • 您可以使用自定义代码来计算集合中的不同值。参见 https://itsalocke.com/aggregate-on-a-lookup-in-ssrs/。即使您只有一个数据集,也可以应用它 - 只需引用同一个数据集两次。

  • 您可以更改报告的工作方式。您可以对 Fields!RECORDFLAG.Value 进行分组,然后将组过滤到 Fields!RECORDFLAG.Value = "D"。然后在您的文本框中,当 RECORDFLAG 为 D 时,使用 =countdistinct(Fields!TICKETNUM.Value) 获取 TICKETNUM 的不同值。