Is there anyway to avoid manually refreshing an extract without publishing the data source? My work has disabled scheduled extract refreshing in order to maintain server performance. I'm wondering if there is another way. The one extract I have takes almost 3 hours to refresh.

Have you looked at why the extract takes too long to refresh? How many rows of data do you have? Is your data stored in a SQL database? Are you joining multiple data sources in Tableau or is your workbook connected to a single database table/view?

I once had an extract created in Tableau by joining 5 SQL database tables and views. These tables had multiple many to many relationships. The original database tables have up to 20 million rows of data but a data source filter was applied in Tableau reducing the number of rows in the extract to just over over 1 million. It took about 3 hours to refresh.

However, once we created a materialized view in our database and then connected Tableau to the materialized view, the extract refreshed in under 1 minute. It was unbelievable. Sometimes, investigating why the extract is taking too long is the best place to start.

Another thing to check is your version of Tableau. You could suggest upgrading to Tableau 10.5 or higher to your boss, if you are not yet using those versions.

The database is very large, it is sql. I know there's over 20 million rows from what the extract window had been displaying. I filtered the data down to just one month and that didn't help. I am using 10.5.

A view is a virtual table created by a select query. However, this virtual table is not stored anywhere in the database. The query will need to be re-run each time you want to retrieve the data and depending on the complexity of query and size of the underlying tables, performance may be compromised.

However, you can 'materialize' this view or 'virtual table' by storing the result of the query in the database as an actual table. So,each time the data is needed you can simply retrieve records from this table without having to re-run the query. This is why performance is improved by using materialized views.

Ask your data team to create the materialized view for you. You will have to give them the SQL query or show them how you are joining the data sources in Tableau. Best way will be to convert your Tableau data join to custom SQL and send the script to them.