I am currently writing a server for the TDS protocol (other examples of servers are: SQL Server), which provides a front-end for disparate ODBC clients within a large bank. Tableau is able to connect to it using the Microsoft SQL Server driver.
I have bought Tableau Desktop Professional edition to test this.
It seems to request a lot of meta information when connecting to the source, and I'm hitting a brick wall when I choose a database from the dropdown list, with the following error message:
There is only this message, there are no details. I looked in the log files, and there is no mention of this message. I'm able to load up the data source with the list of databases. When I select my database from the dropdown list, that's when it makes at least the following queries:
EXEC [flask].[sys].sp_fkeys @pktable_name = NULL, @pktable_owner = NULL, @pktable_qualifier = NULL, @fktable_name = N'cucumbers', @fktable_owner = N'flask', @fktable_qualifier = N'flask'; EXEC [flask].[sys].sp_statistics @table_name = N'cucumbers', @table_owner = N'flask', @table_qualifier = N'flask', @is_unique = N'Y', @accuracy = N'Q'; SELECT COLUMN_NAME, COLLATION_NAME, TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'cucumbers'
After the last one, it pops up with that error message.
I'm basically at an impasse, because I don't know what Tableau wants from me. It's not open source, or I'd just grep the source and find what leads to this error. Could a developer from Tableau take a look at where this comes from? What's Tableau trying to do here? Is it because my reply for the third query is the wrong type of varchar/nvarchar? Is it that kind of type? Or is it from one of the other queries? If I double click on 'cucumbers' in the Table list, I see the same "Invalid data type." message (though it makes no query to the database at that point, so the invalidness seems to be cached).
For each of the queries Tableau makes about metadata like this, I've gone and looked at what SQL Server returns and mimicked it. I suspect some field or return value somewhere is wrong, but without more info I'm doomed to find a needle in a haystack.
I'd appreciate any kind of developer input on this!