You make it more complex than it has to be... The date fields are daul by their nature, no need for dual(), if loaded properly in the script. Even if it is a text in the data source, it can be loaded as a valid date in the script, for example, assuming it is in the format 'MMM YYYY' in the source (e.g. Sep 2016):
date#(Month, 'MMM YYYY') as "Service Month"
So, it will look the same way, but it can be used for sorting.