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.
Где это выражение используется в форме, отчете или запросе?
Я думаю, что лучшим способом было бы создание глобальной функции и использование этой функции.
РЕДАКТИРОВАТЬ: кстати пробовал функцию переключения еще?