• Just following a common practice in dimensional modelling, I would start with defining a unique index on your surrogate keys of the fact table.

    (they should be unique, if not your design is incorrect)

    And put all the date attributes in the date dimension.

    I see way too many date and varchar columns in your fact table. A fact table should only have numeric data (foreign keys which are integers and your measures).

    Normally you shouldn't filter on your fact table at all, you should filter on dimensions only.

    If you have SQL Server Enterprise, the database engine will detect it's a star join query and it can apply very efficient optimizations.

    Need an answer? No, you need a question
    My blog at https://sqlkover.com.
    MCSE Business Intelligence - Microsoft Data Platform MVP