Buyer’s guide Sourced and dated

Which BI tools actually run in the browser, and which just run in the cloud?

Every tool here opens in a browser tab, but only xmetric computes there: your CSV, Excel, Parquet or .twbx file is read and calculated on your own machine, with nothing to install and nothing uploaded. Data Studio, Hex and Julius are web front ends to servers that store or process your data. Pick them when you want live warehouse or Google connections, shared notebooks or chat-driven Python.

Updated

Our pick

xmetric

It's the only one of the four that computes in your tab: nothing to install, nothing uploaded, and the same shelves, FIXED expressions and table calculations as Tableau. That suits locked-down laptops and files you shouldn't send anywhere.

Pick something else if

Your data lives in a warehouse and your team writes SQL and Python together (Hex), your reports run on live Google Ads, GA4 or Sheets data (Data Studio), or you'd rather describe the analysis in a chat and the data can go to a cloud workspace (Julius).

xmetric makes this page. Every vendor fact below links to the vendor’s own page and the date we checked it.

How they compare

xmetric Our pickData Studio (formerly Looker Studio)HexJulius
Where your data is processedxmetricIn your browser. Files are not uploaded.Source · checked October 17Data Studio (formerly Looker Studio)Live connections leave data in the source (cached temporarily); extracts and uploaded CSVs are stored by Google (Cloud Storage).Source · checked October 17HexHex's cloud on AWS (file uploads and cached query results stored there, encrypted at rest)Source · checked October 17JuliusFiles are analyzed in Julius's cloud workspace; plans list server RAM and file storage.Source · checked October 17
Runs onxmetricAny modern browser on Mac, Windows or Linux. Nothing to install.Source · checked October 17Data Studio (formerly Looker Studio)Browser-based cloud service only (no desktop app).Source · checked October 17HexBrowser SaaS on Hex's AWS cloud (multi-tenant, EU multi-tenant); single-tenant as an Enterprise add-onSource · checked October 17JuliusBrowser-based cloud workspace.Source · checked October 17
Cost to startxmetricFree in your browser. No account needed to open a file.Saving a workbook online and sharing a link need a free account.Source · checked October 20Data Studio (formerly Looker Studio)Data Studio (formerly Looker Studio) self-service tier, no charge.Web-only. Pro features (team workspaces, Google Cloud support, CMEK) cost extra; some partner connectors are paid.Source · checked October 17HexCommunity plan: freeSmall compute, Hex agent trial only, limited to 5 projects (learn.hex.tech). No user cap stated on the pricing page.Source · checked October 17JuliusA free plan to start.Free plan limits are not listed on the pricing page.Source · checked October 17
Opens Tableau .twbx filesxmetricOpens .twbx and .twb in the browser app with dashboards, quick filters and filter actions working, plus sheets, data sources, formulas and packaged extracts.Source · checked October 20Data Studio (formerly Looker Studio)Not listed in the vendor's docs. File connectors listed: Google Sheets, Microsoft Excel, Upload CSV files, Extract data.Source · checked October 17HexNot listed in the vendor's docs; data connections list SQL databases/warehouses (Postgres, Snowflake, BigQuery, Databricks...)Source · checked October 17JuliusNot verified yetWhere we looked · October 17

Try it: real analysis, computed in this tab

Here are two weeks of a bike share's dock events, opened in xmetric on this page. Your browser does every calculation below; open the Network tab while you turn the knob and you'll see nothing go out.

Central Station has 406 dock events, Hillcrest only 139. Yet on weekday mornings Central nets −11 bikes and Hillcrest −56: about five or six bikes gone every working morning, from the station nobody would have flagged.

813
Point at the line to read it.
1Riverside Market652Harbor Point23Union Square04City Library−35University Gate−36Old Mill Park−87Central Station−118Hillcrest−56

Which station runs out of bikes every morning?

Computed by the xmetric engine

The data

Riverbend Bike Share dock events, 5 to 18 October 2026

Synthetic datadock_events.csv

A small city bike share with eight stations. Every trip is two rows: a checkout at one dock and a return at another. One station sits at the top of a hill.

trip_idevent_timestationeventrider_type
T000282026-10-05 07:05:00Central Stationcheckoutmember
T000502026-10-05 07:05:00Harbor Pointcheckoutmember
T000442026-10-05 07:07:00Harbor Pointcheckoutcasual
T000512026-10-05 07:09:00Hillcrestcheckoutcasual

Step 1

Activity per station

Central Station is by far the busiest. If you had to guess which dock runs empty, you'd guess this one.

Point at a bar to read it.
0200400Central StationRiverside MarketUniversity GateCity LibraryUnion SquareHarbor PointHillcrestOld Mill Park

Tableau

COUNT([trip_id])
// station on Rows, sorted descending

The xmetric engine ran this formula and got the SQL’s Dock events column, row for row.

SQL

SELECT station, COUNT(*) AS dock_events
FROM input
GROUP BY station
ORDER BY dock_events DESC

Rows

StationDock events
Central Station406
Riverside Market233
University Gate232
City Library193
Union Square181
Harbor Point149
Hillcrest139
Old Mill Park91

Step 2

Bikes gained or lost on weekday mornings

