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.