When a metric looks off, most issues trace back to a small set of common causes. This article shows you how to track them down using Ask Polar and Custom Tables.
This article covers two approaches you can use together:
Ask Polar — our AI-powered assistant that can build and debug custom metrics for you automatically
Custom Tables — a manual, step-by-step method to see exactly what's happening behind the scenes
Start With Ask Polar
The fastest way to troubleshoot a custom metric is to let Ask Polar do the heavy lifting. Describe what the metric should do, what time frame you're looking at, and what number you'd expect to see. Ask Polar can diagnose the issue and rebuild the metric for you on the spot.
You can also use Ask Polar to create custom dimensions (more on those below) — just explain what you need and it will generate the logic automatically.
If Ask Polar doesn't fully resolve the issue, use the steps below to dig in manually. And if you get stuck at any point, reach out via in-app chat and ask to speak with an agent — our team will take a look right away.
Manual Troubleshooting
Before opening a Custom Table, it helps to be clear on what the metric is based on.
Identify the “building block” of the metric
Every metric is built from something more basic, like:
Revenue → orders, payments, or invoice line items
Orders → order records
AOV → revenue divided by orders
New customers → customers with their first purchase in a date range
Refunds → refund or adjustment records
Think of this as the unit the metric is counting or summing.
👉 Tip: It’s almost always easiest to debug metrics at the most detailed level (for example, orders instead of daily totals).
Build a Custom Table just for debugging
Go to Custom Tables
Click Create table
Choose the dataset that matches your metric’s building block
For revenue issues, start with Orders
Give it a clear name like:
Debug – Revenue (Orders) or Debug – New Customers
This table is your “source of truth” while troubleshooting.
Add columns that help explain the number
Start by adding a few key columns so you can easily compare and trace records.
Always include:
IDs (account id, order ID, customer ID, etc.)
Created date
Statuses (paid, refunded, canceled, etc.)
Amount fields (gross, net, discount, refund — whatever applies)
Depending on the metric/issue, consider adding marketing channel, product/SKU, customer type, or any tags you use in filters.
Check Your Dates and Filters Carefully
Filters are the most common source of metric discrepancies. A filter that's slightly off can silently exclude records or inflate results.
Use a closed date range
While debugging, stick to a completed time period like last week or last month. Avoid "Today" or "Yesterday" until you're confident the logic is right. Also confirm which date field you're using — order created date, paid date, and captured date can all produce different results.
Check if your filters are bucketing correctly
Add the dimension you're filtering on as a column in the table. Remove the filter temporarily and look at the raw breakdown. Ask yourself:
Is the data bucketing into the values you expected?
Are you filtering for the right phrase or value?
Do you need
ANDlogic instead ofOR? (This matters especially when using "does not contain" or "is not" conditions.)
Rebuild the Metric Step by Step
Recreate the metric inside the table
Build the metric from scratch, one piece at a time. Examples below:
Net Sales
Net Sales
Add columns for:
Gross sales
Discounts
Refunds
Calculate:
Net Sales = Gross – Discounts – Refunds
Compare:
The total from your Custom Table
The total shown in your dashboard
If they don’t match, you now know the issue is inside the logic — not the data itself.
Orders
Orders
Add Order ID and Status
Filter to the statuses you expect (usually “paid”)
Count unique Order IDs
Compare that number to the dashboard
Most order mismatches come from status filters.
New Customers
New Customers
Start from customers or orders
Add:
Customer ID
First order date
Order date
Filter to customers whose first order falls in your date range
Count unique customers
Different tools often define “new” slightly differently, so this step is key.
💡 Heads up: Some metrics in Polar are stored as negative values.
Discounts and refunds already come into Polar as negative numbers. This means if you're building a Custom Metric and try to subtract them, you'll actually be subtracting a negative — which adds the value back in and inflates your result.
The fix: use + instead of − for these fields.
For example, to calculate Net Sales:
✅
Gross Sales + Discounts + Refunds(correct — discounts and refunds are already negative)❌
Gross Sales − Discounts − Refunds(wrong — this double-negates and overstates the result)
If your Custom Metric looks higher than expected, this is often why.
Narrow it down until the mismatch appears
If totals still don't match, break things down further:
Compare totals by day and find the first day that looks wrong
For that day, group by status, channel, or product
Look at the individual record IDs
This will show you exactly which records are missing, duplicated, or categorized differently.
Simplify Complex Filters With a Custom Dimension
If your metric requires two or three filters — or if multiple metrics on your account share the same filter logic — consider creating a Custom Dimension instead of repeating filters everywhere.
For example, say you want to exclude wholesale orders from your revenue metrics. Wholesale orders might come in through multiple channels, tags, or customer types — meaning you'd need to stack several filters to catch them all. Instead, you can create a custom dimension called Is Wholesale with a simple WHEN / THEN / ELSE rule:
WHENall the conditions that identify a wholesale order (e.g. customer tag = "wholesale", discount code contains "WHL", channel = "B2B") → mark astrueELSE→ mark asfalse
Then simply filter any metric to Is Wholesale = false and you're done. The same approach works for other segmentation needs — for instance, an Is Influencer dimension that flags orders driven by influencer discount codes or UTM parameters, which you can then include or exclude from your metrics as needed.
Benefits:
Cleaner metric formulas — one filter instead of three or four
One place to update if the logic ever changes — no need to edit each metric individually
Consistent filtering across all metrics, reports, and views that use it
Ask Polar can build this custom dimension for you if you describe the conditions — just tell it what makes an order "wholesale" or "influencer-driven" and it will write the logic.
Common Issues and Fixes
Symptom | Likely Cause | Fix |
Revenue is higher than expected | Make sure you’re not summing order totals at the line-item level | Make sure you’re not summing order totals at the line-item level |
Revenue is lower than expected | Missing statuses or refund timing | Align status and refund logic with your definition |
Orders don’t match Shopify | Different date fields or status logic | Different date fields or status logic |
New customer counts are off | Different "first purchase" definitions | Confirm how "new" is defined and whether cancellations affect the logic |
Conversion rate looks wrong | Report-level filters limiting session data | Apply filters at the metric level using a Custom Metric instead |
Funnel metrics are incomplete | Pixel events missing or misfiring | Verify all required Pixel events are implemented and firing correctly |
Still Need Help?
If you've worked through these steps and the number still doesn't make sense, reach out via in-app live chat. Our Support team can dig into the raw data with you, review your metric formula, and help you get to the bottom of it..
