У меня возникли проблемы с получением некоторой сложной логики IF для работы внутри запроса MS Access, и я чувствую себя жареным на этом этапе, поэтому я надеюсь, что свежая пара глаз поможет мне решить мою проблему.Сложная логика доступа Access
Следующий скриншот Надеюсь, это поможет сделать мою логику более ясной.
Мой конечный результат с формулой, чтобы определить, является ли заемщик (Borr) является устарелым с представленными документами. В этом случае я забочусь только о (P) FS и/или IE документов.
Условия для устаревания немного сложны, и я объясню их ниже. TRUE соответствует устаревшему состоянию и FALSE соответствует требованиям.
- Если
NR
флажок для(P)FS
иIE
Тогда FALSE - Если
NR
флажок не установлен для(P)FS
ИIE
и (P) FSdate is blank AND
IE` дата является пустым Тогда ИСТИНА
Это достаточно легко, но теперь для сложной части CYYY = текущий год, PYYY = предыдущий год, PY2Y = 2 года назад
- Если
(P)FS
илиIE
требуется, и если текущая дата находится в пределах от 1/1/CYYY и 4/30/CYYYY и дата в(P)FS
илиIE
находится в пределах от 10/1/PY2Y и 4/30/PYYY Тогда ЛОЖЬ остального ИСТИНЫ - Если
(P)FS
илиIE
не требуется, и если текущая дата находится в диапазоне от 5/1/CYYY и 9/30/CYYYY и дата в(P)FS
илиIE
составляет менее 1 года. Затем FALSE Else ИСТИНА - Последняя вещь, чтобы иметь в виду, что до тех пор, как существует уточненный
(P)FS
илиIE
документа, результат должен быть FALSE. Они оба не требуются. Это либо или.
Этот скриншот должен помочь уточнить дату формулы:
Это последняя формула доступа я вошел, но по-прежнему не работает. Я также думаю, что я знаю, почему, но я тоже обжаренный с этим, чтобы попытаться продолжить решать на данный момент:
B1-FS-IE: IIf([annual_review].[prop_cd]<>"0056" And [nr_fs_b1]=True And
[nr_ie_b1]=True,False,IIf(([nr_fs_b1]=False And IsNull([fs_b1])) And ([nr_ie_b1]=False
And IsNull([ie_b1])),True,IIf(Month([fs_b1])>9 Or Month([fs_b1])<5
And (Month(Date())<5 And Date()-[fs_b1]>576) Or (Month([fs_b1])>4
And Month([fs_b1])<10 And Date()-[fs_b1]>=365) Or Month([ie_b1])>9
Or Month([ie_b1])<5 And (Month(Date())<5 And Date()-[ie_b1]>576)
Or (Month([ie_b1])>4 And Month([ie_b1])<10 And Date()-[ie_b1]>=365),True,False)))
Наконец, я поместил Excel
тега, потому что если кто-то может решить эту проблему в Excel, я могу перевести на Access.
Формула, подобная этой, является не только кошмаром, но и для поддержания. Я бы поставил логику в общедоступную функцию VBA и передал соответствующие поля в качестве параметров. Там вы можете написать читаемый код. – Andre
@Andre - Блестящий! Я даже об этом не думал. Это упростило бы сборку, чтение, поддержку! Спасибо за изменение в перспективе, в которой я нуждался! –