根据 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 中另一列的值更改数字格式的主要内容,如果未能解决你的问题,请参考以下文章

根据火花数据框中另一列的值查找列的最大值?

如何根据R中小标题中另一列指示的列的值添加列

获取 ant.design 表列中另一列的值?

基于Scala中另一列的值映射RDD列

如果同一行中另一列中的值匹配,如何比较列的两个值

用 pandas 数据框中另一列的值填充多列中的 Na