What this dashboard is for
The Menu dashboard plots every menu item on a 2×2 grid built from two numbers — how often a customer tries the item, and how often they come back for it. The result is a single picture of which items are pulling weight, which are tried but never re-ordered, and which are doing well but invisible to most customers.
Open it when you are about to refresh the menu, pricing dishes, or trying to decide what to feature and what to cut.
The two metrics on the axes
Order penetration (x-axis) — the share of total orders that contained the item. "Half of all customers ordered it" = 50%. This is "how often it gets tried".
Repeat order rate (y-axis) — among customers who ever ordered the item, the share that ordered it again on a later visit. This is "how often it brings someone back".
The data behind both metrics lives in a materialised view (menu_item_performance_v2_mv) refreshed periodically. Customers are identified using the customerId Papaya assigns to each cheque (a combination of device, contact, and history signals, not just a phone number).
The four quadrants
Items are classified into four groups based on whether they're in the top 50% of each metric for the menu they belong to:
Stars (top-right) — top 50% on both. Tried often AND brought back often. These are your franchise dishes. Protect them; feature them; raise the price slightly.
Under-promisers (top-left) — high repeat rate, low penetration. Customers who find them love them, but most customers don't find them. Cross-sell, feature, photograph better, move to the top of the menu.
Over-promisers (bottom-right) — high penetration, low repeat rate. Customers try them once and don't come back. Often the result of menu position or a tempting photo writing a cheque the dish can't cash. Investigate flavour, portion size, price.
Dead weight (bottom-left) — bottom 50% on both. Nobody tries them, and the few who do don't return. First candidates for the chop.
1. Menu Item Performance (scatter)
This scatter chart is interactive and best explored on the dashboard itself — hover any dot to see the item behind it.
Every menu item plotted as a dot. X-axis is order penetration, Y-axis is repeat order rate. Dot colour shows the performance group (Star / Under-promiser / Over-promiser / Dead weight).
Reading it: the most actionable items are the under-promisers in the top-left — they're already winning the customers who find them. A simple menu re-layout often moves them rightward in weeks.
How it's calculated: the underlying view computes, for every item:
OrderPenetration = (orders containing the item) ÷ (total orders at the outlet over the lookback window)
RepeatOrderRate = (customers who ordered the item on more than one separate visit) ÷ (customers who ordered the item at least once)
Performance group is then assigned by ranking the item against other items in the same menu — top half vs bottom half on each axis.
2. Menu Item Performance Table
The same data in table form, sortable. Columns include item name, menu, category, the two raw numbers (penetration %, repeat rate %), and the assigned performance group. Use it to pull a list of "show me every Dead weight item in my menu" or "sort by repeat rate descending".
How items are classified
Source data — closed orders (
status = 'complete') with confirmed items. The underlying materialised view aggregates over a recent rolling window (refreshed on schedule).Customer identity — Papaya's
customerId, which is assigned per cheque based on contact / payment / device signals. Two visits by the same diner are linked when those signals match.Date field —
reportingDatefor visit dating.Timezone — Asia/Bangkok.
"Repeat" — a customer counts as repeating an item only if they ordered it on at least two separate cheques (visits). Re-ordering the same dish twice on the same cheque does not make them a repeat customer.
Top vs Bottom 50% split — done within each menu, not globally. So an item is compared against its peers (other Food items, other Drinks items) rather than across menus.
Filters
Merchant ID — your merchant; usually pinned by the portal.
Outlet ID — your outlet.
Menu — narrow the scatter and table to one menu (e.g. just Food, just Drinks).
Category — narrow to a single category within a menu.
What this dashboard does NOT show
Per-item time series — use the Items dashboard's "Per Item Historical" tab.
Item-by-channel breakdown — see Items "Per Item Snapshot" or Channels "Items by Channel".
Margin / COGS per item — that lives in the Inventory module.
Item pairing (frequently-ordered-together) — that's the "Often ordered together" card inside Items > Per Item Snapshot.
Real-time data — the underlying view is refreshed on schedule, not on every load. Numbers may lag by up to a day.

