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")
您的尝试存在(至少)两个问题:
- 测试
Field1 = "Bob" or "Joe" or "Carl"
的评估就像您已经编写了 (Field1 = "Bob") or ("Joe") or ("Carl")
- 所以只有当 Field1 = "Bob"; 时它才会 return 为真
你不能像那样将两个 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。否则,您会发现每次您的花名册或他们在您公司中的角色发生变化时,您自己都会更新此脚本。该关系还允许您轻松添加新部门,而无需更新此计算。
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")
您的尝试存在(至少)两个问题:
- 测试
Field1 = "Bob" or "Joe" or "Carl"
的评估就像您已经编写了(Field1 = "Bob") or ("Joe") or ("Carl")
- 所以只有当 Field1 = "Bob"; 时它才会 return 为真
你不能像那样将两个 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。否则,您会发现每次您的花名册或他们在您公司中的角色发生变化时,您自己都会更新此脚本。该关系还允许您轻松添加新部门,而无需更新此计算。