Значения Bold Specifi c в выражении в SSRS - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь сделать несколько значений "полужирным" в выражении, когда значение содержит "х". Html Свойства заполнителя не соответствуют моим потребностям, и я изо всех сил пытаюсь заставить его работать с приведенным ниже, поскольку в моем выражении есть несколько операторов:

= (IIF (Fields! Test1.Value) = "x", "Жирный", "Нормальный") ИЛИ (Поля! Test2.Value = "x", "Жирный", "Нормальный") et c et c

Я думаю, что мне нужно создать пользовательскую функцию кода, а затем вызвать функцию, где это необходимо в выражении, но я понятия не имею, с чего начать! Любая помощь будет принята с благодарностью.

Обновление:

Переключатель работает, но выделяет все выражение целиком, а не только значения, указанные в свойствах заполнителя выражения. Я считаю, что это связано с тем, что мое основное выражение объединяет поля, создающие одну длинную строку.

Экспонент-заполнитель

Результат

Значение 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 |
+-----------+------------+-----------+------------------+------------------+-----------+-----------+------------+-----------+-------------------+---------+--------------+-----------+----------------+-------------------------------+-----------------+---------------+--------------+----------+------------------+------------------+------------------+------------------+------------+---+------------+-----------+-------------------+-----------+--------------+-----------+----------------+---------+----------+-------------------+----------------------+---------------+----------------+---------+

1 Ответ

0 голосов
/ 20 апреля 2020

Не должно быть необходимости в пользовательском коде, хотя в зависимости от сложности правил, которые вы можете рассмотреть 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» действует как остальное. SWITCH если легче читать, чем вложенные IIF s, но IIF может быть проще, если правила просты.

ОБНОВЛЕНИЕ:

Следующее показывает, как это с использованием HTML, сгенерированного в запросе набора данных. Я почти ничего не знаю о HTML, это может быть исправлено, но вот куда я попал ....

На основе вашей таблицы-примера я создал новый столбец с HTML версией адреса, используя </p> для создания разрывов строк.

Он также подавляет пустые строки.

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 столбцами, один для HomeAddrFormattedP1, first_name и last_name

Затем все, что я сделал, это щелкнул правой кнопкой мыши заполнитель HomeAddrFormattedP1 и установил для его свойств значение Markup Type = HTML

Это дало следующий конечный результат.

enter image description here

...