Skip to main content

Troubleshooting Metrics

Learn how to use Ask Polar and Custom Tables to quickly identify and fix metric issues.

Written by Sachi

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

  1. Go to Custom Tables

  2. Click Create table

  3. Choose the dataset that matches your metric’s building block

    • For revenue issues, start with Orders

  4. 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 AND logic instead of OR? (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

  1. Add columns for:

    • Gross sales

    • Discounts

    • Refunds

  2. Calculate:

    • Net Sales = Gross – Discounts – Refunds

  3. 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

  1. Add Order ID and Status

  2. Filter to the statuses you expect (usually “paid”)

  3. Count unique Order IDs

  4. Compare that number to the dashboard

Most order mismatches come from status filters.


New Customers

  1. Start from customers or orders

  2. Add:

    • Customer ID

    • First order date

    • Order date

  3. Filter to customers whose first order falls in your date range

  4. 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:

  • WHEN all the conditions that identify a wholesale order (e.g. customer tag = "wholesale", discount code contains "WHL", channel = "B2B") → mark as true

  • ELSE → mark as false

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..

Did this answer your question?