Access 2007: как я могу сделать это EXPRESSION менее сложным?

Доступ говорит мне, что мое новое выражение является сложным. Раньше он работал, когда у нас было 10 уровней обслуживания, а сейчас у нас 19! Большой!

Мое выражение заключается в проверке СТОИМОСТИ наших услуг в поле [PriceCharged] и назначении соответствующих ЧАСОВ [Уровня обслуживания], когда я выполняю расчет, чтобы определить, сколько ВЫРАБОТКИ сделал каждый коллега, работая на клиента. В поле [EstimatedTime] хранятся фактические часы работы каждого коллеги.

[EstimatedTime]/[ServiceLevel]*[PriceCharged]

Отлично. Ниже приведена разбивка моего выражения СТОИМОСТЬ ЧАСОВ. Я поместил их в разные строки, чтобы их было легче читать - пожалуйста, не откладывайте на длину этого поста, в конце концов, это все та же информация.

Большое спасибо, Майк

Сервисный уровень: IIf([цена определена] = 100 (СТОИМОСТЬ),6(ЧАСЫ),

IIf ([цена взимается]=200 или [цена взимается]=210,12,5,

IIF ([pricecharged] = 300,19,

IIf ([цена взимается]=400 или [цена взимается] = 410,25,

IIF ([pricecharged] = 500,31,

IIF ([pricecharged] = 600,37.5,

IIF ([pricecharged] = 700,43,

IIf ([цена взимается]=800 или [цена взимается] = 810,50,

IIF ([pricecharged] = 900,56,

IIF ([pricecharged] = 1000,62.5,

IIF ([pricecharged] = 1100,69,

IIf ([цена взимается]=1200 или [цена взимается] = 1210,75,

IIf ([цена взимается]=1300 или [цена взимается]=1310 100,

IIF ([pricecharged]=1400.125,

IIF ([pricecharged] = 1500.150,

IIF ([pricecharged]=1600.175,

IIF ([pricecharged]=1700.200,

IIF ([pricecharged]=1800.225,

IIF ([pricecharged]=1900,250,0)))))))))))))))))))

3 ответа

Решение

Вы должны хранить значения, используемые в вашем выражении, в таблице. Таким образом, вы можете выполнить вычисления с помощью SQL-соединения и нескольких функций IIf(). И вы избежите сложных выражений (которые почти невозможно отладить) и зависимости от VBA (что сделает ваш запрос недоступным вне самого Access).

Вы используете JET или Access? Если вы используете Access, создайте функцию VBA, которая использует Select Case и заменить этот беспорядок кода с GetServiceLevel([PriceCharged]) AS ServiceLevel, Еще лучше написать функцию под названием GetRevenue,

Также обновитесь до SQL Server.

Где это выражение используется в форме, отчете или запросе?

Я думаю, что лучшим способом было бы создание глобальной функции и использование этой функции.

РЕДАКТИРОВАТЬ: кстати пробовал функцию переключения еще?

Другие вопросы по тегам