The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
library(twbparser)
ok <- FALSE
twb_path <- system.file("extdata", "test_for_wenjie.twb", package = "twbparser")
if (nzchar(twb_path) && file.exists(twb_path)) {
parser <- TwbParser$new(twb_path)
ok <- TRUE
} else {
cat("> Demo .twb not found in installed package. Skipping executable examples.\n")
}
#> TWB loaded: test_for_wenjie.twb
#> TWB parsed and readytwbparser parses Tableau .twb and
.twbx workbooks and exposes datasources, relationships,
joins, fields, calculated fields, and TWBX assets. It also provides
page-centric insights — dashboards, worksheets, stories, their
composition, filter positions, chart types, and colors/palettes — as
well as per-worksheet shelf/filter/axis/sort details and per-dashboard
zone layout and actions. This vignette demonstrates common use
cases.
parser$summary
#> TWB PARSER SUMMARY
#> ------------------
#> File: test_for_wenjie.twb
#> Datasources: 2
#> Parameters: 0
#> Relationships: 1
#> Calculated fields: 1
#> Raw fields: 55
#> Inferred joins: 0
#> Dashboards: 0
#> Total filters: 0
#> NULL
parser$overview
#> # A tibble: 1 × 9
#> file datasources parameters relationships calculated_fields raw_fields
#> <chr> <int> <int> <int> <int> <int>
#> 1 test_for_we… 2 0 1 1 55
#> # ℹ 3 more variables: inferred_relationships <int>, dashboards <int>,
#> # total_filters <int>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>Parameters are excluded by default from calculated fields; opt-in via
include_parameters = TRUE.
head(parser$get_fields())
#> # A tibble: 6 × 10
#> datasource name caption datatype role semantic_role table table_clean
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 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>
head(parser$get_calculated_fields(pretty = TRUE, wrap = 120))
#> # 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>List all pages and summarize each page
twb_pages(parser)
#> # A tibble: 1 × 2
#> page_type name
#> <chr> <chr>
#> 1 worksheet Sheet 1
twb_pages_summary(parser)
#> # A tibble: 1 × 6
#> page_type name mark_types n_filters n_legends n_parameter_controls
#> <chr> <chr> <chr> <int> <int> <int>
#> 1 worksheet Sheet 1 "" 0 0 0Inspect what a specific page contains
pg <- twb_pages(parser)
nm <- if (nrow(pg)) pg$name[[1]] else NA_character_
if (!is.na(nm)) {
parser$get_page_composition(nm)
}
#> # A tibble: 1 × 11
#> page_type page_name component_type zone_id target field presentation x
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <int>
#> 1 worksheet Sheet 1 mark_type <NA> <NA> <NA> <NA> NA
#> # ℹ 3 more variables: y <int>, w <int>, h <int>Filters and their positions across dashboards
Chart (mark) types per worksheet and colors/palettes
Each of the four functions below accepts an optional
sheet argument to restrict output to a single
worksheet.
shelves <- twb_sheet_shelves(parser)
head(shelves)
#> # A tibble: 6 × 7
#> sheet shelf field_ref field_instance field_clean datasource aggregation
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 Sheet 1 color [federated… none:Calculat… Calculatio… federated… <NA>
#> 2 Sheet 1 cols [federated… Longitude (ge… Longitude … federated… <NA>
#> 3 Sheet 1 geometry [federated… clct:Geometry… Geometry federated… <NA>
#> 4 Sheet 1 lod [federated… clct:Geometry… Geometry federated… <NA>
#> 5 Sheet 1 lod [federated… none:counts:qk counts federated… <NA>
#> 6 Sheet 1 rows [federated… Latitude (gen… Latitude (… federated… <NA>The shelf column distinguishes "rows",
"cols", "color", "size",
"label", "detail", and
"tooltip".
filters <- twb_sheet_filters(parser)
head(filters)
#> # A tibble: 0 × 9
#> # ℹ 9 variables: sheet <chr>, field_ref <chr>, field_clean <chr>,
#> # datasource <chr>, filter_class <chr>, include_mode <chr>, members <chr>,
#> # range_min <chr>, range_max <chr>Categorical filters include a comma-separated members
column; range filters populate range_min /
range_max.
db_sheets <- twb_dashboard_sheets(parser)
head(db_sheets)
#> # A tibble: 0 × 7
#> # ℹ 7 variables: dashboard <chr>, sheet <chr>, zone_id <chr>, x <int>, y <int>,
#> # w <int>, h <int>x, y, w, h are
pixel coordinates within the dashboard canvas.
layout <- twb_dashboard_layout(parser)
head(layout)
#> # A tibble: 0 × 10
#> # ℹ 10 variables: dashboard <chr>, zone_id <chr>, parent_zone_id <chr>,
#> # component_type <chr>, target <chr>, layout_type <chr>, x <int>, y <int>,
#> # w <int>, h <int>parent_zone_id links child zones to their container;
root zones have NA. component_type is one of
"worksheet", "filter",
"container", "legend",
"parameter_control", "text",
"image", or "blank".
actions <- twb_dashboard_actions(parser)
head(actions)
#> # A tibble: 0 × 6
#> # ℹ 6 variables: action_name <chr>, action_type <chr>, source_sheets <chr>,
#> # target_sheet <chr>, run_on <chr>, url <chr>action_type is "filter",
"url", "highlight", or
"parameter". source_sheets is a
comma-separated list; url is populated for URL actions.
relations <- parser$get_relationships()
head(relations)
#> # 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>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.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.