Count each return as +1 and each checkout as -1. Busy stations cancel out; Central loses a few. Hillcrest, with a third of Central's traffic, bleeds bikes: people ride down the hill to work and nobody rides up. Riverside Market, at the bottom, fills up.

Point at a bar to read it.
−100−50050HillcrestCentral StationOld Mill ParkCity LibraryUniversity GateUnion SquareHarbor PointRiverside Market

Tableau

SUM(IF [event] = "return" THEN 1 ELSE -1 END)
// filter: weekday, hour from 6 to before the knob

SQL

SELECT
  station,
  SUM(CASE WHEN event = 'return' THEN 1 ELSE - 1 END) AS net_bikes
FROM input
WHERE isodow(event_time) <= 5 AND hour(event_time) >= 6 AND hour(event_time) < 10
GROUP BY station
ORDER BY net_bikes

Rows

StationNet bikes
Hillcrest−56
Central Station−11
Old Mill Park−8
City Library−3
University Gate−3
Union Square0
Harbor Point2
Riverside Market65

Step 3

Hillcrest, hour by hour

The running total drops through the morning rush and never climbs back: the evening brings almost no riders home uphill. Only the rebalancing van refills it. Compute the running sum along hour; computed along station it restarts at zero.

Point at the line to read it.
−60−40−20005101520

Tableau

RUNNING_SUM(SUM(IF [event] = "return" THEN 1 ELSE -1 END))
// HOUR([event_time]) on Columns, Compute Using: hour

SQL

SELECT
  hour(event_time) AS hour,
  SUM(SUM(CASE WHEN event = 'return' THEN 1 ELSE - 1 END)) OVER (ORDER BY hour(event_time)) AS running_net
FROM input
WHERE station = 'Hillcrest' AND isodow(event_time) <= 5
GROUP BY hour
ORDER BY hour

Rows

HourRunning net
7−11
8−48
9−56
10−56
11−54
12−52
13−51
14−53
15−52
16−49
17−52
18−56
19−55
20−54

Move the end of the morning rush and watch the ranking hold: the hill wins every time.

Common mistake

Ranking stations by traffic instead of by balance

A dock runs empty when more bikes leave than arrive, not when it's busy. Central Station's checkouts and returns mostly cancel; Hillcrest's don't.

WrongStarts with Central Station, Riverside Market, University Gate…
Point at the line to read it.
0200400Stations in this order →

Tableau

COUNT([trip_id])

SQL

SELECT station, COUNT(*) AS dock_events
FROM input
GROUP BY station
ORDER BY dock_events DESC
RightStarts with Hillcrest, Central Station, Old Mill Park…
Point at the line to read it.
−100−50050Stations in this order →

Tableau

SUM(IF [event] = "return" THEN 1 ELSE -1 END)

SQL

SELECT
  station,
  SUM(CASE WHEN event = 'return' THEN 1 ELSE - 1 END) AS net_bikes
FROM input
WHERE isodow(event_time) <= 5 AND hour(event_time) >= 6 AND hour(event_time) < 10
GROUP BY station
ORDER BY net_bikes

Run it on your own file

Drop your own export (any CSV with a date, a category and something to count) and build the same kind of view on it. Nothing is uploaded.

Drop a CSV anywhere on this page

Up to 10,000 rows. The sample, dock_events.csv, shows the shape.

When a cloud tool is the better choice

  • If this is you

    An export on a work laptop where you can't install anything, or a file that mustn't leave it

    xmetric

    In your browser. Files are not uploaded. Free, in any modern browser.

  • If this is you

    Live dashboards on Google Ads, GA4, Search Console or Sheets

    Data Studio

    Free self-service tier with Google's own connectors. Uploaded CSVs are stored in Google Cloud Storage; free; 2GB per user, 100MB per dataset, 100 uploads/dataset/day; datasets not shareable.

  • If this is you

    A data team querying Snowflake, BigQuery or Databricks in shared SQL and Python notebooks

    Hex

    Built for that. Professional is $36 per Editor / month.

  • If this is you

    You'd rather ask questions in a chat and let it write the Python, and the file can go to the cloud

    Julius

    Files are analyzed in Julius's cloud workspace; plans list server RAM and file storage. Plus is $20 per month billed monthly, or $16 per month billed annually.

Questions

How can I tell whether a browser tool uploads my file?

Open your browser's developer tools (F12, or Cmd+Option+I on a Mac), pick the Network tab, then drop your file. A local tool sends no request carrying your rows. A cloud tool shows an upload.

Does xmetric keep working if the Wi-Fi drops?

Once the page has loaded, opening a local file and calculating on it happen in your tab. Saving a workbook online and sharing a link need a connection.

How big a file can a browser handle?

Charts a CSV in the page without uploading it: files up to 160 MiB and 3.5 million rows (32 MiB on low-memory or unknown-memory devices). A 150.5 MB, 3.5-million-row CSV charted in about 2 seconds in a desktop Chromium test on 2026-10-18; timing varies by device. Formula sandboxes keep a separate 50,000-row limit. Excel and Parquet files are coming in the full app.

Do calculated fields and table calculations run locally too?

Yes. FIXED expressions, running totals and every other calculation in the demo below run in your browser tab.

Sources