报表生成器表达式
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!TICKETNUM.Value))
这里的错误消息给了你答案——没有指定 iif()
的错误部分。使用 =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)
这不是 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 的不同值。
我是 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!TICKETNUM.Value))
这里的错误消息给了你答案——没有指定 iif()
的错误部分。使用 =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)
这不是 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 的不同值。