sql server – SQL 2019 – Sort operation taking most of the query cost

Please see below query and execution plan – Any advice on how to get rid of SORT operator cost (nothing coming on missing indexes recommendation)

SELECT  *
FROM    (
select top 5    convert(varchar,DayKeyId) + '|' + convert(varchar,DimCampaignId) + '|' + convert(varchar,DimLeadProviderId) + '|' + convert(varchar,fcd.DimCorpId) + '|' + convert(varchar,CASE when DimLocationId in ('149','3','147') then 39 when DimLocationId in ('148','146') then 38
              else DimVendorId end) + '|' + convert(varchar,DimLocationId) + '|' + convert(varchar,DimEmployeeId) + '|' + convert(varchar,DimRateTypeId) as LinkKey
        ,DayKeyId
        ,DimCampaignId
        ,DimLeadProviderId
        ,fcd.DimCorpId
        ,DimDispositionId
        ,CASE when DimLocationId in ('149','3','147') then 39

              when DimLocationId in ('148','146') then 38
              else DimVendorId end as DimVendorId
        ,DimLocationId
        ,DimEmployeeId
        ,DimRateTypeId
        ,sum(isnull(RecordCounter,0)) as RecordCounter
        ,sum(isnull(SalesCounter,0)) as SalesCounter
        ,sum(isnull(DialCounter,0)) as DialCounter
        ,sum(isnull(ContactCounter,0)) as ContactCounter
        ,sum(isnull(RefusalCounter,0)) as RefusalCounter
        ,sum(isnull(products_sold,0)) as products_sold
        ,sum(isnull(rgu_hsd,0)) as rgu_hsd
        ,sum(isnull(rgu_phone,0)) as rgu_phone
        ,sum(isnull(rgu_video,0)) as rgu_video
        ,sum(isnull(rgu_xh,0)) as rgu_xh
        ,sum(isnull(PremiumChannel,0)) as PremiumChannel
        ,sum(isnull(video_equipment,0)) as video_equipment
        ,sum(isnull(x_mobile,0)) as x_mobile
        ,sum(isnull(x_mobile_equipment,0)) as x_mobile_equipment
        ,sum(isnull(x_mobile_accessory,0)) as x_mobile_accessory
        ,sum(isnull(x_mobile_service,0)) as x_mobile_service
        ,sum(isnull(total_duration,0)) as total_duration
        ,sum(isnull(TalkTime,0)) as TalkTime
        ,sum(isnull(WrapTime,0)) as WrapTime
        ,sum(isnull(OtherTime,0)) as OtherTime
        ,sum(isnull(costs,0)) as costs
        ,sum(isnull(sph_num,0)) as sph_num
        ,sum(isnull(sph_dem,0)) as sph_dem
        ,sum(isnull(cph_num,0)) as cph_num
        ,sum(isnull(cph_dem,0)) as cph_dem
        ,sum(isnull(rgu_total,0)) as rgu_total
        ,sum(isnull(take_rate_num,0)) as take_rate_num
        ,sum(isnull(take_rate_dem,0)) as take_rate_dem
        ,sum(isnull(rgu_take_rate_dem,0)) as  rgu_take_rate_num
        ,sum(isnull(rgu_take_rate_num,0)) as rgu_take_rate_dem
        ,sum(isnull(rgu_xinfinity,0)) as rgu_xinfinity
        ,sum(case when DimDispositionId = 1 and (isnull(SalesCounter,0) > 0)
                  then isnull(RecordCounter,0) else 0 end) as HomesSold
        ,sum(case when DimDispositionId = 2 and (isnull(SalesCounter,0) > 0)
                  then isnull(RecordCounter,0) else 0 end) as HomesSaved
        ,sum(case when DimDispositionId = 3 and (isnull(SalesCounter,0) > 0)
                  then isnull(RecordCounter,0) else 0 end) as CustomerCare
        ,sum(case when DimDispositionId in (1,2,3) and (isnull(SalesCounter,0) > 0)
                  then isnull(RecordCounter,0) else 0 end) as HomesSoldSaved
        ,sum(case when DimDispositionId = 1 and ((isnull(rgu_video,0)+isnull(rgu_hsd,0)+isnull(rgu_phone,0)+isnull(rgu_xh,0)+isnull(rgu_xinfinity,0)) > 0)
                  then isnull(RecordCounter,0) else 0 end) as HomesSoldRGU
        ,sum(case when DimDispositionId = 2 and ((isnull(rgu_video,0)+isnull(rgu_hsd,0)+isnull(rgu_phone,0)+isnull(rgu_xh,0)+isnull(rgu_xinfinity,0)) > 0)
                  then isnull(RecordCounter,0) else 0 end) as HomesSavedRGU
        ,sum(case when DimDispositionId = 1 and (isnull(SalesCounter,0) > 0)
                  then isnull(rgu_total,0) else 0 end) as RGUSold
        ,sum(case when DimDispositionId = 2 and (isnull(SalesCounter,0) > 0)
                  then isnull(rgu_total,0) else 0 end) as RGUSaved
        ,sum(case when DimDispositionId not in (63,64,66,70,72,73,74,75,78,114,115,116,117) and isnull(ContactCounter,0) > 0
                  then isnull(RecordCounter,0) else 0 end) as EligibleContactCounter
        ,sum(case when DimDispositionId in (1,2) and (isnull(SMSConsent,0) > 0)
                  then isnull(SMSConsent,0) else 0 end) as SMSConsent
        ,sum(case when DimDispositionId in (1,2) and (isnull(AutoIvrConsent,0) > 0)
                  then isnull(AutoIvrConsent,0) else 0 end) as AutoIvrConsent
        ,sum(case when DimDispositionId in (1,2) and (isnull(IVRXMOnlyConsent,0) > 0)
              then isnull(IVRXMOnlyConsent,0) else 0 end )as IVRXMOnlyConsent
        ,sum(case when DimDispositionId in (1,2) and (isnull(EmailConsent,0) > 0)
                  then isnull(EmailConsent,0) else 0 end) as EmailConsent
        ,sum(case when DimDispositionId in (1,2) and (isnull(ManualConsent,0) > 0)
                  then isnull(ManualConsent,0) else 0 end) as ManualConsent
        ,sum(case when DimDispositionId in (1,2) and (isnull(OverrideConsent,0) > 0)
                  then isnull(OverrideConsent,0) else 0 end) as OverrideConsent
        ,sum(case when DimDispositionId in (1,2) and (isnull(NAConsent,0) > 0)
                  then isnull(NAConsent,0) else 0 end) as NAConsent
        ,sum(isnull(PayPerPerformanceCosts,0)) as PayPerPerformanceCosts
        ,sum(isnull(TermQty,0)) as TermQty
        ,sum(isnull(rgusoldwosave,0)) as rgusoldwosave
        ,sum(isnull(rgusoldwsave,0)) as rgusoldwsave
        ,sum(isnull(videorgusoldwosave,0)) as videorgusoldwosave
        ,sum(isnull(videorgusoldwsave,0)) as videorgusoldwsave
        ,sum(isnull(hsdrgusoldwosave,0)) as hsdrgusoldwosave
        ,sum(isnull(hsdrgusoldwsave,0)) as hsdrgusoldwsave
        ,sum(isnull(phonergusoldwosave,0)) as phonergusoldwosave
        ,sum(isnull(phonergusoldwsave,0)) as phonergusoldwsave
        ,sum(isnull(xhrgusoldwosave,0)) as xhrgusoldwosave
        ,sum(isnull(xhrgusoldwsave,0)) as xhrgusoldwsave
        ,sum(isnull(xmrgusoldwosave,0)) as xmrgusoldwosave
        ,sum(isnull(xmrgusoldwsave,0)) as xmrgusoldwsave
        ,sum(case when DimDispositionId not in (63,64,66,70,72,73,74,75,78,114,115,116,117) and isnull(ContactCounter,0) > 0
                  then 1 else 0 end) as dinacontactpct_num
        ,sum(isnull(DialCounter,0)) as dinacontactpct_dem
        ,sum(case when DimDispositionId = 2 and (isnull(SalesCounter,0) > 0)
                  then 1 else 0 end) as dinasaved_take_rate_num
        ,sum(case when DimDispositionId not in (63,64,66,70,72,73,74,75,78,114,115,116,117) and isnull(ContactCounter,0) > 0
                  then 1 else 0 end) as dinasaved_take_rate_dem
        ,sum(isnull(SalesCounter,0)) as dinasold_take_rate_num
        ,sum(case when DimDispositionId not in (63,64,66,70,72,73,74,75,78,114,115,116,117) and isnull(ContactCounter,0) > 0
                  then 1 else 0 end) as dinasold_take_rate_dem
        ,sum(case when DimDispositionId in (1,2) and (isnull(SalesCounter,0) > 0)
                  then 1 else 0 end) as dinatotal_take_rate_num
        ,sum(case when DimDispositionId not in (63,64,66,70,72,73,74,75,78,114,115,116,117) and isnull(ContactCounter,0) > 0
                  then 1 else 0 end) as dinatotal_take_rate_dem
        ,sum(isnull(NoIbContact,0)) as NoIbContact  
        ,sum(isnull(RevenueAmount,0)) as RevenueAmount
        ,fcd.LastUpdateDate
from    FactCallDetail (nolock) fcd
inner join DimCorp
 dc on fcd.DimCorpId = dc.DimCorpId
where 1=1
group by convert(varchar,DayKeyId) + '|' + convert(varchar,DimCampaignId) + '|' + convert(varchar,DimLeadProviderId) + '|' + convert(varchar,fcd.DimCorpId) + '|' + 
         convert(varchar,CASE when DimLocationId in ('149','3','147') then 39
                              when DimLocationId in ('148','146') then 38
                              else DimVendorId end) + '|' + 
         convert(varchar,DimLocationId) + '|' + convert(varchar,DimEmployeeId) + '|' + convert(varchar,DimRateTypeId)
        ,DayKeyId
        ,DimCampaignId
        ,DimLeadProviderId
        ,fcd.DimCorpId
        ,CASE when DimLocationId in ('149','3','147') then 39
              when DimLocationId in ('148','146') then 38
              else DimVendorId end
        ,DimLocationId
        ,DimEmployeeId
        ,DimRateTypeId
        ,DimDispositionId
        ,fcd.LastUpdateDate

) AS ZZ
Where   DayKeyId in (
            Select  DayKeyId
            From    vw_dim_calendar
            Where   CurrentFiscalYear = 'Fiscal YTD'
            )
GO

Execution Plan