Функция SQL, которая оценивает значения, возвращаемые в полях SSRS

#sql #vb.net #function #reporting-services #ssrs-2012

#sql #vb.net #функция #службы отчетов #ssrs-2012

Вопрос:

Мне поручено выполнить объединение SQL для чисел DEA и NPI, чтобы вернуть доступное значение, не будет случаев, когда для Dr. Доступны значения DEA и NPI. Это то, что я сейчас использую в своем скрипте:

 coalesce(nullif(convert(varchar,NationalProviderIdentifier),'0'), DEANumber) as 'DrID' 
  

Неизвестные значения могут быть определены как имеющие следующие значения:
«Неизвестный»
0
0000000000
«пустой»

Мне нужно будет указать наведение курсора мыши на значение Dr. id, в котором будет указано либо «Номер DEA», либо «Номер NPI» в зависимости от того, что отображается. Я написал следующий VB-код для выражения всплывающей подсказки, и он работает нормально:

 =IIF(Fields!DrID.Value = "Unknown" or Fields!DrID.Value = "" or Fields!DrID.Value = "0000000000", "DEA/NPI Unavailable", 
IIF(Len(Fields!DrID.Value) > 9, "NPI", "DEA"))
  

Будут случаи, когда и DEA, и номер NPI неизвестны, что я и проверяю в первом разделе IIF VB. Второй оператор IFF определяет, является ли возвращаемое значение номером NPI (длиной 10 цифр) или DEA (длиной 9 цифр).

Мне посоветовали сделать мой VB менее сложным, используя функцию SQL. Я не написал много функций, и я не уверен, как поступить. Я предполагаю, что я буду ссылаться не на функцию в Visual Studio, а где-то в основном наборе данных, который извлекает поле данных DrID?

Комментарии:

1. Если вы используете case инструкцию в SQL, вы обрабатываете ее так же, как и любой другой столбец в SSRS.

Ответ №1:

Ну, простым способом было бы добавить дополнительный столбец в ваш SQL-запрос, например, так (предполагается, что NationalProviderIdentifier является INT и что ни один из них не допускает нулей):

 CASE WHEN NationalProviderIdentifier <> 0 THEN 'NPI'
     WHEN DEANumber IN('Unknown','','0000000000') THEN 'N/A'
     ELSE 'DEA' END  as 'DrIdSrc' 
  

Комментарии:

1. Спасибо! Мой руководитель действительно настаивает на том, чтобы функция справилась с этим. Я полагаю, что его рассуждения заключаются в том, что существует несколько отчетов SSRS, в которых есть столбец «Dr ID», и что, если что-то потребуется изменить с помощью этой логики в будущем, нам нужно будет только изменить функцию вместо каждой процедуры отчета. Не уверен, имеет ли это смысл. Опять же, у меня не было большого опыта работы с функциями, но представьте, что им нужно будет принимать какой-то параметр.