带表达式的 SSRS 标签格式

SSRS Label Formatting with expression

我目前正在处理 SSRS 报告,希望根据值是否超过一百万来更改格式 谁能帮我解决代码的语法问题?

=IIF(Sum(Fields!ID_Total_Spend_.Value, "DS_ClientsYear") > 1000000, £#,,.0M;('£'#,N2,'m'), £#,0,k;(‘£’#,N2,’k’))

我不确定你到底想达到什么目的,但这是我构建的一个例子,应该让你足够接近。

我假设

  1. 如果该值超过 1000000,那么您希望它显示为数百万,例如12341234 将显示为 £12.34M
  2. 如果值大于 1000 但小于 100 万,那么您希望它显示为千位数字,例如12341 将显示为 £12.34K
  3. 如果该值小于 1000,则显示 as-is 到小数点后 2 位,例如123 将显示为 £123.00
  4. 否定只是用括号括起来

我使用以下方法创建了一个示例数据集(如果您想重现)

DECLARE @t TABLE(id int, amount float)
INSERT INTO @t VALUES
(1, 1), (2,99), (3,99123), (4, 999123), (5, 1000000), (6, 12345678),
(7, -1), (8, -99), (9,-99123), (10, -999123), (11, -1000000), (12, -12345678)

SELECT * FROM @t

然后我添加了一个简单的 table 显示

ID 列(供参考)、未格式化的原始金额、使用“c2”标准货币格式格式化的原始金额、基于金额值的转换金额以及最后应用自定义格式的转换金额。

我只会解释最后一列,因为这可能是您想要的。

我做的第一件事是将最终文本框的表达式更改为

=SWITCH(
    ABS(Fields!amount.Value) >1000000, Fields!amount.Value / 1000000,
    ABS(Fields!amount.Value) >1000, Fields!amount.Value / 1000,
    True, Fields!amount.Value 
    )

这只是根据它的值来划分 amountSWITCH 在遇到第一个 returns 为真的表达式时停止,因此无需担心某些值之间的数量。 注意 我测试 ABS(amount) 以相同的方式对 +ive 和 -ive 数字进行除法运算。最后的 True 就像 else.

您可以在“原始转换金额”列中看到此表达式给出的输出。

在最终文本框的格式 属性 中,我将表达式设置为

=SWITCH(
    ABS(Fields!amount.Value) > 1000000, "£#.00M;(£#.00M)",
    ABS(Fields!amount.Value) > 1000, "£#.00K;(£#.00K)",
    True, "£#.00;(£#.00)"
    )

我们正在执行与转换金额相同的检查,但这次返回的是有效的格式字符串。在这个例子中,我使用了一个 2 部分的字符串,semi-colon 之前的位适用于 +ive 数字和零。第二部分仅适用于 -5 个数字。

最终输出如下所示...