【问题标题】:Bold Specific Values in Expression in SSRSSSRS 中表达式中的粗体特定值
【发布时间】:2020-04-20 18:23:12
【问题描述】:

当值包含“x”时,我试图在表达式中使多个值“粗体”。 Html 占位符属性不符合我的需要,我正在努力让它与以下内容一起使用,因为我的表达式中有多个语句:

=(IIF(Fields!Test1.Value="x", "Bold", "Normal") OR (Fields!Test2.Value="x", "Bold", "Normal") 等等

我想我需要创建一个自定义代码函数,然后在表达式中需要的地方调用该函数,但我不知道从哪里开始!任何帮助将不胜感激。

更新:

Switch 正在工作,但将整个表达式加粗,而不仅仅是在表达式的占位符属性中指定的值。我相信这是因为我的主要表达式连接了创建一个长字符串的字段。

Placeholder exp

Result

Value exp

+-----------+------------+-----------+------------------+------------------+-----------+-----------+------------+-----------+-------------------+---------+--------------+-----------+----------------+-------------------------------+-----------------+---------------+--------------+----------+------------------+------------------+------------------+------------------+------------+---+------------+-----------+-------------------+-----------+--------------+-----------+----------------+---------+----------+-------------------+----------------------+---------------+----------------+---------+
| id_number | first_name | last_name | pref_address_ind | h_addr_type_code | h_care_of | h_street1 | h_street2  | h_street3 | h_foreign_cityzip | h_city  | h_state_code | h_zipcode | h_country_code |        h_email_address        | p_email_address |    h_phone    |              | hc_phone | b_company_name_1 | b_company_name_2 | b_business_title | fld_of_work_code | b_street1  |   | b_street2  | b_street3 | b_foreign_cityzip |  b_city   | b_state_code | b_zipcode | b_country_code | b_phone | bc_phone |  b_email_address  |                      | full_business | pref_email_ind | Main_ID |
+-----------+------------+-----------+------------------+------------------+-----------+-----------+------------+-----------+-------------------+---------+--------------+-----------+----------------+-------------------------------+-----------------+---------------+--------------+----------+------------------+------------------+------------------+------------------+------------+---+------------+-----------+-------------------+-----------+--------------+-----------+----------------+---------+----------+-------------------+----------------------+---------------+----------------+---------+
|    165815 | Test       | Test1     | NULL             |                  | NULL      | NULL      | x Apt #09  | NULL      | NULL              | NULL    | NULL         | NULL      | x USA          | NULL                          | NULL            | DELETED       |              | DELETED  | NULL             | ~                | NULL             | NULL             | NULL       |   | NULL       | NULL      | NULL              | NULL      | NULL         | NULL      | NULL           | NULL    | NULL     | NULL              |                      | NULL          | NULL           |  165815 |
|    165816 | Test       | Test2     | NULL             |                  | NULL      | Street    | x Street 1 | x Street2 | NULL              | Houston | NULL         | NULL      | NULL           | x Home Email:testing@test.com | NULL            | x Home Phone: | 111-111-1111 | NULL     | NULL             | ~                | NULL             | NULL             | x Business | 1 | x Street 2 | NULL      | NULL              | x Houston | x TX         | x 77777   | NULL           | NULL    | NULL     | x Business Email: | btesting@testing.com | NULL          | NULL           |  165816 |
+-----------+------------+-----------+------------------+------------------+-----------+-----------+------------+-----------+-------------------+---------+--------------+-----------+----------------+-------------------------------+-----------------+---------------+--------------+----------+------------------+------------------+------------------+------------------+------------+---+------------+-----------+-------------------+-----------+--------------+-----------+----------------+---------+----------+-------------------+----------------------+---------------+----------------+---------+

【问题讨论】:

    标签: reporting-services substring ssrs-2012 string-concatenation ssrs-expression


    【解决方案1】:

    应该不需要自定义代码,但根据规则的复杂程度,您可能需要考虑SWITCH

    根据您的简单示例,您可以执行以下任一操作

    =IIF(
         Fields!Test1.Value = "x" OR Fields!Test2.Value = "x",
         "Bold", 
         Nothing)
    

    或更复杂的情况

    = SWITCH (
              Fields!Test1l.Value = "x" OR Fields!Test2.Value="x", "Bold",
              Feilds!Test3.Value = "Z" AND Fields!Test4.Value >10, "SemiBold",
              True, Nothing)
    

    SWITCH 计算每个表达式/结果对,并在遇到第一个计算结果为 True 时停止。最后的“True, Nothing”就像一个 else。 SWITCH 如果比嵌套的 IIFs 更容易阅读,但如果规则简单,IIF 会更简单。

    更新:

    下面显示了使用数据集查询中生成的 HTML 来执行此操作。我对 HTML 几乎一无所知,这可能是可以修复的,但这就是我要去的地方......

    根据您的示例表,我使用</p> 创建了一个新列,其中包含地址的 HTML 版本以创建换行符。

    它还抑制空白行。

    sql 看起来像

    SELECT 
        HomeAddrFormattedP1 = '<p>Home Address: </p>' 
                            + IIF( ISNULL(h_street1,'')='', '', IIF( LEFT(h_street1,1) = 'x', '<b>' + h_street1 + '</b></p>', h_street1 + '</p>') )
                            + IIF( ISNULL(h_street2,'')='', '', IIF( LEFT(h_street2,1) = 'x', '<b>' + h_street2 + '</b></p>', h_street2 + '</p>') )
                            + IIF( ISNULL(h_street3,'')='', '', IIF( LEFT(h_street3,1) = 'x', '<b>' + h_street3 + '</b></p>', h_street3 + '</p>') )
                            + IIF( ISNULL(h_foreign_cityzip,'')='', '', IIF( LEFT(h_foreign_cityzip,1) = 'x', '<b>' + h_foreign_cityzip + '</b></p>', h_foreign_cityzip + '</p>') )
                            + IIF( ISNULL(h_city,'')='', '', IIF( LEFT(h_city,1) = 'x', '<b>' + h_city + '</b></p>', h_city + '</p>') )
                            + IIF( ISNULL(h_state_code,'')='', '', IIF( LEFT(h_state_code,1) = 'x', '<b>' + h_state_code + '</b></p>', h_state_code + '</p>') )
                            + IIF( ISNULL(h_zipcode,'')='', '', IIF( LEFT(h_zipcode,1) = 'x', '<b>' + h_zipcode + '</b></p>', h_zipcode + '</p>') )
                            + IIF( ISNULL(h_country_code,'')='', '', IIF( LEFT(h_country_code,1) = 'x', '<b>' + h_country_code + '</b></p>', h_country_code + '</p>') )                        
        , 
        *
    FROM myTable
    

    使用它作为我报告的数据集查询,然后我添加了一个简单的表,其中包含 3 列,其中一列分别用于 HomeAddrFormattedP1first_namelast_name

    然后我所做的就是右键单击 HomeAddrFormattedP1 占位符并将其属性设置为 Markup Type = HTML

    这给出了以下最终结果。

    【讨论】:

    • 感谢您的回复。我认为你是对的,SWITCH 是前进的方向,但它在表达式的其余值中添加了“粗体”,即使我只指定了表达式中的前两个值。我在表达式的占位符属性中的 FontWeight 中设置它。
    • 您可以在占位符属性中应用相同的表达式,而无需理会文本框属性。它应该以相同的方式工作。如果这不起作用,请使用问题的屏幕截图和任何相关表达来更新问题
    • 再次感谢艾伦。尽管如此,所有表达式值仍然变得粗体。我已经更新了问题。
    • 我假设您希望将第一个冒号之前的所有内容都视为正常重量?文本框本身是否有任何格式表达式?我刚刚创建了一个简单的示例,它按预期工作。如果您在文本框级别没有格式,您可以在报告中添加另一列,粘贴两个占位符(任何都可以,甚至是静态文本)并格式化其中的 1 以查看会发生什么。我看不出您发布的内容有什么问题,但可能有一些我看不到的东西导致了这种情况。
    • 谢谢艾伦。当我按照您的建议将值/占位符拆分到一个新的文本框中时,它可以工作,没问题。当我使用在新行/文本框中创建的表达式时,“粗体”再次重复。它可能与表达式中值的串联有关。要将它与我当前的表达式一起使用,我想我需要一些报告自定义代码来识别字符串中的“x”并相应地加粗值。
    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多