Version Control: Revision History in Tableau 9.3
Prior to Tableau Server 9.3 Version Control and Revision History were one of the most wanted Server features. During the Developers on Stage presentation at TC15 (nah that was a party) I saw this new feature show cased and it was like “yes, this is what we need exactly“. Something what even the end users can use: nothing complicated, still effective. Tableau 9.3 will be released in the next days so let’s see what we can expect and how it works internally.
Enable Revision History
By default Revision History is turned off. I would consider to turn this on every site that my team administers since it does not significantly affect repository performance and as the objects are stored without extracts the storage requirements are low as well.
To turn on Setting, General and enable “Save a history of revisions“.

Enable Revision History in Tableau Server Settings
Whenever you publish a new workbook from Desktop or Server Web Authoring Tableau will replace the metadata in the workbooks table while keeping the old versions in the FileStore and workbook_versions or datasource_versions tables.
I will explain this later.
Accessing Revision History features
Currently there is no way to specify comments to revisions or undelete deleted workbooks, thus, the whole process is pretty straightforward. When you publish or overwrite a workbook or data source you don’t have to do anything different, versions kept automatically.
In case you’d like to go back to a previous version simply navigate to your workbook or datasource in Tableau Server and select “Revision History…” from the context menu:
Every save or publish creates a new revision with an increased version number. If this version number is not really useful for you, you can still identify your required previous object by Publish Date or Publisher similar to Dropbox.
So how does this work under the hood?
Where are my revisions stored?
Repository & Metadata
Not to mess up with compatibility Tableau decided to create new, standalone tables for version history. Let’s consider an example with two revisions:
If you check the workbook_versions table you can see previous versions but not the current one:
workgroup=> select name,version_number,published_at,content_key from workbooks inner join workbook_versions on (workbooks.id = workbook_id) where name = 'Regional' ; name | version_number | published_at | content_key ----------+----------------+-------------------------+-------------------------------------- Regional | 1 | 2016-03-07 13:50:30.306 | 651680fc-8d1c-4bec-9af0-98fb8225a7fb (1 row)
Couple of comments here. First of all, you don’t see any repository_data_id which might be strange if you used to use it in workbooks table. The reason is simple: unlike current versions, previous revisions are not stored as postgres large objects but kept directly in the FileStore.
If you need the big picture (all versions including the current ones) you need to unite both tables like this:
workgroup=> select * from (select name,version_number,published_at,content_key from workbooks inner join workbook_versions on (workbooks.id = workbook_id) union all select name,content_version,last_published_at,'' content_key from workbooks) t where name = 'Regional' order by version_number desc; name | version_number | published_at | content_key ----------+----------------+-------------------------+-------------------------------------- Regional | 2 | 2016-03-19 13:01:03.961 | Regional | 1 | 2016-03-07 13:50:30.306 | 651680fc-8d1c-4bec-9af0-98fb8225a7fb (2 rows)
Why this column is called content_version in workbooks but version_number in workbook_versions ? I have no idea, but Tableau should be more consistent with its naming conventions. For instance, workbooks table already has version , revision and content_version columns but on the UI we can see it with “Revision Number” label. Guys, next time keep it consistent.
Locate your files in FileStore
From 9.3 you can find a new subdirectory in your FileStore root called “revision”:
Inside this folder you can find your file, called exactly the same as the content_key column in the matching workbook_versions or datasource_versions table.
You can use this file directly, simply copy and change the extension. I hope in future Tableau releases the current versions will be stored here as well giving a chance to use external version control tools like git directly on this folder.
Purge previous versions
You can delete individual versions from the Revision History menu or remove all previous revisions from the Settings, General admin menu on Server.
Other solutions
In production my team uses two alternate solutions. If we need intuitive user interface and the stored data as well (extracts I mean) we use Palette Center. Center can automatically back up workbooks and data stores in packaged mode along with dependencies, directly to Amazon S3. The other method is my TableauFS with Git that provides a nice hardcore interface with maximum control, without any support.
Do you have any questions or experience? Leave a comment.