根据 SSRS 中另一列的值更改数字格式

Change number formatting based on values of another column in SSRS

我想根据另一列更改值的格式。 基本上,基于 Type column ,我想更改数字格式。任何帮助将不胜感激。

以下是当前的 Tablix 报告。它有 3 列(类型、美国和英国)。它总是有 4 行(销售额、数量、百分比和备注)。 我尝试使用 Format 函数,但它会向我抛出其他行的错误。 开关(字段!Quantity.Value = "Quantity",FormatNumber(字段!US.Value,0))

类型美国英国

销售额 123.36 2122.2

数量 2345 3451

百分比 0.81 0.91

备注 NetSales GrossSales

日期 2020 年 5 月 20 日 11:00AM 2020 年 5 月 20 日 12:00PM

现在,我想将它们显示如下

类型美国英国

销售额 123.36 美元 2,122.2 英镑

数量 2,345 3,451

百分比 81% 91%

备注 NetSales GrossSales

日期上午 11 点中午 12 点


Switch”函数非常适合您的场景。 唯一缺少的是您的条件的输出, 你可以在这里找到它:

SSRS - formatting fields to show currency symbol with two place decimal

或此处

formatting fields to show currency in SSRS

假设您的数据集查询实际上 returns 样本中出现的那 3 列,那么您需要测试 Type 列....

我在数据集查询中使用以下代码重新创建了记录集

DECLARE @t TABLE (Type varchar(10), US varchar(50), UK varchar(50))
INSERT INTO @t VALUES
    ('Sales', '123.36','2122.2'),
    ('Quantity', '2345','3451'),
    ('Percentage', '0.81',' 0.91'),
    ('Notes', 'NetSales','GrossSales')
SELECT * FROM @t

然后我添加了两个相同的表,一个用于显示未格式化的值,另一个用于在应用格式表达式后显示它们。

对于 US 列表达式,使用了以下表达式,它基本上将每个文本条目转换为一个值,然后从格式中应用。

=SWITCH(
    Fields!Type.Value = "Sales", FORMAT(VAL(Fields!US.Value),"[=11=].00"),
    Fields!Type.Value = "Quantity", FORMAT(VAL(Fields!US.Value),"n0"),
    Fields!Type.Value = "Percentage", FORMAT(VAL(Fields!US.Value),"p0"),
    Fields!Type.Value = "Date", FORMAT(cdate(Fields!US.Value), "HH:mm tt")
    True, Fields!US.Value
    )

英国的表达方式几乎相同。

=SWITCH(
    Fields!Type.Value = "Sales", FORMAT(VAL(Fields!UK.Value),"£0.00"),
    Fields!Type.Value = "Quantity", FORMAT(VAL(Fields!UK.Value),"n0"),
    Fields!Type.Value = "Percentage", FORMAT(VAL(Fields!UK.Value),"p0"),
    Fields!Type.Value = "Date", FORMAT(cdate(Fields!UK.Value), "HH:mm tt")
    True, Fields!UK.Value
    )

注意结局True就像ELSE

最终输出看起来像这样...

供参考 "n0" 表示使用小数点后零位的千位分隔符,"p0" 表示格式为小数点后零位的百分比。

根据来自 OP

的更多信息进行更新

如果您有一个字符串形式的日期,例如May 20 2020 11:00AM 然后您可以在 `True, Fields!UK.Value 之前向开关添加额外的一行。我编辑了上面的表达式以允许日期是字符串

使用Fields!Type.Value = "Date", FORMAT(cdate(Fields!UK.Value), "HH:mm tt")

我们所做的只是使用 CDATE() 将字符串转换为日期,然后格式化 tat 以仅以 AM/PM 格式显示小时数。

=FORMAT(cdate(Fields!dt.Value), "HH:mm tt")