{
  "version": "0.2.0.dev0",
  "name": "sample_shop",
  "description": "Orders for a fictional online coffee shop, with one row per order and one row per customer.",
  "datasets": [
    {
      "name": "orders",
      "source": "orders",
      "description": "One row per order.",
      "primary_key": ["order_id"],
      "fields": [
        { "name": "order_id", "expression": "order_id", "datatype": "Integer" },
        { "name": "customer_id", "expression": "customer_id", "datatype": "Integer" },
        { "name": "created_at", "expression": "created_at", "datatype": "Date", "description": "Day the order was placed." },
        { "name": "status", "expression": "status", "datatype": "String", "description": "completed, refunded or cancelled." },
        { "name": "channel", "expression": "channel", "datatype": "String", "description": "Where the order was placed." },
        { "name": "category", "expression": "category", "datatype": "String", "description": "Product category." },
        { "name": "items", "expression": "items", "datatype": "Integer" },
        { "name": "amount", "expression": "amount", "datatype": "Decimal" },
        { "name": "discount", "expression": "discount", "datatype": "Decimal" },
        { "name": "refund_amount", "expression": "refund_amount", "datatype": "Decimal" },
        { "name": "net_amount", "expression": "amount - discount - refund_amount", "datatype": "Decimal" }
      ]
    },
    {
      "name": "customers",
      "source": "customers",
      "description": "One row per customer.",
      "primary_key": ["id"],
      "fields": [
        { "name": "id", "expression": "id", "datatype": "Integer" },
        { "name": "segment", "expression": "segment", "datatype": "String", "description": "Consumer, Small business or Enterprise." },
        { "name": "country", "expression": "country", "datatype": "String" },
        { "name": "signup_date", "expression": "signup_date", "datatype": "Date" }
      ]
    }
  ],
  "relationships": [
    { "name": "orders_to_customers", "from": "orders", "to": "customers", "from_columns": ["customer_id"], "to_columns": ["id"] }
  ],
  "metrics": [
    { "name": "revenue", "description": "Net revenue: order amount minus discounts and refunds. Cancelled orders are excluded.", "expression": "SUM(CASE WHEN orders.status <> 'cancelled' THEN orders.net_amount ELSE 0 END)", "datatype": "Decimal" },
    { "name": "gross_sales", "description": "Order amount before discounts and refunds. Cancelled orders are excluded.", "expression": "SUM(CASE WHEN orders.status <> 'cancelled' THEN orders.amount ELSE 0 END)", "datatype": "Decimal" },
    { "name": "refunds", "description": "Total amount refunded to customers.", "expression": "SUM(orders.refund_amount)", "datatype": "Decimal" },
    { "name": "refund_rate", "description": "Refunds as a share of gross sales.", "expression": "refunds / NULLIF(gross_sales, 0)" },
    { "name": "order_count", "description": "Every order placed, including cancelled ones.", "expression": "COUNT(orders.order_id)", "datatype": "Integer" },
    { "name": "paid_orders", "description": "Orders that were not cancelled.", "expression": "COUNT(CASE WHEN orders.status <> 'cancelled' THEN orders.order_id END)", "datatype": "Integer" },
    { "name": "average_order_value", "description": "Net revenue per paid order.", "expression": "revenue / NULLIF(paid_orders, 0)" },
    { "name": "active_customers", "description": "Distinct customers who placed at least one order.", "expression": "COUNT(DISTINCT orders.customer_id)", "datatype": "Integer" },
    { "name": "items_sold", "description": "Units on orders that were not cancelled.", "expression": "SUM(CASE WHEN orders.status <> 'cancelled' THEN orders.items ELSE 0 END)", "datatype": "Integer" }
  ]
}
