FileMaker - 如何将计算字段引用两个表排序?

时间:2011-12-05 18:59:14

标签: filemaker

他们,

假设我有这三个表*:

ClownOrders
------------
_pk_order_id
status

ClownOrderLines
----------------
_fk_order_id
_fk_clown_car_id
amount

ClownCars
---------------
_pk_clown_car_id

我想在“ClownCars”表格中提供一个计算列,显示此车辆所有订单的总金额,订单状态未被“取消”。

到目前为止的想法

我在“ClownCars”中创建了一个名为zz_g_canceled的新计算字段,它只包含常量“已取消”。

然后我在“ClownOrderLines”中创建了一个名为c_orderstatus的新计算字段,即ClownOrders:status。

然后我创建了一个名为“OpenClownOrderLines”的新表“ClownOrderLines”,并按此标准将其链接到“ClownCars”:

ClownOrderLines._fk_​​clown_car_id = ClownCars._pk_clown_car_id和ClownOrderLines.c_orderstatus!= ClownCars.zz_g_canceled。

最后我将这个计算字段添加到ClownCars中,名为totalOrdered,它是sum(OpenClownOrderLines :: amount)

但新栏目“totalOrdered”总是显示“?”现在。

*主题已更改为更好地保留您的兴趣

1 个答案:

答案 0 :(得分:3)

您不能在关系的下游使用未存储的计算字段。

在这种情况下,您试图通过关系中的OpenClownOrderLines :: c_orderstatus查看ClownCars中的OpenClownOrderLines表事件。

您可以将c_orderstatus设为存储值(文本字段或存储计算),但只要订单状态发生变化,就必须小心更新任何订单行。

(例如,如果状态更改是脚本化的,您可以将其包含在脚本中,但如果您以其他方式设置状态,则可能会遗忘。)

更好的方法是让订单行表计算金额,如果订单已被取消,则将其计为零。

然后汽车表可以安全地汇总所有订单行,知道任何已取消的订单行都不会增加总额:

ClownOrderLines::c_amount_if_open = If ( ClownOrders::status ≠ 'Cancelled' ; amount ; 0 )

ClownCars::totalOrdered = Sum ( ClownOrderLines::c_amount_if_open )