我有一张这样的桌子:
应用程序、程序、UsedObject
它可以有这样的数据:
A,P1,ZZ
A,P1,BB
A,P2,CC
B,F1,KK
我想创建一个布局来显示:
应用程序,# 程序
A,2
B,1
关键是计算不同的程序。
在我的一生中,我无法在 FileMaker 中完成这项工作。我创建了一个汇总字段来计算每组后重置的程序,但因为它不能消除我得到的重复程序:
A,3
B,1
非常感谢任何帮助。
我有一张这样的桌子:
应用程序、程序、UsedObject
它可以有这样的数据:
A,P1,ZZ
A,P1,BB
A,P2,CC
B,F1,KK
我想创建一个布局来显示:
应用程序,# 程序
A,2
B,1
关键是计算不同的程序。
在我的一生中,我无法在 FileMaker 中完成这项工作。我创建了一个汇总字段来计算每组后重置的程序,但因为它不能消除我得到的重复程序:
A,3
B,1
非常感谢任何帮助。
创建一个汇总字段为:cntApplicaiton = Count of Application
为此,请进入定义字段,创建一个名为 cntApplication 的字段,输入摘要。在选项对话框中,使摘要字段成为应用程序的计数
现在创建一个新的布局,其中包含一个小计部分并且没有人。小结应按应用程序排序。将 Application 和 cntApplication 字段放在 subsummary 中。如果您进入浏览模式并按应用程序排序,您应该得到您想要的数据。
您还可以使用公式 GetSummary(cntApplication; Application) 创建一个计算字段,这将允许您在记录中使用应用程序的总数
由于我也是生成这个表格的数据,所以我采用的解决方案是在 FileMaker 中填写两个表格。一个提供摘要视图,另一个提供详细视图。
我认为您的问题归结为重复记录和密钥不足。
创建一个名为“App_Prog”的文本字段。在选项框中将其设置为自动输入计算,取消选中“不替换...”选项,并使用以下计算:
Application & "_" & Program
现在使用 App_Prog 作为双方的字段创建表的自联接,并将其称为“MatchingApps”。
现在,创建(如果您还没有)一个唯一的序列号字段,例如“计数器”,并确保在每条记录中输入一个值。(查找全部,单击该字段,然后使用“替换字段内容...”中的序列号选项)
现在添加一个新的计算字段 - Is_Duplicate 与以下计算...
If (Counter = MatchingApps::Counter; "Master Record" ; "Duplicate")
最后,找到所有,单击“应用程序字段”,并使用“替换字段内容...”进行计算,以强制“App_Prog”的自动输入计算得出一个值。
这对你有什么好处?您现在应该有一组标记为“主记录”或“重复”的记录。在“主记录”上进行查找,然后您可以执行摘要(按应用程序)以计算不同的应用程序-程序对。
如果您可以访问自定义函数(您需要 FileMaker Pro Advanced),我会这样做:
添加此处找到的 RemoveDuplicates 函数(这是一个递归函数,它接受字符串列表并返回唯一值列表)。
在关系图中,添加另一个表并添加 Application = Application 关系。
在表中创建一个计算字段,计算结果如下所示:
ValueCount(RemoveDuplicates(List(TABLE2::Program)))
您会发现每条记录将包含给定应用程序的不同程序的数量。从这里开始,显示每个应用程序的摘要应该相对简单。
我认为最好的方法是创建一个单独的应用程序表。因此,当您提供数据时,它将有两条记录,一条用于 A,一条用于 B。
因此,通过添加 Applications 表和您的现有表(我将其称为 Objects),基于 ApplicationName 作为匹配字段,创建从 Applications 到 Objects 的关系(具有称为 ObjectsParent 的表)。使用 Application 和 Program 作为匹配字段,在 Objects 与其自身之间创建自连接关系。我将调用其中一个“表事件”ObjectsParent 和另一个 ObjectsChildren。确保对象中有一个主键字段设置为自动输入序列号或其他方法以确保唯一性。我会打电话给这个ID。
所以你的关系图有三个表出现:
Applications::Applicaiton = ObjectsParent::Application
ObjectsParent::Application = ObjectsChildren::Application,ObjectsParent::Program = ObjectsChildren::Program
现在在 Objects 中创建一个计算字段,并从 ObjectsParent 的上下文中计算,给它以下公式:
AppCount = Count(ObjectsChildren::ID)
在 Applications 中创建一个计算字段,并使用以下公式从用于将其与 ObjectsParent 关联的表出现的上下文进行计算:
AppCount = ObjectsParent::AppCount
对于具有相同应用程序的每个对象,Objects 中的 count 字段将具有相同的值,因此从哪个对象获取此数据并不重要。
如果您现在在列表视图中查看 Applications 中的数据,您可以将 Applications::Application 和 Applications::AppCount 字段放在布局上,您应该会得到您所请求的内容。