library(twbparser)
twb_path <- system.file("extdata", "test_for_wenjie.twb", package = "twbparser")
if (nzchar(twb_path) && file.exists(twb_path)) {
parser <- TwbParser$new(twb_path)
} else {
cat("> Demo .twb not found in installed package. Skipping executable example.\n")
cat(" To enable examples, add `inst/extdata/test_for_wenjie.twb` to the package.\n")
}
#> TWB loaded: test_for_wenjie.twb
#> TWB parsed and ready
The twbparser
package allows you to parse Tableau
.twb
and .twbx
workbook files and extract rich
metadata such as datasources, relationships, joins, fields, calculated
fields, and TWBX assets. This vignette demonstrates common use
cases.
datasources <- parser$get_datasources()
parameters <- parser$get_parameters()
print(head(datasources))
#> # A tibble: 2 × 10
#> datasource primary_table connection_id connection_caption connection_class
#> <chr> <chr> <chr> <chr> <chr>
#> 1 Municipal_Bou… [Municipal_B… ogrdirect.07… Municipal_Boundar… ogrdirect
#> 2 Sheet1 [Sheet1$] excel-direct… test_county excel-direct
#> # ℹ 5 more variables: connection_target <chr>, datasource_name <chr>,
#> # field_count <int>, connection_type <chr>, location <chr>
print(head(parameters))
#> # A tibble: 0 × 5
#> # ℹ 5 variables: datasource_name <chr>, primary_table <chr>, field_count <int>,
#> # connection_type <chr>, location <chr>
relations <- parser$get_relations()
joins <- parser$get_joins()
relationships <- parser$get_relationships()
inferred_relationships <- parser$get_inferred_relationships()
cat("Legacy relations:\n")
#> Legacy relations:
print(head(relations))
#> # A tibble: 4 × 6
#> name table connection type join custom_sql
#> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 Sheet1 [She… excel-dir… table <NA> ""
#> 2 Municipal_Boundaries_of_NJ [Mun… ogrdirect… table <NA> ""
#> 3 Sheet1_F3CB2A87000C42DCA10AF147C27ADE… [Ext… <NA> table <NA> ""
#> 4 Municipal_Boundaries_of_NJ_2A19790ECA… [Ext… <NA> table <NA> ""
cat("Join clauses:\n")
#> Join clauses:
print(head(joins))
#> # A tibble: 0 × 6
#> # ℹ 6 variables: join_type <chr>, left_table <chr>, left_field <chr>,
#> # operator <chr>, right_table <chr>, right_field <chr>
cat("Modern relationships:\n")
#> Modern relationships:
print(head(relationships))
#> # A tibble: 1 × 8
#> relationship_type left_table right_table left_field operator right_field
#> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 Relationship Sheet1 Municipal_Bounda… County = COUNTY
#> # ℹ 2 more variables: left_is_calc <lgl>, right_is_calc <lgl>
cat("Inferred relationships:\n")
#> Inferred relationships:
print(head(inferred_relationships))
#> # A tibble: 0 × 5
#> # ℹ 5 variables: left_table <chr>, left_field <chr>, right_table <chr>,
#> # right_field <chr>, reason <chr>
fields <- parser$get_fields()
calculated_fields <- parser$get_calculated_fields(pretty = TRUE)
cat("Sample raw fields:\n")
#> Sample raw fields:
print(head(fields))
#> # A tibble: 6 × 10
#> datasource name caption datatype role semantic_role table table_clean
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <lgl>
#> 1 federated.0grgao… OBJE… <NA> integer <NA> <NA> <NA> NA
#> 2 federated.0grgao… MUN <NA> string <NA> <NA> <NA> NA
#> 3 federated.0grgao… COUN… <NA> string <NA> <NA> <NA> NA
#> 4 federated.0grgao… MUN_… <NA> string <NA> <NA> <NA> NA
#> 5 federated.0grgao… MUN_… <NA> string <NA> <NA> <NA> NA
#> 6 federated.0grgao… NAME <NA> string <NA> <NA> <NA> NA
#> # ℹ 2 more variables: field_clean <chr>, is_parameter <lgl>
cat("Sample calculated fields:\n")
#> Sample calculated fields:
print(head(calculated_fields))
#> # A tibble: 1 × 9
#> datasource name datatype role is_table_calc calc_class formula_pretty
#> <chr> <chr> <chr> <chr> <lgl> <chr> <chr>
#> 1 federated.0grgao… no d… string dime… FALSE tableau "if ISNULL([c…
#> # ℹ 2 more variables: tableau_internal_name <chr>, table_clean <chr>
cat("TWBX manifest contents:\n")
print(parser$get_twbx_manifest())
cat("Listing TWBX extract files:\n")
print(parser$get_twbx_extracts())
cat("Listing TWBX images:\n")
print(parser$get_twbx_images())
# Example: Extract all image files to temporary directory
# temp_images_dir <- tempdir()
# parser$extract_twbx_assets(types = "image", exdir = temp_images_dir)
# cat("Extracted TWBX images to:", temp_images_dir, "\n")
This vignette overviewed how to use the twbparser
package for detailed inspection and extraction of Tableau workbook
internals to assist in analysis, replication, or integration
workflows.