Both. While tableau has a visual query builder, sometimes the queries are too complex. For example they may need self-joins, non-standard join criteria, temporary tables, etc. So ultimately, the tableau guy has to ask a programmer or database person to create a script to use as the tableau source.
One example that involves both is when the visualisation needs a contiguous date range in the data, but the data is missing some dates. As a programmer it is easy to just loop through a date range and put 0 where there is no data.
There are also lots of limitations in terms of the visualisations. The end result was that multiple visualisations had to be created to show something that a programmer would be able to create as one visualisation.
One example that involves both is when the visualisation needs a contiguous date range in the data, but the data is missing some dates. As a programmer it is easy to just loop through a date range and put 0 where there is no data.
There are also lots of limitations in terms of the visualisations. The end result was that multiple visualisations had to be created to show something that a programmer would be able to create as one visualisation.