---
title: "Orders"
description: |
  One row per order — the header of the transaction, with the money on it and the reason it
  exists. Every order says whether it was a one-time purchase, the first order of a new
  subscription, or a recurring delivery, and recurring orders carry the subscription and the
  cycle they belong to. That single classification is what separates predictable revenue from
  the rest without leaving the order grain.

  Gross sales, discounts, tax, shipping and net revenue all sit on the header, so the discount
  the subscription programme gives away is measurable rather than assumed. Retail and wholesale
  orders are flagged apart, and cancelled or returned orders keep their row, so booked and
  settled revenue never quietly merge.
tags: ["owox"]
type: "OWOX Data Mart"
timestamp: 2026-08-01T08:55:49.000Z
---

# Schema

| Column | Type | Alias | Description |
|--------|------|-------|-------------|
| `order_id` | STRING | Order ID | PK. Unique identifier of the order. |
| `order_date` | DATE | Order Date | Date the order was placed. |
| `order_timestamp` | TIMESTAMP | Order Timestamp | Exact moment the order was placed, in UTC. |
| `customer_id` | STRING | Customer ID | Customer who placed the order. FK to [Customers](./customers.md) |
| `session_id` | STRING | Session ID | Browsing session the order was placed in. FK to [Sessions](./sessions.md) |
| `subscription_id` | STRING | Subscription ID | Subscription the order was generated by; empty on one-time orders. FK to [Subscriptions](./subscriptions.md) |
| `purchase_type` | STRING | Purchase Type | Why the order exists: One-time, Subscription first order or Subscription recurring. |
| `order_type` | STRING | Order Type | Whether the order is Retail or Wholesale. |
| `cycle_number` | INTEGER | Cycle Number | Which delivery cycle of the subscription this order fulfils; zero on one-time orders. |
| `status` | STRING | Status | Fulfilment state of the order: Completed, Cancelled or Returned. |
| `gross_sales` | FLOAT | Gross Sales | Value of the order before discounts, tax and shipping. |
| `discounts` | FLOAT | Discounts | Total discount applied to the order, including the subscription discount. |
| `tax` | FLOAT | Tax | Total tax charged on the order. |
| `shipping` | FLOAT | Shipping | Total shipping charged on the order. |
| `net_revenue` | FLOAT | Net Revenue | Revenue recognised for the order after discounts and returns. |
| `applied_discount_codes` | STRING | Applied Discount Codes | Promotional codes the customer used at checkout. |
| `loyalty_segment` | STRING | Loyalty Segment | Loyalty band the customer was in when the order was placed. |
| `currency` | STRING | Currency | Three-letter code of the currency the order was placed in. |
| `items_count` | INTEGER | Items Count | Number of order lines on the order. |

# Example Questions

- What share of revenue is recurring, and how has the mix of one-time, first and recurring `subscription orders` shifted?
- How does average order value compare between one-time buyers and subscribers once `subscription discounts` are counted?
- How much is the `subscription programme` giving away in discounts, and how does that compare with the revenue it secures?

## Joins

- [Customers](./customers.md) — `customer_id = customer_id`
- [Sessions](./sessions.md) — `session_id = session_id`
- [Subscriptions](./subscriptions.md) — `subscription_id = subscription_id`
