RELATED() vs EXTEND()

The EXTEND() operation is the general-purpose mechanism for joining features across entities. The RELATED() function family provides a more concise and easier to understand syntax for simple cases.

Use RELATED() if possible, and EXTEND() when you need work with many foreign keys or require more explicit control over the binding logic.

foreign key ↔ primary key

FeatureQL
SELECT
    CUSTOMER_ID,
    ORDER_CITY_RELATED := RELATED(TABLES.FCT_ORDERS[order_city_name] VIA TABLES.AGG_CUSTOMERS_OBT[last_order_id]),
    ORDER_CITY_EXTEND := EXTEND(
        ROW(TABLES.AGG_CUSTOMERS_OBT[last_order_id] as last_order_id)
        WITH TABLES.FCT_ORDERS[order_city_name] as CITY_NAME
        VIA last_order_id BOUND TO ORDER_ID
    )[CITY_NAME]
FROM FM.ECOMM
FOR
    CUSTOMER_ID := BIND_VALUES(SEQUENCE(100,102)),
;
Result
FM.ECOMM.CUSTOMER_ID BIGINTORDER_CITY_RELATED VARCHARORDER_CITY_EXTEND VARCHAR
100BarcelonaBarcelona
101BarcelonaBarcelona
102BarcelonaBarcelona

foreign key ↔ foreign key

FeatureQL
SELECT
    CUSTOMER_ID,
    NUM_ORDERS_RELATED := RELATED(SUM(1) GROUP BY TABLES.FCT_ORDERS[order_customer_id] VIA CUSTOMER_ID),
    NUM_ORDERS_EXTEND := EXTEND(
        ROW(CUSTOMER_ID as CUSTOMER_ID)
        WITH SUM(1) GROUP BY TABLES.FCT_ORDERS[order_customer_id] as num_orders
        VIA CUSTOMER_ID BOUND TO TABLES.FCT_ORDERS[order_customer_id]
    )[num_orders]
FROM FM.ECOMM
FOR
    CUSTOMER_ID := BIND_VALUES(SEQUENCE(100,102)),
    ORDER_ID := BIND_VALUES(SEQUENCE(200,203)),
;
Result
FM.ECOMM.CUSTOMER_ID BIGINTNUM_ORDERS_RELATED BIGINTNUM_ORDERS_EXTEND VARCHAR
10022
10111
10211

Last update at: 2026/02/16 15:46:17
Last updated: 2026-02-16 15:46:51