Skip to main content

Channels dashboard

Where orders come from — dine-in, takeaway, direct delivery, partner platforms — with revenue, orders, AOV, partner commission, and item-by-channel splits.

Written by HB

What this dashboard is for

The Channels dashboard tells you where your orders are coming from — dine-in, takeaway, direct delivery, partner platforms (Grab, LINE MAN, Foodpanda, ShopeeFood, Robinhood, etc.), and co-located venues — and how each of those channels is performing on revenue, orders, and average ticket.

Open it when you want to understand channel mix, see whether partner platforms are growing or eating margin, or compare what items sell on which channels.

The channel naming convention

Throughout every chart the channels are labelled by a single canonical name derived from channelType and channelName:

  • Dine-inchannelType = 'dine-in'.

  • Prepay Dine-in — orders paid up-front but consumed on premises.

  • Takeaway — direct takeaway prepay orders.

  • Direct Delivery — your own delivery channel (no third-party partner).

  • Partner — Grab, LINE MAN, Foodpanda, ShopeeFood, Robinhood, Foodie, Hungry Hub, Classpass, Lalamove, etc. Each partner is its own bar/segment, taken from the order's channelName.

  • Co-located venue — orders routed through a host venue (merchant-partner).

Wherever the order has no channel information at all, it shows up as "Unknown". This should be very rare in normal data.

The eight tabs

  • Overall — pies + a combo chart showing channel mix for the whole range.

  • Weekly / Monthly / Yearly / Daily — same set of four charts (revenue, orders, AOV, detail table) grouped by that time bucket.

  • Partners — same lens but restricted to partner platforms, plus a commission split.

  • Items by Channel — top 20 items, split by which channel sold them.

  • Weekday — channel volume by hour-of-week heatmap.


Overall tab

1. Revenue %

Revenue % by Channel

Share of revenue from each channel as a pie. The whole pie is total revenue across the selected date range; each slice is one channel.

How it's calculated: sum of orders.total on closed orders (status = 'complete'), grouped by the canonical channel name.

2. Orders %

Orders % by Channel

The same pie, but counting orders instead of revenue. Compare the two — a channel can be a big chunk of orders but a small chunk of revenue (or vice versa) if its tickets are unusually small or big.

3. AOV

AOV by Channel

Average order value per channel — bars side-by-side so you can compare ticket sizes across channels.

How it's calculated: revenue ÷ orders per channel.

4. Revenue | by Channel

Revenue by Channel combo

A combo chart: bars are revenue per channel (sorted descending), the line on top is the cumulative share ("Cumulative %") of total sales as you walk across channels from biggest to smallest. The right-edge of the line is always 100%.

Reading it: the point on the cumulative line that crosses 80% tells you how many channels make up 80% of your revenue. If two channels get you there, you are highly concentrated.

5. Orders | by Channel

Orders by Channel combo

The same chart, by order count rather than revenue.


Weekly tab

1. Revenue by Channel | Weekly

Revenue by Channel Weekly

Stacked bars: one bar per week, segmented by channel. Week is Monday-to-Sunday in Bangkok time.

2. Orders by Channel | Weekly

Orders by Channel Weekly

Same shape, counting orders.

3. AOV by Channel | Weekly

AOV by Channel Weekly

One line per channel showing how each channel's average ticket has moved over time.

4. Channel Detail Table | Weekly

Channel Detail Table Weekly

A pivot table with one row per week and one column per channel, showing the underlying numbers behind the charts above. Use it when you need an exact value for one cell.


Monthly tab

Same four charts as Weekly, grouped by calendar month.

1. Revenue by Channel | Monthly

Revenue by Channel Monthly

2. Orders by Channel | Monthly

Orders by Channel Monthly

3. AOV by Channel | Monthly

AOV by Channel Monthly

4. Channel Detail Table | Monthly

Channel Detail Table Monthly


Yearly tab

Same four charts, grouped by calendar year. Most informative for outlets with two or more years of data.

1. Revenue by Channel | Yearly

Revenue by Channel Yearly

2. Orders by Channel | Yearly

Orders by Channel Yearly

3. AOV by Channel | Yearly

AOV by Channel Yearly

4. Channel Detail Table | Yearly

Channel Detail Table Yearly


Daily tab

Same four charts, one bar per business day. Useful for spotting outlier days — a partner platform outage, a big private dine-in event, an unusual delivery surge.

1. Revenue by Channel | Daily

