reporting-servicessubstringssrs-2012string-concatenationssrs-expression

Bold Specific Values in Expression in SSRS


I'm trying to make multiple values "Bold" within an expression when the value contains "x". Html Placeholder properties doesn't meet my need and I'm struggling to get it working with the below as there are multiple statements in my expression:

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

I think I need to create a custom code function then call the function where needed in the expression but I haven't a clue where to start! Any help would be greatly appreciated.

Update:

Switch is working but bolding whole expression not just values specified within Placeholder Properties of expression. I believe this is because my main expression has concatenated fields creating one long string.

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 |
+-----------+------------+-----------+------------------+------------------+-----------+-----------+------------+-----------+-------------------+---------+--------------+-----------+----------------+-------------------------------+-----------------+---------------+--------------+----------+------------------+------------------+------------------+------------------+------------+---+------------+-----------+-------------------+-----------+--------------+-----------+----------------+---------+----------+-------------------+----------------------+---------------+----------------+---------+

Solution

  • There should be no need for custom code although depending on how complex the rules are you may want to consider SWITCH.

    Based on your simple example you could do either of these

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

    or for a more complex situation

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

    SWITCH Evaluates each expression/result pair and stops when it hits the first that evalutes to True. The final 'True, Nothing' acts like an else. SWITCH if easier to read than nested IIFs but IIF can be simpler if the rules are simple.

    UPDATE:

    The following shows doing this using HTML generated in the dataset query. I know next to nothing about HTML this this may be fixable but here's where I got to ....

    Based on your sample table I created a new column with a HTML version of the address using </p> to create the line breaks.

    It also suppresses blank rows.

    The sql looks something like

    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
    

    Using this as my report's dataset query I then added a simple table with 3 columns one for HomeAddrFormattedP1, first_name and last_name

    All I did then was right-click the HomeAddrFormattedP1 placeholder and set its properties to Markup Type = HTML

    This gave the following final result.

    enter image description here