根据 s-s-rS 中另一列的值更改数字格式
Posted
技术标签:
【中文标题】根据 s-s-rS 中另一列的值更改数字格式【英文标题】:Change number formatting based on values of another column in s-s-rS 【发布时间】:2020-05-27 05:51:32 【问题描述】:我想根据另一列更改值的格式。 基本上,基于 Type column ,我想更改数字格式。任何帮助将不胜感激。
以下是当前的 tablix 报告。它有 3 列(类型、美国和英国)。它总是有 4 行(销售额、数量、百分比和备注)。 我尝试使用 Format 函数,但它对其他行抛出错误。 Switch(Fields!Quantity.Value = "Quantity",FormatNumber(Fields!US.Value,0))
键入 US UK
销售额 123.36 2122.2
数量 2345 3451
百分比 0.81 0.91
Notes NetSales GrossSales
日期 2020 年 5 月 20 日上午 11:00 2020 年 5 月 20 日下午 12:00
现在,我想将它们显示如下
键入 US UK
销售额 123.36 美元 2,122.2 英镑
数量 2,345 3,451
百分比 81% 91%
Notes NetSales GrossSales
日期上午 11 点 12 点
【问题讨论】:
【参考方案1】:假设您的数据集查询实际上返回了样本中出现的这 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),"$0.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")
【讨论】:
最后一件事(我希望),如果另一行中有日期字段并且需要转换为小时,那么下面的工作? =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 = "百分比", FORMAT(VAL(Fields!UK.Value),"p0"), Fields!Type.Value = "PDate", FORMAT(VAL(Fields!UK. Value),"hh:mm tt"), True, Fields!US.Value) 两件事。 1)。注意错字(在我对英国列表达式最后一行的回答中更正了)。 2)。您能否更新您的问题并展示一个示例,因为我不确定您在问什么。 抱歉没有解释清楚。我的意思是如果有第 5 行称为日期。我们如何转换它? Type US UK Sales 123.36 2122.2 Quantity 2345 3451 Percentage 0.81 0.91 Notes NetSales GrossSales Date 2020 年 5 月 20 日上午 11:00 2020 年 5 月 20 日 12:00PM 以下是我需要的键入 US UK销售额 $123.36 £2,122.2 数量 2,345 3,451 百分比 81% 91% 备注 NetSales GrossSales 日期 11AM 12PM 如果取决于日期的格式。如果是字符串,那么您可能必须先将其转换为日期,然后再应用格式。请注意,在类似情况下的拼写错误我不小心将 Field!US.Value 用于 UK 表达式,这显然应该是 UK。编辑问题,以便显示确切的日期格式,我将相应地编辑答案。请不要添加 cmets 来解释,最好编辑原始问题。如果有机会,我会在今晚晚些时候再次入住 如果我使用下面的语句,则日期显示准确,即上午 11 点和下午 12 点,但其余所有行都显示为 #Error。 =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)【参考方案2】:“Switch”功能非常适合您的场景。 唯一缺少的是您的条件的输出, 你可以在这里找到它:
s-s-rS - formatting fields to show currency symbol with two place decimal 或这里
formatting fields to show currency in s-s-rS
【讨论】:
以上是关于根据 s-s-rS 中另一列的值更改数字格式的主要内容,如果未能解决你的问题,请参考以下文章