Besides the wide range of visualization tools such as Qlik, Domo, Sisense, Datawrapper, Google Looker, Power BI, Jaspersoft, SAP Business Object etc., Tableau has a special place. I can freely say that because I used most of the listed tools. However, it is precisely the Tableau tool that provides the greatest width and freedom. (lovers of other tools don’t throw hate)
Tableau as VizQL tool (that visually expresses data by translating drag-and-drop actions into data queries through an intuitive interface) makes data more accessible to people through visualization. It includes making machine learning, statistics, natural language, and intelligent data prep more useful to augment human creativity in analysis.
Are you familiar that the tableau workbook being an XML file? After you un-package and open your workbook via any text editor, you can see a structured XML tree.
</metadata-records>
</connection>
<aliases enabled='yes' />
<column caption='Profit Ratio' datatype='real' name='[Calculation_1368249927221915648]' role='measure' type='quantitative'>
<calculation class='tableau' formula='SUM([Profit])/SUM([Sales])' />
</column>
<column datatype='string' name='[City]' role='dimension' semantic-role='[City].[Name]' type='nominal' />
<column datatype='string' name='[Country/Region]' role='dimension' semantic-role='[Country].[ISO3166_2]' type='nominal' />
<column datatype='string' hidden='true' name='[Customer ID]' role='dimension' type='nominal' />
<column datatype='string' name='[Customer Name]' role='dimension' type='nominal' />
<column datatype='string' hidden='true' name='[Order ID (Returns)]' role='dimension' type='nominal' />
<column aggregation='Sum' datatype='integer' default-format='*00000' name='[Postal Code]' role='dimension'
semantic-role='[ZipCode].[Name]' type='ordinal' />
<column datatype='string' hidden='true' name='[Product ID]' role='dimension' type='nominal' />
<column caption='Manufacturer' datatype='string' name='[Product Name (group)]' role='dimension' type='nominal'>
<calculation class='categorical-bin' column='[Product Name]' new-bin='true'>
<bin default-name='false' value='"3D Systems"'>
<value>"3D Systems Cube Printer, 2nd Generation, Magenta"</value>
<value>"3D Systems Cube Printer, 2nd Generation, White"</value>
XMLXML tree does not contain any code related to visualization.
Instead, it has only metadata: anything you click, drag, drop, calculations field’s formula or a custom SQL query.
On the level of the Tableau Desktop, if you right-click a field in the list of Dimensions or Measures and select Describe, you can see the picture below:

If you check that part in the background of the workbook, the XML code will look like this:
<metadata-record class='column'>
<remote-name>Order Date</remote-name>
<remote-type>7</remote-type>
<local-name>[Order Date]</local-name>
<parent-name>[Orders]</parent-name>
<remote-alias>Order Date</remote-alias>
<ordinal>2</ordinal>
<local-type>date</local-type>
<aggregation>Year</aggregation>
<contains-null>true</contains-null>
<attributes>
<attribute datatype='string' name='DebugRemoteType'>"DATE"</attribute>
</attributes>
<_.fcp.ObjectModelEncapsulateLegacy.true...object-id>[Orders_ECFCA1FB690A41FE803BC071773BA862]</_.fcp.ObjectModelEncapsulateLegacy.true...object-id>
</metadata-record>
XMLAnother example of min and max of dates:

In this example, in the XML file, you can see the worksheet name, data source name, data source dependencies, datatype, role (dimension or measure), derivation etc.:
<worksheets>
<worksheet name='Manipulating XML - Svetlana Kontic'>
<table>
<view>
<datasources>
<datasource name='Sample - Superstore' />
</datasources>
<datasource-dependencies datasource='Sample - Superstore'>
<column datatype='date' name='[Order Date]' role='dimension' type='ordinal' />
<column-instance column='[Order Date]' derivation='Max' name='[max:Order Date:ok]' pivot='key' type='ordinal' />
<column-instance column='[Order Date]' derivation='Min' name='[min:Order Date:ok]' pivot='key' type='ordinal' />
</datasource-dependencies>
<aggregation value='true' />
</view>
<style>
<style-rule element='header'>
<format attr='width' field='[Sample - Superstore].[min:Order Date:ok]' value='188' />
<format attr='width' field='[Sample - Superstore].[max:Order Date:ok]' value='356' />
</style-rule>
</style>
<panes>
<pane selection-relaxation-option='selection-relaxation-allow'>
<view>
<breakdown value='auto' />
</view>
<mark class='Automatic' />
</pane>
</panes>
<rows>([Sample - Superstore].[min:Order Date:ok] / [Sample - Superstore].[max:Order Date:ok])</rows>
<cols />
</table>
<simple-id uuid='{560D4A25-6B94-4D14-BC9C-BD160F64CEA3}' />
</worksheet>
<worksheet name='test'>
XMLWhat does that mean – all these pieces of information in XML form can be programmatically accessed and organized, allowing the user to customize a scripting solution to suit their individual needs.
It means we can manipulate XML files using all different programming languages such as Python, Java, Visual Basic, C#, Java Script etc. With various additional apps, we can create and thus avoid the monotonous repetition of different steps. We can use a workbook and automate multiple processes.
For example, You have created a workbook but want the same workbook with the same sheets, dashboards and formatting in all world languages. So, you won’t make the dashboard manually in Spanish, Polish, Arabic, etc. Instead, you’ll create a script that will do it for you.
Or you imagine you have a tremendous workbook and need to make changes to some of the charts and reconstruct some of the dashboards, but you need to know which data sources are mapping to which worksheets. Awesome! But imagine having ten plus data sources, 100 plus sheets, and 50 plus dashboards in one workbook. You will need to go manually through each worksheet to check which data sources are using.
You can create a simple tool that lists all the data sources and their associated worksheets and fields for any workbook. Beautiful Keshia made this nifty app. And it deserved to be shared, and it could help someone speed up the work processes as it did for me. All you’ll need is to create index.html, script.js, and style.css files 🙂 Please check the app. https://sliceofkeesh.com/post/tableau-data-source-mapper.
If you are interested in creating your script, here are some interesting links:
Manipulation XML file with Python:
https://medium.com/pythoneers/manipulation-of-an-xml-file-with-python-3fcaa383be8c
Manipulation XML file with C#:
https://www.c-sharpcorner.com/article/xml-manipulation-in-c-sharp/
If you have other ideas, think about how you can automate your processes 🙂
