The query language
Every report is a short, readable query in SoloQL. You never have to write one — the editor's panels write them for you — but reading them pays off quickly, and writing them unlocks questions no panel can ask. If you have seen SQL, you already know the shape; if you have not, the examples below are the whole idea.
Every query runs across every store you have connected, converted to one currency. That is the point of the product, and it is free in the language — you never write anything to get it.
The shape of a query
FROM sales
SHOW total_sales, orders
WHERE sales_channel = 'Online Store'
SINCE -30d
GROUP BY product_title
ORDER BY total_sales DESC
LIMIT 10
Read it aloud and it says what it does: from the sales data, show total sales and order counts for the online store over the last 30 days, split by product, biggest first, top ten.
- FROM picks the dataset — sales, orders, customers, products, inventory and more.
- SHOW picks the metrics.
- WHERE filters the records before anything is added up.
- SINCE / UNTIL / DURING set the date window —
SINCE -30d,DURING this_quarter, or exact dates. - GROUP BY chooses the breakdown — a field, or a time unit like
day. - ORDER BY / LIMIT sort and cap the result.
The parts worth knowing
Group by store. GROUP BY store splits any result across your connected
stores — the one breakdown Shopify itself can never show you.
Compare periods. COMPARE TO previous_period (or previous_year) adds
the previous window to every row and the chart, with movement percentages.
Time series. TIMESERIES day turns the result into a day-by-day series —
week, month and quarter work too.
Filter the totals, not the rows. HAVING filters after grouping — "only
products whose total exceeds 500":
FROM sales SHOW total_sales
GROUP BY product_title
HAVING total_sales > 500
Charts from the query. VISUALIZE total_sales TYPE line picks the chart —
the same choice the Visualization panel makes.
Three real questions
Orders over 500 across all stores, by store:
FROM sales SHOW total_sales, orders
WHERE order_total_sales > 500
SINCE -90d
GROUP BY store
Which vendors grew, this quarter against last:
FROM sales SHOW total_sales
DURING this_quarter
COMPARE TO previous_period
GROUP BY vendor
ORDER BY total_sales DESC
Units sold per week for one product, as a chart:
FROM sales SHOW net_quantity
WHERE product_title = 'Essential fleece Hoodie'
SINCE -180d
TIMESERIES week
VISUALIZE net_quantity TYPE line
The editor helps you write
Autocomplete offers the fields the dataset actually has, with descriptions; mistakes are underlined with an explanation before the query runs; and every change you make in the panels rewrites the query in front of you — the fastest way to learn is to click something and watch what it writes.
Going deeper
The full language and every dataset's field list are documented in the API reference — the same SoloQL runs there, so anything you learn in the editor works in the API and the other way round.
FAQ
Do I have to learn SoloQL to use the reports? No. Every report and every panel works without writing a line. The language is there for the questions the panels cannot ask — and for reading what a report really does.
Does a query cover all my stores? Yes, always — results aggregate across
every connected store and convert to one currency. Add GROUP BY store for
the per-store split, or scope to specific stores with the store control.
Is SoloQL the same as SQL? It reads like SQL's SELECT, deliberately — but it is built for cross-store commerce data: currency conversion, period comparison and time series are single keywords instead of joins.
Where can I see every field I can query? Each dataset's full field list lives in the API reference, and the editor's autocomplete carries the same list with descriptions inline.