Включите результаты выходных в пятницу и выходные дни за день до - PullRequest
0 голосов
/ 06 июля 2019

У меня есть отчет, который показывает данные за предыдущие две недели. Я хотел бы, чтобы любое мероприятие, которое происходит в выходные дни, было включено в пятницу, а любое мероприятие в праздничный день было включено в деловой день до этого.

Этот запрос является источником для файла Power BI, поэтому я могу применить фильтр в BI, чтобы исключить праздничные и выходные дни, и это здорово. Тем не менее, я хотел бы, чтобы любое действие, происходящее в эти дни, было включено в другие дни.

Вот код, который у меня есть. Поля IsHoliday и IsWeekday - это двоичные поля размером 0,1, которые позволяют фильтровать результаты в Power BI:

DECLARE @currenttime as DATE, @currentmonthyear as varchar (50)

SET @currenttime = getutcdate() at time zone 'UTC' at time zone 'Central 
Standard Time'
SET @currentmonthyear = 
CONVERT(char(3),@currenttime,0)+''+DATENAME(YEAR,@currenttime)



SELECT

---Dates

CONVERT(CHAR(3),l.originearliest,0)+'-'+DATENAME(YEAR,l.originearliest) 
as PresentationMonth
,cal.Date as CalDate
,concat(month(cal.date),'-',day(cal.date),'-',year(cal.date)) as Date

,cal.IsHoliday
,cal.IsWeekday


---BizDays

,mv.BizDays
,bz.BizDaysMTD


---Metrics 

,r.office
,c.Name as Customer_Name
,l.customercode as Customer_Code

,CASE
    WHEN lx.BookedLoadCustomerRep is NULL THEN r.KeypointUserCode
    ELSE BookedLoadCustomerRep
    END AS Customer_Rep

,l.Dispatcher as Carrier_Rep

---Revenue
    ,SUM(CUSTOMERRATE) as Revenue
    ,SUM(CUSTOMERRATE)/COUNT(l.LoadNumber) as RPL

---Cost
    ,SUM(CarrierCost) as Cost

---Spread
    ,(SUM(CUSTOMERRATE)-SUM(CarrierCost)) as Spread
    ,(SUM(CUSTOMERRATE)-SUM(CarrierCost))/COUNT(l.LoadNumber)as SPL


---Loads
    ,COUNT(l.LoadNumber) as Loads


FROM kpo.Load l 

left join ops.Customer c on c.customerid=l.customerid
left join rpt.reportuser r on r.userid=c.SalespersonUserId
left join kpo.LoadExtension lx on lx.LoadNumber=l.LoadNumber
left join rpt.MonthView mv on 
CONVERT(char(3),l.originearliest,0)+''+DATENAME(YEAR,l.originearliest)  = MonthYear
left join com.Calendar cal on convert(date,cal.Date) = convert(date,l.OriginEarliest)


INNER JOIN

(SELECT

MonthYear,
CASE WHEN
CONVERT(char(3),@currenttime,0)+''+DATENAME(YEAR,@currenttime) = MonthYear
THEN (BizDaysMTD)-1
ELSE BizDaysMTD
END as BizDaysMTD
from rpt.MonthView) bz on bz.MonthYear = mv.MonthYear


WHERE

CONVERT(DATE,l.OriginEarliest) <= 

(CASE 
 when DATENAME(WEEKDAY,@currenttime)='Saturday'
 THEN DATEADD(DY,-1,@currenttime)
 WHEN DATENAME(WEEKDAY,@currenttime)='Sunday'
 THEN DATEADD(DY,-2,@currenttime)
 WHEN DATENAME(WEEKDAY,@currenttime)='Monday'
 THEN DATEADD(DY,-3,@currenttime)
 ELSE DATEADD(DY,-1,@currenttime)
 END)

 AND
 YEAR(l.originearliest)>='2014'
 AND
 l.OrderStatus not in ('void','available')
 AND
 DATEDIFF(DAY,l.originearliest,@currenttime) between 1 and 14



GROUP BY 

r.office
,c.Name
,DATEPART(WEEK,l.originearliest)
,Month(l.originearliest)
,Year(l.originearliest)
,Year(l.originearliest)+'-'+Month(l.originearliest)
,mv.MonthYear
,BizDays
,bz.BizDaysMTD
,l.CustomerCode
,l.OriginEarliest
,lx.BookedLoadCustomerRep
,r.KeypointUserCode
,l.dispatcher
,cal.IsHoliday
,cal.IsWeekday
,cal.Date

ORDER BY

Year(l.originearliest) desc
,Month(l.originearliest) desc

Любая помощь будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...