Hey Neil -
I'm no longer familiar with the internals of JET (the database engine for MS Access), but what you're seeing doesn't really surprise me.
I suspect that that unless you're IN a tool that directly supports VBA/VB/C#/whatever and knows HOW to reference code stashed in a module, then the function that you've written (let's say "myFunction()" ) and the reference TO that function is simply seen as a syntax error since there is no SQL command called myFunction()
In your shoes, I'd consider not using the UDF and simply re-writing the same logic inside Tableau, since we support CASE in our expression language.
This probably isn't exactly the answer you're looking for, but I want to keep you sane
Edit: Just for kicks I reproduced this behavior not only in Tableau, but in Excel and other tools. For example, the "Get Data from Access" feature of Excel hides queries which utilize UDFs but shows "normal" ones. This tells me the Microsoft JET database driver is returning a list of tables/views that it feels is appropriate for consumption by outside clients.
Message was edited by: Russell Christopher