#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», и что, если что-то потребуется изменить с помощью этой логики в будущем, нам нужно будет только изменить функцию вместо каждой процедуры отчета. Не уверен, имеет ли это смысл. Опять же, у меня не было большого опыта работы с функциями, но представьте, что им нужно будет принимать какой-то параметр.