{
  "_id": "6a103d79acfb0bcc41c9c456",
  "Package": "twbparser",
  "Title": "Parse 'Tableau' Workbooks into Functional Data",
  "Version": "0.4.0",
  "Authors@R": "person(\"George\", \"Arthur\", , \"prigasgenthian48@gmail.com\", role = c(\"aut\", \"cre\"),\ncomment = c(ORCID = \"0000-0002-1975-1459\"))",
  "Description": "High-performance parsing of 'Tableau' workbook files into\ntidy data frames and dependency graphs for other visualization\ntools like R 'Shiny' or 'Power BI' replication.",
  "License": "MIT + file LICENSE",
  "URL": "https://prigasg.github.io/twbparser/,\nhttps://github.com/PrigasG/twbparser",
  "BugReports": "https://github.com/PrigasG/twbparser/issues",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "Encoding": "UTF-8",
  "Language": "en-US",
  "Roxygen": "list(markdown = TRUE, r6 = FALSE)",
  "RoxygenNote": "7.3.3",
  "Config/pak/sysreqs": "libglpk-dev libicu-dev libxml2-dev",
  "Repository": "https://prigasg.r-universe.dev",
  "Date/Publication": "2026-04-11 14:54:58 UTC",
  "RemoteUrl": "https://github.com/prigasg/twbparser",
  "RemoteRef": "HEAD",
  "RemoteSha": "61768036672d96811ee38d2a18209e299b226240",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-05-11 09:44:09 UTC",
    "User": "root"
  },
  "Author": "George Arthur [aut, cre] (ORCID:\n<https://orcid.org/0000-0002-1975-1459>)",
  "Maintainer": "George Arthur <prigasgenthian48@gmail.com>",
  "MD5sum": "ea407f594474e6ebf21e47bb4178350d",
  "_user": "prigasg",
  "_type": "src",
  "_file": "twbparser_0.4.0.tar.gz",
  "_fileid": "398b847e060f5cd3c2013b619b3644708593011b72cebfbdb2c4239e47f02f29",
  "_filesize": 1451787,
  "_sha256": "398b847e060f5cd3c2013b619b3644708593011b72cebfbdb2c4239e47f02f29",
  "_created": "2026-05-11T09:44:09.000Z",
  "_published": "2026-05-22T11:26:48.992Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 77370250636,
      "time": 160,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "6915275915"
    },
    {
      "job": 77370250945,
      "time": 157,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6915274688"
    },
    {
      "job": 77370250988,
      "time": 225,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "6915278641"
    },
    {
      "job": 77370250580,
      "time": 224,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6915277285"
    },
    {
      "job": 77370250484,
      "time": 234,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6915222221"
    },
    {
      "job": 77370250141,
      "time": 127,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7159370478"
    },
    {
      "job": 77370250843,
      "time": 101,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "6915256183"
    },
    {
      "job": 77370251119,
      "time": 97,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "6915254877"
    },
    {
      "job": 77370250941,
      "time": 135,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "6915268133"
    }
  ],
  "_buildurl": "https://github.com/r-universe/prigasg/actions/runs/25662462227",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/prigasg/twbparser",
  "_commit": {
    "id": "61768036672d96811ee38d2a18209e299b226240",
    "author": "George Arthur <55806509+PrigasG@users.noreply.github.com>",
    "committer": "GitHub <noreply@github.com>",
    "message": "Merge pull request #3 from PrigasG/claude/charming-chatelet\n\nMark lifecycle as stable",
    "time": 1775919298
  },
  "_maintainer": {
    "name": "George Arthur",
    "email": "prigasgenthian48@gmail.com",
    "login": "prigasg",
    "orcid": "0000-0002-1975-1459",
    "uuid": 55806509
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.2.0",
      "role": "Depends"
    },
    {
      "package": "dplyr",
      "role": "Imports"
    },
    {
      "package": "igraph",
      "role": "Imports"
    },
    {
      "package": "purrr",
      "role": "Imports"
    },
    {
      "package": "R6",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "role": "Imports"
    },
    {
      "package": "stringr",
      "role": "Imports"
    },
    {
      "package": "tibble",
      "role": "Imports"
    },
    {
      "package": "tidyr",
      "role": "Imports"
    },
    {
      "package": "withr",
      "role": "Imports"
    },
    {
      "package": "xml2",
      "role": "Imports"
    },
    {
      "package": "cli",
      "role": "Suggests"
    },
    {
      "package": "covr",
      "role": "Suggests"
    },
    {
      "package": "ggraph",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "lintr",
      "role": "Suggests"
    },
    {
      "package": "magrittr",
      "role": "Suggests"
    },
    {
      "package": "optparse",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "spelling",
      "role": "Suggests"
    },
    {
      "package": "styler",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "tidygraph",
      "role": "Suggests"
    },
    {
      "package": "vctrs",
      "role": "Suggests"
    },
    {
      "package": "zip",
      "role": "Suggests"
    }
  ],
  "_owner": "prigasg",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2025-33",
      "n": 27
    },
    {
      "week": "2025-35",
      "n": 5
    },
    {
      "week": "2025-36",
      "n": 1
    },
    {
      "week": "2025-46",
      "n": 2
    },
    {
      "week": "2025-50",
      "n": 5
    },
    {
      "week": "2026-15",
      "n": 3
    }
  ],
  "_tags": [
    {
      "name": "v0.2.0",
      "date": "2025-08-14"
    },
    {
      "name": "v0.3.0",
      "date": "2025-09-07"
    },
    {
      "name": "v0.3.1",
      "date": "2025-12-10"
    }
  ],
  "_stars": 1,
  "_contributors": [
    {
      "user": "prigasg",
      "count": 45,
      "uuid": 55806509
    }
  ],
  "_userbio": {
    "uuid": 55806509,
    "type": "user",
    "name": "George Arthur",
    "description": "Code admirer and learner"
  },
  "_downloads": {
    "count": 425,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/twbparser"
  },
  "_devurl": "https://github.com/prigasg/twbparser",
  "_pkgdown": "https://prigasg.github.io/twbparser/",
  "_searchresults": 10,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "extra/twbparser.html",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/prigasg/twbparser",
  "_realowner": "prigasg",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.2.3",
      "date": "2025-10-03"
    },
    {
      "version": "0.3.1",
      "date": "2025-12-11"
    },
    {
      "version": "0.4.0",
      "date": "2026-04-14"
    }
  ],
  "_exports": [
    "build_dependency_graph",
    "extract_calculated_fields",
    "extract_columns_with_table_source",
    "extract_datasource_details",
    "extract_joins",
    "extract_named_connections",
    "extract_parameters",
    "extract_raw_fields",
    "extract_relations",
    "extract_relationships",
    "extract_twb_from_twbx",
    "infer_implicit_relationships",
    "plot_dependency_graph",
    "plot_relationship_graph",
    "plot_source_join_graph",
    "prettify_calculated_fields",
    "tableau_formula_pretty",
    "tbs_custom_sql_graphql",
    "tbs_publish_info",
    "twb_calc_complexity",
    "twb_charts",
    "twb_colors",
    "twb_custom_sql",
    "twb_dashboard_actions",
    "twb_dashboard_filters",
    "twb_dashboard_layout",
    "twb_dashboard_sheets",
    "twb_dashboard_summary",
    "twb_dashboards",
    "twb_field_usage",
    "twb_initial_sql",
    "twb_page_composition",
    "twb_pages",
    "twb_pages_summary",
    "twb_published_refs",
    "twb_replication_brief",
    "twb_sheet_axes",
    "twb_sheet_filters",
    "twb_sheet_shelves",
    "twb_sheet_sorts",
    "TwbParser",
    "twbx_extract_files",
    "twbx_list",
    "validate_relationships"
  ],
  "_help": [
    {
      "page": "build_dependency_graph",
      "title": "Build a field dependency graph from calculated fields",
      "topics": [
        "build_dependency_graph"
      ]
    },
    {
      "page": "extract_calculated_fields",
      "title": "Extract calculated fields from a TWB",
      "topics": [
        "extract_calculated_fields"
      ]
    },
    {
      "page": "extract_columns_with_table_source",
      "title": "Extract columns with their source tables from a TWB",
      "topics": [
        "extract_columns_with_table_source"
      ]
    },
    {
      "page": "extract_datasource_details",
      "title": "Extract datasource details from a Tableau TWB",
      "topics": [
        "extract_datasource_details"
      ]
    },
    {
      "page": "extract_joins",
      "title": "Extract Tableau join clauses from <relation type=\"join\"> nodes",
      "topics": [
        "extract_joins"
      ]
    },
    {
      "page": "extract_named_connections",
      "title": "Extract <named-connection> entries from a TWB",
      "topics": [
        "extract_named_connections"
      ]
    },
    {
      "page": "extract_parameters",
      "title": "Extract parameter fields from a TWB",
      "topics": [
        "extract_parameters"
      ]
    },
    {
      "page": "extract_raw_fields",
      "title": "Extract non-calculated, non-parameter fields from a TWB",
      "topics": [
        "extract_raw_fields"
      ]
    },
    {
      "page": "extract_relations",
      "title": "Extract all <relation> tags from a TWB",
      "topics": [
        "extract_relations"
      ]
    },
    {
      "page": "extract_relationships",
      "title": "Extract modern relationships from a Tableau TWB",
      "topics": [
        "extract_relationships"
      ]
    },
    {
      "page": "extract_twb_from_twbx",
      "title": "Extract the .twb (and optionally all files) from a .twbx",
      "topics": [
        "extract_twb_from_twbx"
      ]
    },
    {
      "page": "infer_implicit_relationships",
      "title": "Infer implicit relationships between tables from field metadata",
      "topics": [
        "infer_implicit_relationships"
      ]
    },
    {
      "page": "plot_dependency_graph",
      "title": "Plot a field dependency graph",
      "topics": [
        "plot_dependency_graph"
      ]
    },
    {
      "page": "plot_relationship_graph",
      "title": "Plot a field-level relationship DAG (legacy)",
      "topics": [
        "plot_relationship_graph"
      ]
    },
    {
      "page": "plot_source_join_graph",
      "title": "Plot a source join graph",
      "topics": [
        "plot_source_join_graph"
      ]
    },
    {
      "page": "prettify_calculated_fields",
      "title": "Add a prettified formula column to calculated fields table",
      "topics": [
        "prettify_calculated_fields"
      ]
    },
    {
      "page": "tableau_formula_pretty",
      "title": "Prettify a Tableau calculation formula for display",
      "topics": [
        "tableau_formula_pretty"
      ]
    },
    {
      "page": "tbs_custom_sql_graphql",
      "title": "Custom SQL (Metadata API) for a published item",
      "topics": [
        "tbs_custom_sql_graphql"
      ]
    },
    {
      "page": "tbs_publish_info",
      "title": "Publish info for a workbook or datasource on 'Tableau' Server/Cloud",
      "topics": [
        "tbs_publish_info"
      ]
    },
    {
      "page": "twb_calc_complexity",
      "title": "Classify calculated fields by complexity",
      "topics": [
        "twb_calc_complexity"
      ]
    },
    {
      "page": "twb_charts",
      "title": "Chart (mark) types per worksheet.",
      "topics": [
        "twb_charts"
      ]
    },
    {
      "page": "twb_colors",
      "title": "Colors and palettes referenced in the workbook.",
      "topics": [
        "twb_colors"
      ]
    },
    {
      "page": "twb_custom_sql",
      "title": "Extract Custom SQL relations from a Tableau workbook",
      "topics": [
        "twb_custom_sql"
      ]
    },
    {
      "page": "twb_dashboard_actions",
      "title": "Extract dashboard and workbook actions",
      "topics": [
        "twb_dashboard_actions"
      ]
    },
    {
      "page": "twb_dashboard_filters",
      "title": "Filters found on dashboards and their positions.",
      "topics": [
        "twb_dashboard_filters"
      ]
    },
    {
      "page": "twb_dashboard_layout",
      "title": "Full layout of dashboard zones with container hierarchy",
      "topics": [
        "twb_dashboard_layout"
      ]
    },
    {
      "page": "twb_dashboard_sheets",
      "title": "List worksheets embedded in each dashboard",
      "topics": [
        "twb_dashboard_sheets"
      ]
    },
    {
      "page": "twb_dashboard_summary",
      "title": "Per-dashboard summary (filters count and chart types).",
      "topics": [
        "twb_dashboard_summary"
      ]
    },
    {
      "page": "twb_dashboards",
      "title": "Dashboards overview (count of zones and referenced worksheets).",
      "topics": [
        "twb_dashboards"
      ]
    },
    {
      "page": "twb_field_usage",
      "title": "Field usage matrix across worksheets",
      "topics": [
        "twb_field_usage"
      ]
    },
    {
      "page": "twb_initial_sql",
      "title": "Extract Initial SQL statements from Tableau connections",
      "topics": [
        "twb_initial_sql"
      ]
    },
    {
      "page": "twb_page_composition",
      "title": "Show what a specific page is composed of.",
      "topics": [
        "twb_page_composition"
      ]
    },
    {
      "page": "twb_pages",
      "title": "List all pages (dashboards, worksheets, stories).",
      "topics": [
        "twb_pages"
      ]
    },
    {
      "page": "twb_pages_summary",
      "title": "Summary of all pages (counts and quick descriptors).",
      "topics": [
        "twb_pages_summary"
      ]
    },
    {
      "page": "twb_published_refs",
      "title": "Detect references to published data sources",
      "topics": [
        "twb_published_refs"
      ]
    },
    {
      "page": "twb_replication_brief",
      "title": "Replication brief for a Tableau workbook or dashboard",
      "topics": [
        "twb_replication_brief"
      ]
    },
    {
      "page": "twb_sheet_axes",
      "title": "Extract axis configuration for worksheets",
      "topics": [
        "twb_sheet_axes"
      ]
    },
    {
      "page": "twb_sheet_filters",
      "title": "Extract detailed filter configuration for worksheets",
      "topics": [
        "twb_sheet_filters"
      ]
    },
    {
      "page": "twb_sheet_shelves",
      "title": "Extract field-to-shelf assignments for worksheets",
      "topics": [
        "twb_sheet_shelves"
      ]
    },
    {
      "page": "twb_sheet_sorts",
      "title": "Extract sort configuration for worksheets",
      "topics": [
        "twb_sheet_sorts"
      ]
    },
    {
      "page": "TwbParser",
      "title": "Tableau Workbook Parser (R6)",
      "topics": [
        "TWBParser",
        "TwbParser"
      ]
    },
    {
      "page": "twbx_extract_files",
      "title": "Extract specific files from a .twbx",
      "topics": [
        "twbx_extract_files"
      ]
    },
    {
      "page": "twbx_list",
      "title": "List contents of a Tableau .twbx",
      "topics": [
        "twbx_list"
      ]
    },
    {
      "page": "validate_relationships",
      "title": "Validate relationships against available datasources and fields",
      "topics": [
        "validate_relationships"
      ]
    }
  ],
  "_pkglogo": "https://github.com/prigasg/twbparser/raw/HEAD/man/figures/logo.png",
  "_readme": "https://github.com/prigasg/twbparser/raw/HEAD/README.md",
  "_rundeps": [
    "cli",
    "cpp11",
    "dplyr",
    "generics",
    "glue",
    "igraph",
    "lattice",
    "lifecycle",
    "magrittr",
    "Matrix",
    "pillar",
    "pkgconfig",
    "purrr",
    "R6",
    "rlang",
    "stringi",
    "stringr",
    "tibble",
    "tidyr",
    "tidyselect",
    "utf8",
    "vctrs",
    "withr",
    "xml2"
  ],
  "_vignettes": [
    {
      "source": "twbparser-intro.Rmd",
      "filename": "twbparser-intro.html",
      "title": "twbparser-intro",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Introduction",
        "Parse a Tableau Workbook",
        "Extracting Datasources and Parameters",
        "Fields and calculated fields",
        "Page insights",
        "Worksheet intelligence",
        "Shelves — what fields are on rows, cols, and encodings?",
        "Filters",
        "Axis configuration",
        "Sort directives",
        "Dashboard intelligence",
        "Sheet positions",
        "Zone layout tree",
        "Actions",
        "Relationships and Joins",
        "Working with TWBX Files (if applicable)",
        "Validation of Relationships",
        "Summary"
      ],
      "created": "2025-08-11 16:01:02",
      "modified": "2026-04-11 03:44:30",
      "commits": 6
    }
  ],
  "_score": 4.477121254719663,
  "_indexed": true,
  "_nocasepkg": "twbparser",
  "_universes": [
    "prigasg"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.4.0",
      "date": "2026-05-11T09:46:41.000Z",
      "distro": "noble",
      "commit": "61768036672d96811ee38d2a18209e299b226240",
      "fileid": "ccdf14e440d3bdd2e73cd53e2b385debe7be4c0b436df4839daca6db7ae25ff7",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/prigasg/actions/runs/25662462227"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.4.0",
      "date": "2026-05-11T09:46:37.000Z",
      "distro": "noble",
      "commit": "61768036672d96811ee38d2a18209e299b226240",
      "fileid": "6c037c7670016b0a45f431db4a9e5e3a87de6fbd7eff277901a006bc4db6c673",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/prigasg/actions/runs/25662462227"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.4.0",
      "date": "2026-05-11T09:46:55.000Z",
      "commit": "61768036672d96811ee38d2a18209e299b226240",
      "fileid": "af80146f615b89f09ffb98791ea985da03efab776fb5f0992143fd3027d6c809",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/prigasg/actions/runs/25662462227"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.4.0",
      "date": "2026-05-11T09:46:42.000Z",
      "commit": "61768036672d96811ee38d2a18209e299b226240",
      "fileid": "eae9fd15c755e50fa0189a1f19beb8789114b1e9eddca35a9b1f1c9001714811",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/prigasg/actions/runs/25662462227"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.4.0",
      "date": "2026-05-11T09:45:32.000Z",
      "commit": "61768036672d96811ee38d2a18209e299b226240",
      "fileid": "e46b03e0c9947fbc9008f9ddde927653c48add6cb5dbff9c143457d7a1d16c2f",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/prigasg/actions/runs/25662462227"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.4.0",
      "date": "2026-05-11T09:45:31.000Z",
      "commit": "61768036672d96811ee38d2a18209e299b226240",
      "fileid": "da47776c91a85e311fb4bdee2c9a097f9e5085c203308c6508b67961fbf2c04f",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/prigasg/actions/runs/25662462227"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.4.0",
      "date": "2026-05-11T09:46:08.000Z",
      "commit": "61768036672d96811ee38d2a18209e299b226240",
      "fileid": "f78dfa33c4612facfdead29208e6e2ef0517a3bb9f823aa38aaeb31c2b313739",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/prigasg/actions/runs/25662462227"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.4.0",
      "date": "2026-05-22T11:26:34.000Z",
      "commit": "61768036672d96811ee38d2a18209e299b226240",
      "fileid": "e0757104d4aa1cf12f01c3b4bacc4846fba4d655320bf35fddd915d60880949c",
      "status": "success",
      "buildurl": "https://github.com/r-universe/prigasg/actions/runs/25662462227"
    }
  ]
}