GA4 to Tableau: every route, what each one costs, and what each one gets wrong
To connect Google Analytics 4 (GA4) to Tableau, use Tableau's own Google Analytics 4 connector: under Connect, choose Google Analytics 4 (install it from Additional Connectors the first time), sign in with a Google account that can read the property, pick the account and property, set a date range, add dimensions and metrics, and Tableau loads the result as an extract. For one property and a modest report that is the right first try, with two catches. The connector can't query live, so every refresh goes back to the GA4 Data API and spends the property's quota, and its Tableau Exchange listing is now titled “Google Analytics 4 - Deprecated”, with a replacement due in release 26.3. Three other routes exist: GA4's BigQuery export, free to link and read through Tableau's BigQuery connector; a paid partner connector such as Windsor.ai, Coupler.io or CData; and a manual CSV export. TableBI is a fifth route of a different kind: it is not a Tableau connector, and it answers recurring GA4 questions outside Tableau. Below, each route is priced in money and upkeep, followed by the costs nobody quotes: licences, quota, withheld rows and numbers that don't match.
Route 1 — Tableau's own Google Analytics 4 connector
Tableau builds and supports a Google Analytics 4 connector, and Tableau's help page for it lists Tableau Cloud, Tableau Desktop and Tableau Server. It took over from Tableau's older Google Analytics connector, built for Universal Analytics, whose own page now says GA4 properties aren't supported. The connector reads the core reporting side of the Google Analytics Data API; cohort, pivot, realtime and funnel reports are not supported.
Setup, in six steps
- Under Connect, choose Google Analytics 4 from Additional Connectors, select Install and Restart Tableau, then choose it again from Installed Connectors. Its Tableau Exchange listing requires Tableau 2023.3 or later.
- Sign in with a Google account that can read the property, and tick the permission that lets Tableau see and download your Google Analytics data.
- Select the account and the property.
- Set the date range: fixed start and end dates, a range relative to a fixed start date, or a range relative to the refresh date, which moves every time the extract refreshes.
- Add dimensions and metrics. Some combinations are invalid, and Tableau points to Google's Dimensions & Metrics Explorer to check which ones work together.
- Open a sheet. Tableau creates the extract at that moment, and new data arrives only when that extract refreshes.
On Tableau Server, installing is an administrator's job. Salesforce's support article To Configure the Google Analytics 4 Connector in Tableau Server says the connector's .taco file must be copied into the server's Connectors directory and the server restarted, and that custom OAuth has to be configured for the site as well as for the server. Tableau's Google OAuth guide for Server adds that the OAuth client's Google Cloud project needs both the Google Analytics Admin API and the Google Analytics Data API enabled. On any deployment, Tableau's help page recommends a custom OAuth client, which it says frees you from Tableau's release cycles and its OAuth client rotation schedule.
What it costs
No connector fee. The spend is the Tableau licence of whoever builds the data source, because Tableau reserves creating and publishing new data sources for the Creator role; the licence section below prices that.
What it gets wrong
It cannot connect live. Tableau's help page says it supports only extracts for GA4, so a dashboard shows whatever the last refresh fetched. A refresh that is not set up as incremental is a full refresh, which, per Tableau's extract refresh documentation, replaces every row with data fetched from the source again. For this connector that means a new round of Data API requests covering the whole date range.
Every refresh draws on the property's quota. Tableau's help page says the connector is subject to the Data API's Core quotas. Google's quota table gives a standard GA4 property 200,000 Core tokens per day and 40,000 per hour, allows one Google Cloud project at most 14,000 tokens per property per hour, and caps concurrent requests at 10 per property. Most requests cost 10 tokens or fewer, but Google names more rows, more dimensions and metrics, complex filters, long date ranges, high-cardinality dimensions such as page path, and busier properties as reasons a request costs more. Daily quotas reset at midnight Pacific Standard Time.
Older copies stop at 10,000 rows. The connector's changelog on Tableau Exchange says version 1.1.0 fixed extracts that were limited to 10,000 rows of data, so a .taco file copied into a repository long ago is worth checking; the current version is 1.2.1.
The trap: Tableau is deprecating this connector. The Tableau Exchange listing is titled “Google Analytics 4 - Deprecated”, says Tableau is deprecating the connector for security reasons, and says a replacement connector will launch in release 26.3. On September 26, 2026, the newest Tableau Desktop version on Tableau's releases page was 2026.2.3. The listing says nothing about moving existing data sources to the replacement, so keep a list of every workbook built on this connector before that release lands.
Verdict: the fastest start for one property, a few dimensions and a daily extract, with a move to the replacement pencilled in. For page-level detail over long ranges, or several reports leaning on one property, look at route 2.
Route 2 — GA4's BigQuery export, then Tableau's BigQuery connector
GA4 can export raw events to a BigQuery project you own, and Tableau reads BigQuery through its Google BigQuery connector, which signs in with OAuth or a service-account key file and can query live; because of BigQuery's data volumes, Tableau recommends a live connection. From then on Tableau queries BigQuery, not the Data API, so refreshes no longer touch the property's API quota.
Setup, in five steps
- In Google Cloud, create or choose a project and enable the BigQuery API.
- In GA4, open Admin → Product links → BigQuery links and link the project. Google's setup guide requires at least the Editor role on the property and Owner access to the Cloud project.
- Choose a data location, the streams and events to export, and a daily export, a streaming export, or both.
- Wait: data should reach BigQuery within 24 hours of linking, and the daily export then delivers the previous day's events once a day.
- In Tableau, connect with Google BigQuery and open the dataset named
analytics_<property_id>, where each day is its ownevents_YYYYMMDDtable, per the BigQuery Export schema.
What it costs
Linking carries no GA4 fee. According to Google's BigQuery Export overview, the daily export handles up to 1 million events a day on a standard property, while the streaming export has no volume limit and adds $0.05 per gigabyte, which Google puts at roughly 600,000 events. BigQuery bills storage and queries above a free tier of 10 GiB of storage and 1 TiB of query processing a month, per BigQuery pricing as of September 2026. The BigQuery sandbox needs no credit card or billing account, but every table in it expires after 60 days, it supports neither streaming nor the Data Transfer Service, and its 10 GiB of storage is a lifetime allowance that expired tables do not give back, so a sandbox export holds at most the latest two months and stops growing once that allowance is spent.
On the Tableau side, the bill follows bytes scanned. A live data source over the events_* wildcard reads every daily table unless its custom SQL filters on _TABLE_SUFFIX, which BigQuery's wildcard-table documentation says can greatly reduce the bytes scanned.
The trap: the export starts the day you link. Google's setup guide describes data arriving within 24 hours of linking and a daily file of the previous day's events, and describes no export of the days before. Days missed because of an invalid payment method cannot be re-exported, and a standard property that keeps exceeding the million-event cap has its daily export paused, with the missed days not reprocessed. If a Tableau project is even likely, link the property now.
What it costs in upkeep
Modelling. Event parameters sit in a repeated event_params record that has to be unnested in SQL. Google's guide to UI-versus-export differences counts sessions as unique combinations of user_pseudo_id or user_id with ga_session_id, and warns that adding up per-day session counts double counts sessions that span more than one day. Each property exports to its own dataset, so a view across several properties is a UNION ALL across datasets in custom SQL.
A Google-native backfill: the Data Transfer Service
When report-level tables are enough, the BigQuery Data Transfer Service connector for GA4 copies GA4 report data into BigQuery on a daily schedule, as tables for ten standard reports including Traffic acquisition, Landing page, and Pages and screens, per Google's report transformation reference. Google says a GA4 transfer costs nothing to run beyond BigQuery storage and queries, and a backfill run can reach as far back as GA4's data retention allows, which the raw export cannot. The limits: it reads the Data API, so it spends the same property quota as route 1; a transfer takes one custom report, with at most 9 dimensions and 10 metrics and no custom dimensions; and Google warns that aggregated totals of distinct users and sessions may not match GA4.
Verdict: the sturdiest route for anyone who can own a Cloud project, the SQL and a billing alert. Link GA4 to BigQuery today, even if the Tableau work is months away.
Route 3 — a partner connector
Partners sell the GA4-to-Tableau hop, and the part to inspect is how their data enters Tableau:
- Windsor.ai fills a Google Sheet that Tableau reads through its Google Drive connector. Its GA4-to-Tableau page recommends that path, saying Tableau has temporarily halted external connectors, and its pricing page says Tableau connects via Google Sheets or a database. Drive is the door because Tableau's own Google Sheets connector was fully deprecated in mid-2023. As of September 2026, Windsor.ai's pricing page listed Basic at $19 a month billed annually or $23 month to month, for 3 data sources, 75 accounts and a daily scheduled sync; its free plan retrieves only the past 30 days.
- Coupler.io passes Tableau an integration link through Tableau's Web Data Connector, according to its GA4-to-Tableau guide, with up to 9 dimensions and 10 metrics per report. Tableau deprecated Web Data Connector 2.0 in the 2023.1 release, and its connector documentation says Tableau Cloud can't refresh a web data connector extract itself; Tableau Bridge can refresh some. As of September 2026, Coupler.io's pricing page listed Starter at $24 a month billed annually or $32 month to month, for 3 accounts, 1 destination, a daily refresh and 5,000 rows per run.
- CData sells a Tableau connector for Google Analytics that supports GA4, with live or extract connections in Tableau Desktop, Server, Bridge and Prep. Its product page says Tableau Cloud doesn't support custom connectors, so Cloud users are pointed to CData Connect AI instead. As of September 2026, CData's order page listed a desktop licence at $499 a year, with server licences by quote.
What it costs: a subscription or licence for as long as the dashboards exist, priced by accounts, sources, rows or seats. What it gets wrong: a vendor fixes the plumbing, not GA4. A partner reading the Data API still spends the property's quota and still receives thresholded and (other) rows, and each hop above carries its own Tableau limit: a sheet read through Drive, a connector type Tableau has deprecated, or a custom connector that Tableau Cloud doesn't support. The Windsor.ai comparison covers how a pipeline differs from a backend you query directly.
Route 4 — download a report and open it in Tableau
Every GA4 report has Share this report → Download File, which offers a PDF, a CSV or an export to Google Sheets, and Google's export help says a CSV or Sheets export holds up to 100,000 rows; the Viewer role on the property is enough. Tableau opens the CSV as a text file and reaches the sheet through Google Drive.
What it gets wrong: the file is a snapshot with no refresh, so every reporting cycle needs someone to download it again. A report with secondary dimensions, filters or comparisons is also more likely to carry an (other) row, according to Google's guide to the (other) row, and the file keeps whatever the report withheld.
Verdict: right for one question on one day, wrong for anything someone expects to open again next week.
The five routes side by side
Money is half of each route's cost; the other half is who keeps it running and what the data leaves out.
| Route | Money | Setup | Upkeep | History | What bites |
|---|---|---|---|---|---|
| Tableau's GA4 connector | No connector fee; a Creator licence to build and publish the data source | Minutes in Desktop; a .taco file, OAuth setup and a restart on Tableau Server | Watching refreshes and quota; a move to the replacement connector | The date range set in the connection | Extracts only; 200,000 Core tokens per property per day on a standard property; thresholded and (other) rows; listed as deprecated |
| BigQuery export + BigQuery connector | Free to link; BigQuery storage and queries past the free tier; streaming $0.05 per GB | Hours: Cloud project, permissions, link; first data within 24 hours | SQL over nested event tables; bytes scanned by live queries | From the link date; report tables can be backfilled through the Data Transfer Service | 1 million events a day on a standard property's daily export; sandbox tables expire after 60 days |
| Partner connector (Windsor.ai, Coupler.io, CData) | $19–$32 a month (Windsor.ai Basic, Coupler.io Starter) or $499 a year (CData desktop licence), September 2026 | Minutes to an hour | Renewals, plan limits, and the hop into Tableau | Vendor and plan dependent; Windsor.ai's free plan covers 30 days | Sheets through Drive, a deprecated Web Data Connector, or a custom connector Tableau Cloud doesn't support; Coupler.io Starter stops at 5,000 rows per run |
| Manual export | Free | Minutes | A person, every reporting cycle | Whatever range the report shows | 100,000 rows per CSV or Sheets file; no refresh |
| TableBI — not a Tableau connector | Free for one source and one live dashboard; Operator $29 a month, by request | Minutes: CLI install and a Google sign-in | Nothing to schedule | 90 days on the first sync by default; longer with --days | Feeds no Tableau workbook; GA4 fields are date, property, channel, country and five measures |
Tableau and vendor prices were read on their own pricing pages on September 26, 2026.
The costs nobody quotes
Moving rows is the part every vendor prices. These four costs decide what a GA4 workbook costs to run and whether anyone trusts it.
1. Tableau licences, by role
Tableau prices people, not connectors. Every deployment needs at least one Creator, only Creators can create and publish new data sources, and viewers need licences too unless the organization buys capacity-based viewer access through sales, per Tableau Cloud pricing. As of September 2026 the Standard edition lists Creator at $75, Explorer at $42 and Viewer at $15 per user per month, billed annually, and Enterprise lists $115, $70 and $35; Tableau Server pricing shows the same per-user prices, and Tableau says none of its products are sold on monthly plans. One analyst sharing a GA4 dashboard with ten client contacts on Standard therefore pays $75 + 10 × $15 = $225 a month, $2,700 a year, before any connector fee.
The free editions stop short of sharing. Tableau's edition comparison says Tableau Desktop Free Edition can't publish to Tableau Cloud or Tableau Server or share packaged workbooks, and Tableau Public's data sources are limited to Google Drive, JSON, Excel, OData, PDF, spatial, statistical and text files, with no Google Analytics; Tableau Desktop Public Edition is also not for commercial use.
2. One quota, every caller
The Data API quota belongs to the GA4 property, not to a workbook. Each request is charged to the property's hourly and daily buckets and to the calling project's hourly bucket for that property, per Google's quota table, so Tableau extracts, a partner connector, a transfer job and a script reading the same property all draw on one 200,000-token day. When any bucket is empty, the API rejects the request at once with a 429 error, according to Google's quota-management guide.
Tableau Cloud layers its own rules on top. It suspends a scheduled refresh after five consecutive failures until someone fixes the cause (refresh troubleshooting); it suspends full extract refreshes that run more often than weekly for workbooks nobody has used for 32 days (automatic suspension); and it stops any single refresh at 120 minutes (Tableau Cloud capacity). A run of quota errors can leave a GA4 extract suspended until someone notices.
3. Rows GA4 holds back
GA4 withholds data on purpose. Google's page on data thresholds says data may be withheld from reports, explorations and API calls that include demographics, and that rows with search-query information may be withheld when too few users are behind them; the thresholds are system defined and can't be adjusted. Google's quota table also allows each property 120 potentially thresholded requests an hour. Separately, when a table has more rows than its limit, GA4 folds the least common values into an (other) row. Google calls any dimension with more than 500 values high-cardinality, and its data-freshness page says stricter cardinality limits can apply before a day's daily data is ready, so an early-morning refresh is more likely to catch an (other) row.
The Data API flags both conditions in its response metadata, as subjectToThresholding and dataLossFromOtherRow. Tableau's GA4 help page doesn't mention either flag, so compare a long-tail breakdown in Tableau with GA4's own report before trusting it.
4. Numbers that never quite match
The GA4 interface, the Data API and the BigQuery export count differently by design. Google's guide to UI-versus-export differences expects discrepancies because modeling, Google signals and attribution are not fully present in the export, and because the interface and the API estimate active users and sessions with the HyperLogLog++ algorithm; it suggests comparing only data older than 72 hours. Google's data-freshness page adds that processing can take 24 to 48 hours, during which report numbers may change. User counts are distinct counts, too: someone who visits on five days is one user in GA4's report for that week but five in a SUM over daily rows. A workbook that mixes a connector extract with BigQuery tables will disagree with itself, and an extract refreshed this morning can disagree with GA4 tomorrow.
The fifth route: recurring GA4 questions, answered outside Tableau
TableBI is not a Tableau connector. It creates no Tableau data source and sends nothing to Tableau. It replaces the Tableau step for the GA4 questions that come back every week: TableBI syncs GA4 into its own store, your AI agent, Claude Code for example, queries that store in read-only SQL from the terminal, and an answer worth keeping becomes a live dashboard URL. If the destination has to be a Tableau workbook, routes 1 to 4 are the options.
# install the CLI and teach your agent the commands npm i -g @tablebi/cli tablebi login tablebi install # Google sign-in opens in the browser; with one property, the 90-day backfill starts tablebi connect ga4 # several properties? the command lists them; connect each one by its ID tablebi connect ga4 --account 123456789 # every connected source and the day it runs through tablebi sources
Nothing is installed on your website. The first sync backfills the last 90 days by default, and --days asks for a longer window. Rows land in ga4_raw with four dimensions (date, property, channel, country) and five measures (page_views, sessions, users, conversions, revenue). Device, landing page, new users and engaged sessions are not synced, so a landing-page workbook still belongs to route 1 or route 2. In the cross-channel facts table, GA4 rows carry only the date and the property, which is why GA4 channel questions read ga4_raw.
The sync reads the same Data API as route 1, so it spends the same property quota, but it asks for three coarse dimensions (date, default channel group and country) instead of page-level detail.
# sessions, conversions and revenue by channel over the latest 28 days of data tablebi ask "SELECT channel, SUM(sessions) AS sessions, SUM(conversions) AS conversions, SUM(revenue) AS revenue FROM ga4_raw WHERE date > (SELECT MAX(date) FROM ga4_raw) - INTERVAL 28 DAY GROUP BY channel ORDER BY sessions DESC"
Several properties share that one table, so comparing them is a GROUP BY rather than a union:
# every connected property side by side, same 28-day window tablebi ask "SELECT property, SUM(sessions) AS sessions, SUM(conversions) AS conversions, SUM(revenue) AS revenue FROM ga4_raw WHERE date > (SELECT MAX(date) FROM ga4_raw) - INTERVAL 28 DAY GROUP BY property ORDER BY sessions DESC"
Both windows anchor on MAX(date), the newest day actually synced, not on today's date. Users are left out of both queries on purpose: they don't add up across rows, for the distinct-count reason above. Every answer also carries a trust block listing the day each source runs through and the caveats that apply, such as GA4's latest 24 to 48 hours still being processed.
Pin the answer to a live URL
The tablebi pin command stores the query rather than a snapshot and publishes a read-only URL that refreshes as GA4 syncs. Anyone with the link can open it without a login or a Tableau licence.
tablebi pin --title "GA4 channels" \ --widget "Daily sessions::line=SELECT date, SUM(sessions) AS sessions FROM ga4_raw GROUP BY date ORDER BY date" \ --widget "Sessions by channel, 28 days::hbar=SELECT channel, SUM(sessions) AS sessions FROM ga4_raw WHERE date > (SELECT MAX(date) FROM ga4_raw) - INTERVAL 28 DAY GROUP BY channel ORDER BY sessions DESC" # prints the dashboard's public URL, e.g. https://<workspace>.tablebi.com/d/dsh_…
The scope is deliberately narrow. TableBI connects Google Search Console, GA4 and Google Ads, which are live, Meta Ads in beta (only people added to our Meta app as test users can authorize while Meta's App Review is pending), and CSV upload, and nothing else. It has no white-label reports, no scheduled PDF or email delivery, no alerts and no rank tracking; it isn't an MCP server, because your agent drives the CLI directly; and nothing is installed on your website. The free plan covers one source and one live dashboard, and each GA4 property counts as one source; the $29-a-month Operator plan is switched on by request during early access, as the pricing page explains.
Which route to pick
- Tableau's GA4 connector for one property, a handful of dimensions and a daily extract, when the report must live in Tableau and nobody wants another bill; expect to move it to the replacement connector.
- The BigQuery export for raw events, several properties in one model, or refreshes that never touch the Data API quota. Link it today, because it only collects from the link date, and add the Data Transfer Service when you need report tables with history.
- A partner connector when a subscription costs less than an engineer's time and its route into Tableau works on your Tableau deployment.
- A manual export for a one-off answer under 100,000 rows.
- TableBI when the recurring question is how channels, countries or properties performed, the reader is an AI agent or someone holding a link, and nobody needs a Tableau canvas for it.
Microsoft's side of the same problem is covered in GA4 to Power BI, and Search Console's route into Tableau in Connect Google Search Console to Tableau. For the agent-side GA4 workflow, see Claude Code + GA4; every source TableBI connects today is in the connector list in the docs.
FAQ
Does Tableau have a GA4 connector?
Yes. Tableau builds a Google Analytics 4 connector for Tableau Desktop, Tableau Server and Tableau Cloud that reads GA4's core reports through the Google Analytics Data API. It supports extracts only, every refresh spends the property's Data API quota, and its Tableau Exchange listing now marks it deprecated, with a replacement due in release 26.3.
How do I connect Google Analytics to Tableau?
In Tableau Desktop, choose Google Analytics 4 under Connect (install it from Additional Connectors the first time), sign in with a Google account that can read the property, select the account and property, set a date range, and add dimensions and metrics. Opening a sheet creates the extract. For raw events instead of report rows, link GA4 to BigQuery and point Tableau's Google BigQuery connector at the export.
Is Tableau's Google Analytics 4 connector deprecated?
Tableau says it is deprecating it. The connector's Tableau Exchange listing, titled Google Analytics 4 - Deprecated, gives security reasons and says a replacement connector will launch in release 26.3. On September 26, 2026, the newest Tableau Desktop version on Tableau's releases page was 2026.2.3.
Can Tableau connect live to GA4?
Not through Tableau's own connector, which supports extracts only. For live queries the data has to sit somewhere Tableau can query directly: GA4's BigQuery export, which Tableau's BigQuery connector can query live, or a third-party connector such as CData's, which offers live or extract connections in Tableau Desktop and Tableau Server.
Can I connect GA4 to Tableau for free?
Not for anything you share. Tableau Public's data sources don't include Google Analytics, and Tableau Desktop Free Edition can't publish to Tableau Cloud or Tableau Server or share packaged workbooks. Sharing needs annual Tableau licences: as of September 2026, the Standard edition lists a Creator at $75 and a Viewer at $15 per user per month, billed annually. GA4's BigQuery export is free to link, and the BigQuery sandbox is free but expires tables after 60 days and caps storage at 10 GiB for the life of the project.
Why don't my GA4 numbers in Tableau match GA4?
Because each route reads a different version of the data. Connector extracts come from the Data API, which can withhold thresholded rows and fold rare values into an (other) row; the BigQuery export holds raw events without Google's modeling or Google signals data; and GA4 estimates users and sessions with the HyperLogLog++ algorithm. GA4 can also take 24 to 48 hours to process a day, so an extract refreshed early can differ from the same report later.
Related guides
- GA4 to Power BI: every route and what each one costs
- Connect Google Search Console to Tableau
- GA4 quota exceeded: what each error means, and four fixes
- Connect GA4 to Claude: three ways compared
- TableBI vs Windsor.ai
Sources
- Tableau Help — Google Analytics 4 connector
- Tableau Exchange — Google Analytics 4 - Deprecated (listing and changelog)
- Tableau — Product releases (current Desktop version)
- Salesforce Help — To Configure the Google Analytics 4 Connector in Tableau Server
- Tableau Help — Set up OAuth for Google (Tableau Server)
- Tableau Help — Refresh extracts
- Google Analytics Data API — Limits and quotas
- Google Analytics Developers — Data API quota management
- Google Analytics Data API — ResponseMetaData
- Tableau Help — Google BigQuery connector
- Google Analytics Help — BigQuery Export
- Google Analytics Help — Set up BigQuery Export
- Google Analytics Help — BigQuery Export schema
- Google Cloud — BigQuery pricing
- Google Cloud — BigQuery sandbox
- Google Cloud — Querying wildcard tables
- Google Cloud — Load Google Analytics 4 data into BigQuery (Data Transfer Service)
- Google Cloud — Google Analytics 4 report transformation
- Google Analytics Developers — Bridge the gap between the GA4 UI and BigQuery export
- Windsor.ai — Google Analytics 4 to Tableau
- Windsor.ai — Pricing
- Coupler.io — How to connect GA4 to Tableau
- Coupler.io — Pricing
- CData — Google Analytics Tableau Connector
- CData — Google Analytics Tableau Connector pricing
- Tableau Help — Google Sheets (deprecated)
- Tableau Help — Web Data Connector 2.0
- Google Analytics Help — Share and export reports
- Tableau — Tableau Cloud pricing
- Tableau — Tableau Server pricing
- Tableau Help — Desktop Public, Free and Professional Edition comparison
- Tableau Cloud Help — Troubleshoot refresh issues
- Tableau Cloud Help — Automatically suspend extract refreshes for inactive content
- Tableau Cloud Help — Tableau Cloud capacity
- Google Analytics Help — About data thresholds
- Google Analytics Help — About the (other) row
- Google Analytics Help — Data freshness
Search Console, GA4 and Google Ads live, Meta Ads in beta, CSV by upload: in your agent today, with no BigQuery project and no licence per viewer.
npm i -g @tablebi/cli && tablebi install