Revenue by Channel Daily

2. Orders by Channel | Daily

Orders by Channel Daily

3. AOV by Channel | Daily

AOV by Channel Daily

4. Channel Detail Table | Daily

Channel Detail Table Daily


Partners tab

This tab restricts every chart to partner orders only — channelType = 'partner'. Use it when you want to compare partner platforms head-to-head (Grab vs LINE MAN vs Foodpanda etc.) without dine-in or takeaway in the picture.

1. Partner Revenue %

Partner Revenue %

Pie of revenue across partner platforms. Each slice is one partner.

2. Partner Orders %

Partner Orders %

3. AOV

AOV by Partner

Average ticket per partner platform.

4. Partner Revenue | Weekly

Partner Revenue Weekly

Weekly stacked bars across partners only. Lets you see one partner growing while another shrinks.

5. Commission (GP) | by Partner

Commission by Partner

For each partner, two bars side by side: the revenue you keep, and the commission paid out to the platform. Together they sum to the gross sales on that partner.

How it's calculated: we apply the commissionRate stored on the partner's channel record (in channels.partnerInfo.commissionRate) to each order's gross. So Commission paid = gross × commissionRate, Revenue you keep = gross × (1 − commissionRate). If a partner channel has no commission rate configured, the rate is treated as 0 (so all revenue is "kept" on the chart, which is usually not what you want — make sure the partner's commission rate is set in Channels.)


Items by Channel tab

1. Revenue | Top Items by Channel

Top Items by Channel

The 20 best-selling items by revenue across the whole range, with each item's bar segmented to show what share came from each channel.

Reading it: a stalwart dine-in item suddenly showing a big partner segment means the dish travels well and could be promoted on delivery. An item with no dine-in segment but heavy partner share is a delivery-only winner.

How it's calculated: sum of order_items.itemTotal on confirmed items (order_items.status = 'confirmed') in closed orders, then take the top 20 items by total revenue, and split each by canonical channel.

2. Revenue | Top Items by Channel (table)

Top Items by Channel table

The same top-20 items as the chart above, laid out as a table: one row per item, one column per channel, revenue in each cell. Columns appear automatically for every channel you use — including custom and partner channels — so it adapts as you add channels. Blank cells mean the item never sold on that channel. Money is on the item-subtotal basis (before discounts, service charge and tax).


Weekday tab

1. Channel × Hour-of-Week — Order Volume

Channel by Hour of Week

A 168-bucket view (7 days × 24 hours) of order volume, with each hour-of-week stacked by channel. The labels along the bottom run Mon 00:00, Mon 01:00, …, through Sun 23:00.

Reading it: the natural rhythm of your week. Dine-in peaks at lunch and dinner; partner platforms often have a different shape (lunch heavy, late-night spike). If one channel suddenly fills an hour where it didn't before, that is a structural change worth investigating.

How it's calculated: count of closed orders, bucketed by EXTRACT(ISODOW FROM reportingDate) and EXTRACT(HOUR FROM orderDate) in Bangkok time, then split by canonical channel.


How channels are defined

  • Source columnsorders.channelType (the type: dine-in, prepay-takeaway, partner, merchant-partner, etc.) and orders.channelName (the specific name: "Grab", "LINE MAN", "Foodpanda", a co-located venue name, etc.).

  • Status filter — every chart uses closed orders only (status = 'complete'). Voided and still-open tabs are excluded.

  • Item filter — on item-level charts, only confirmed items count (order_items.status = 'confirmed').

  • Date fieldreportingDate for all time buckets; orderDate for the hour-of-day in the Weekday heatmap.

  • Timezone — Asia/Bangkok throughout.

  • Partner commission rate — read from channels.partnerInfo.commissionRate. If unset, treated as 0. Configure it in the Channels admin to make the Commission chart accurate.

Filters

Two filters at the top of every tab:

  • Reporting Date — the date range.

  • Outlet — pinned to your outlet when the dashboard is embedded inside the Papaya merchant portal.

What this dashboard does NOT show

  • Channel performance for today live — use the Today dashboard's "Revenue by Channel Type" chart.

  • Overall historical metrics (revenue, AOV, items per order) not broken out by channel — use Trends.

  • Item-level deep dives — use Items.

  • Margin/COGS by channel — that lives in the Inventory module.

  • Multi-outlet comparison of channels — use Outlets or Group KPIs.

Did this answer your question?