Filemaker:If 语句倍数

Filemaker: If statement multiples

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 查看所有可能性?

我和大Boss折腾了好久才搞定。好像有点多余:

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

您的尝试存在(至少)两个问题:

  1. 测试 Field1 = "Bob" or "Joe" or "Carl" 的评估就像您已经编写了 (Field1 = "Bob") or ("Joe") or ("Carl") - 所以只有当 Field1 = "Bob";
  2. 时它才会 return 为真
  3. 你不能像那样将两个 If() 指令串在一起。虽然 你 可以 嵌套它们,你真的应该使用 Case() 函数在这里,说:

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

这里更严重的问题是您正在硬编码 数据,几乎肯定会在某个时候将其更改为计算公式。

应该拥有的是相关的 table 员工,其中包含员工 ID、姓名和职位字段。然后,当你在这个table中的Field1中填写指定员工的StaffID时,就会通过关系[=29]从该员工在Stafftable中的记录中取出相应的职位=].

或者...

Case(

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

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

)

一个长期的解决方案是拥有 table 的姓名和部门。不清楚的请看图

Staff Table Sample

然后您将在当前 table 中的 Field1 和示例图像中的 "Name" 字段之间建立关系。从那里,关系将输出部门的名称,这样您就不需要 if、else 或 case。否则,您会发现每次您的花名册或他们在您公司中的角色发生变化时,您自己都会更新此脚本。该关系还允许您轻松添加新部门,而无需更新此计算。