Parse 'Tableau' Workbooks into Functional Data
Overview
High-performance parsing of 'Tableau' workbook files into tidy data frames and dependency graphs for other visualization tools like R 'Shiny' or 'Power BI' replication, plus an interactive 'Shiny' workbook inspector for uploaded .twb and .twbx files.
New features
- Added
audit_tableau_folder()for portfolio-scale Tableau migration audits. It batch parses.twb/.twbxfiles and returns workbook summaries, datasource inventory, calculated-field complexity, field usage, lineage edges, parse issues, optional CSV exports, and migration complexity flags. - Added
twb_lineage()for migration-oriented lineage from datasources and tables through fields, calculated fields, worksheets, and dashboards. Results can be returned as tidy node/edge tables, anigraphobject, or Mermaid text.TwbParsernow exposes this asget_lineage()andparser$lineage. - Added migration-assistant helpers:
twb_migration_assessment(),twb_compatibility(),translate_tableau_calc(),export_migration_bundle(),render_migration_brief(),scaffold_shiny_dashboard(), andscaffold_quarto_dashboard(). These add target-aware readiness scoring, feature compatibility notes, deterministic formula translation candidates, exportable migration bundles, Markdown briefs, and starter rebuild scaffolds.
Show all changes in 0.5.1Hide the rest of the changes in 0.5.1
- New
twb_sheet_spec(): a full per-worksheet visualization spec — mark type, rows/columns shelves in order, dimensions vs. measures, every marks-card encoding (color, size, label, detail, shape, tooltip, ...), tooltip configuration, plus the sheet's filters, sorts, and axes. It reduces a worksheet to everything needed to understand and rebuild its visualization in another tool (also available asparser$sheet_spec/parser$get_sheet_spec()). - New
twb_dashboard_charts(): one row per worksheet placed on each dashboard — mark type, fields, tooltip summary, and layout position — so you can see at a glance what graphs a dashboard page uses (also available asparser$dashboard_charts/parser$get_dashboard_charts()). - New rebuild kit for the "what do I need to recreate?" questions:
twb_unused_fields()lists every raw field, calculated field, and parameter that is defined but referenced nowhere (the safe-to-drop list);twb_calc_build_order()returns calculated fields topologically sorted so each formula is rebuilt after the calculations it depends on, flagging dependency cycles instead of silently emitting them in the wrong order; andtwb_parameter_usage()maps every parameter to its consumption points — formulas, worksheet shelves/filters, and dashboard filter zones. All three are also available as parser methods and properties (parser$unused_fields,parser$calc_build_order,parser$parameter_usage), are exported asunused_fields.csv,calc_build_order.csv, andparameter_usage.csvbyparse_twb(), and are exercised by the newinst/extdata/rebuild_kit.twbfixture. - New
parse_twb()batch export: parse a.twb/.twbxworkbook and write a structured report to disk —report.txt, one CSV per key table, per-worksheet visualization specs (sheet_specs.txt), a plain-text replication brief, and the field dependency graph as GraphML. This delivers theparse_twb()entry point the README previously documented but which did not exist.
Breaking changes
- Removed the
tbs_publish_info()andtbs_custom_sql_graphql()stubs. They were exported and documented as querying Tableau Server/Cloud, but never made a network request and always returned empty tibbles. Tableau Server/Cloud integration is planned as a real feature; the premature stubs are gone rather than silently returning no data. - The unused
strictargument tovalidate_relationships()is deprecated and ignored, while remaining available for compatibility with 0.5.0 callers.
Documentation
?TwbParserrewritten from scratch: it now documents every active-binding property (parser$summary,parser$overview,parser$datasources, ...) as the primary API alongside everyget_*()method.summaryis correctly described as a read-only property — the previously documentedparser$summary()call form never worked at runtime.- README Quick Start no longer requires the
fspackage (uses base R), and the lifecycle badge is corrected to experimental while the API is settling.
Bug fixes
- Sheet/dashboard/story lookup by name no longer interpolates the name into an XPath predicate. Names containing quotes or brackets (e.g. "Bob's Dashboard") now match exactly instead of being mangled or silently missing (new internal
.twb_find_named()/.twb_find_all_named()helpers). - Removed dead code: the never-firing "safe getter" rebind block in
twb_install_active_properties()and the uncalled internalprint_datasource_summary(). parse_twb(overwrite = TRUE)now removes the previous outputs written by parse_twb before writing, so the export directory reflects the current workbook instead of mixing stale and fresh files. Unrelated files are left alone.- Fixed
twb_calc_build_order()crashing with "subscript out of bounds" for calculated fields that reference no other calculated field: aNULLdependency hit was deleting the list element instead of recording an empty dependency set. - Fixed mark-type detection reading the wrong XML attribute: Tableau writes
<mark class="Bar"/>, not<mark type="Bar"/>, so bar/line/etc. charts were mislabeled asautomaticunless a style rule happened to name the mark. - Restored the
strictargument ofvalidate_relationships()(present in 0.5.0, dropped by mistake): it is deprecated and ignored, warning only when explicitly supplied. - The cheat sheet no longer documents the removed
tbs_*()server stubs or astrictargument that didn't exist; footer version corrected to 0.5.1.
Tests
- New tests for the
parse_twb()batch export and Shiny app smoke tests (the bundled app file parses cleanly and the app object builds headlessly).
From NEWS.md in the release
Install
Health
- OK13 OK2026-10-03
- NOTE12 OK, 1 NOTE2026-07-11
- OK13 OK2026-06-09
- WARNING12 OK, 1 WARNING2026-06-08
- OK14 OK2026-03-10
Documentation
- Help pages
- 70 (10 internal)includes a package overview page
- Examples that run
- 100%44 run in a plain check (4 of them under a condition)
- Exported functions with examples
- 73%
- Documented parameters
- 99%
- Return-value docs
- 98%
- Help pages citing references
- 0%
- twbparser-intro HTML
Downloads
Repository
- PRs merged (all time)
- 100%
- Median days to close, 50 most recently updated closed issues
- not measured
- Median days to close, 50 most recently updated closed PRs
- 0
Stars over time
Forks over time
Releases over time
PRs over time
Commits over time
9 development-tooling and community-health practices detected across 5 families in the upstream repository
Checks run against github.com/prigasg/twbparser on 2026-10-18.
The R CMD check workflow runs on Linux, macOS and Windows, and on R-devel
GitHub Pages site last deployed 2026-09-28 · The repository has a site deploy workflow
pkgdown site last built 2026-09-28
Show all practicesHide 1 practice
This repository shows signs of AI coding tools.
- Claude Codefirst seen 2026-04-10Named in .Rbuildignore: .claudeNamed in .gitignore: .claudePull request it wrote: opened by a project memberCommits: at least 4 crediting it in the message
- Codexfirst seen 2026-06-17Named in .gitignore: .codex
- Claude Sonnet 4.63 commits · Apr 2026
- Claude Opus 4.81 commit · Jun 2026
Dependencies
Code & Tests
People & History
Pick two releases to compare their code metrics.
- 0.5.1Latest2026-09-28 · current release · diff ↗ ·
removed 2 exports
tbs_custom_sql_graphql, tbs_publish_infoadded 15 exports
audit_tableau_folder, export_migration_bundle, parse_twb, render_migration_brief, scaffold_quarto_dashboard, scaffold_shiny_dashboard, translate_tableau_calc, twb_calc_build_order, twb_compatibility, twb_dashboard_charts, twb_lineage, twb_migration_assessment, twb_parameter_usage, twb_sheet_spec, twb_unused_fields - 0.5.02026-06-18 · diff ↗ ·
added 4 exports
run_twbparser_app, twb_dashboard_size, twb_formatting, twb_tooltips - RR 4.6.0 released · 2026-04-24
- 0.4.02026-04-14 · diff ↗ ·
added 10 exports
twb_calc_complexity, twb_dashboard_actions, twb_dashboard_layout, twb_dashboard_sheets, twb_field_usage, twb_replication_brief, twb_sheet_axes, twb_sheet_filters, twb_sheet_shelves, twb_sheet_sorts - 0.3.12025-12-10 · diff ↗ ·
added 8 exports
twb_charts, twb_colors, twb_dashboard_filters, twb_dashboard_summary, twb_dashboards, twb_page_composition, twb_pages, twb_pages_summary - 0.2.32025-09-30
- RR 4.5.0 released · 2025-04-11
Package metadata
- First published
- 2025-09-30
- Total releases
- 5 / 1 yrs
- License
- MIT + file LICENSE OSI
- Minimum R
- ≥ 4.2.0
- Download size
- 1.3 MB
Cite
Cite this package
Run in R for the authors' preferred citation:
citation("twbparser")This package has no citation file, so citation() returns this entry built from DESCRIPTION.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-21, which the citation names so these numbers can be found later. More on citing and the projects behind them.