We, over here at Linium, love Tableau Server. Big time.
It takes quite the tool to be able to wrap around all my procedural data hacking and make it look like it came that way. Custom internal apps + Salesforce data + consultant time-tracking data + Quickbooks data etc - it all fits, works, comes together and looks BEA-utiful thanks to my sick "Data Artist" skills (cough, cough, kidding).
Sounds good, right? Gee, you could almost (gasp!) run your entire freaking business on Tableau! Perish the thought! :)
When doing a multi-department integration (data automation) client project, even when you're front-ending it with a product as good as Tableau, there comes a time when your end-users, practice leads, etc, ask for something that isn't exactly inside Tableau's wheelhouse - say, "data entry".
Let's say you're trying to consolidate a mess of "resource planning" Excel spreadsheets so they can be reported on in your Tableau datasource - WITH the rest of the company data.
1) You COULD write an SSIS / DTS package in SQL Server to allow you to pull in this data (from various Excel files) on a semi-daily basis, but anyone with experience doing THAT knows that they'd rather take a boot to the head instead of constantly chasing after arbitrary document structure changes and user error.
2) You COULD write a simple custom web app on the intranet and then import that data into the OLAP cubes that already exist (if you've got the time), but then we're sending business peeps all over the damn intranet for different reasons for the same data. Not to mention another "app" to maintain.
Besides, we're trying to force them to use their fancy Tableau server login for EVERYTHING company-wide, so why would we want them going to yet ANOTHER internal web property. People tend get all pissy about shit like that.
Shoot the hostage. Shoot the hostage? Harry, no. "
A quicker and more "elegant" solution?
Use a cool package like PhpGrid and embedded web parts in Tableau dashboards to allow end-users to change the data on the fly.
Impatient? Skip down to the bottom for a brief screencast demonstration.
Is it a hack?
Is it using Tableau in a way most wouldn't envision?
This can be VERY useful for anyone who needs to report on a dataset that needs to have a bit of end-user entry that is BEYOND the tool-data we are reporting on. Is that clear? Clear as mud, eh?
Ok. Let me try and illustrate a use-case. For example, you could be reporting on a proprietary employee time-tracking system. We create our vizzes, reports, and all that hootenanny off the stock, (virtually) untouchable database. Then - after the initial roll-out and consumption, the various Project Managers want certain added fields and metrics implemented into the report that our time-tracking system does not support.
How about these for starters:
- Project Percent Completion
- Current Project Issues
- Planned Hours Per Employee per Project for the rest of the year
Now we're back to the choices I mentioned earlier. Which all take quite a bit of time and effort, and will STILL be less-than-ideal. What can we do?
Here are our needs for this use case:
- Some extra tables in our datasource (whole new database, whatever)
- Ability for end-users to modify the table data at will
- The interface to be flexible and easy to understand (for said end-users)
- Deliver it in a way that appears seemless to Tableau (the platform we are pushing)
Fastest and quickest way to deploy some data-editing features? A cool like package called PhpGrid. It's a fully customizable HTML5 "editable datagrid" implementation using ADODB5 (so it has lots of datasource support) and PHP. Also, its easy to use, and its damn cheap.
You can get an editable SQL table up in a matter of minutes - customized, prettified and formatted for your use in only hours. The best part is, even with all the AJAX-y magic of HTML5 and jQuery going on - it won't interfere with the rest of your Tableau dashboard at all.
Set up a secondary Apache/PHP webserver on your Tableau server (or where ever) using a different port and get it running. Build your tables for the "new" data (keep in mind that you're going to have to report on these tables and tie them into the "main" tables at some point - so design them with a smidgen of care).
Set up a PHP page to display and make that table editable (create, update, delete) via PhpGrid.
Now depending on the level of interactivity required in the initial dashboard - you may not have to do a whole lot more than that on the PHP side. For my use, I needed to allow the user to select what practice they were editing within the dashboard and refresh the PhpGrid data accordingly. I did this with some simple php $_GET['var'] variables and then populated those variables with a Tableau Dashboard Action.
Now users are free to add / change / delete resource plans for particular employees - and with a quick refresh, they will be able to see it reflected in the viz (as well as all the other vizzes - since I set THIS particular datasource to read directly from the database and not be made into an extract)