Filemaker: если оператор умножается

Filemaker Pro 13, используя Windows 10 Comp. База данных используется с компьютеров Mac и Windows.

У меня есть поле расчета, которое определяет строковое значение другого поля, чтобы определить себя.

Field 1: Name   Field2: Position

If ( Field1 = "Bob" or "Joe" or "Carl" ; "Tech Assist")
If ( Field1 = "Susan" or "Hank" or "Alex" ; "Employee")

Filemaker принимает только первое значение оператора If, в этом примере "Bob" и "Susan". Все остальные оставлены пустыми. Вот так:

Name: Bob     Position: Tech Assist
Name: Joe     Position: ___________

Как мне получить Filemaker для просмотра всех возможностей?

4 ответа

Решение

После большого возни, Биг Босс и я поняли это. Кажется немного избыточным:

If ( Field1 = "Bob or Field1 = "Joe" or Field1 = "Carl" ; "Tech Assist")

Есть (по крайней мере) две проблемы с вашей попыткой:

  1. Тест Field1 = "Bob" or "Joe" or "Carl" оценивается как если бы вы написали (Field1 = "Bob") or ("Joe") or ("Carl") - так что он будет возвращать true только тогда, когда Field1 = "Bob";
  2. Вы не можете связать две инструкции If() вместе, как это. Хотя вы могли бы их вкладывать, вы действительно должны использовать здесь функцию Case(), скажем:

    Case ( 
    Field1 = "Bob" or Field1 = "Joe" or Field1 = "Carl" ; "Tech Assist" ;
    Field1 = "Susan" or Field1 = "Hank" or Field1 = "Alex" ; "Employee"
    )
    

Более серьезная проблема заключается в том, что вы жестко кодируете данные, которые почти наверняка в какой-то момент превратятся в формулу расчета.

То, что вы должны иметь, это связанная таблица персонала с полями для StaffID, имени и должности. Затем, когда вы заполните поле 1 в этой таблице с помощью идентификатора персонала назначенного сотрудника, соответствующая должность будет занесена из записи этого сотрудника в таблице персонала через связь.

С другой стороны...

Case(

Not IsEmpty( FilterValues( List( "Bob" ; "Joe" ; "Carl" ) ; Field1 ) ) ; 
"Tech Assist" ; 

Not IsEmpty( FilterValues( List( "Susan" ; "Hank" ; "Alex" ) ; Field1 ) ) ; 
"Employee"

)

Более долгосрочное решение будет иметь таблицу имен и отделов. Смотрите изображение на случай, если оно не ясно.

Образец таблицы персонала

Затем вы создадите связь между Field1 в вашей текущей таблице и полем "Name" в образце изображения. Оттуда, отношения выведет название отдела, так что вам не нужно, если, иначе, или дело. В противном случае вы обнаружите, что обновляете этот скрипт каждый раз, когда происходит изменение в вашем списке или их ролях в вашей компании. Отношения также позволят вам легко добавлять новые отделы без необходимости обновлять этот расчет.

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