Reporting Services can't dynamically shift with a dataset that has changing columns as you have described.
However, you can use the matrix to get the same affect. First, you need to have a query that passes back a set dataset instead of a dynamic one. For Example, if you are putting months across your columns, make each month its own row (and a single column) instead. This will flatten the dataset for Reporting Services. Then use the Matrix control to get your cross tab affect. The Matrix will group by each individual month.