Как рассчитать последний день предыдущей недели и последний день текущей недели в кубе ssas?
Мне требуется вычислить последний день предыдущей недели и последний день текущей недели в многомерном кубе. Мне нужно иметь в расчете куб
Например: у меня есть измерение времени с иерархиями, как показано ниже
Year-Quarter-month-date
Year-Quarter-month
Year-Quarter-week
Year-Week.
У меня есть измерение Time Week, которое имеет иерархию Time-week и мое представление View data ниже
Week-2018-W18
WeekNumberOfYear-2018-W18
Year-18
YearNo-2018
StartDate-2018-04-30 00:00:00.000
EndDate-2018-05-06 23:59:59.997
CurrentWeek-1
Текущая неделя установлена, флаг установлен. Согласно приведенным выше данным.
Если я запускаю отчет сегодня (03/05/2018)- четверг.
предыдущая неделя последний рабочий день должен показать- 2018-04-27- пятница
Текущая неделя последнего дня должна быть-2018-05-04-пятница.
Пожалуйста, дайте мне знать, как рассчитать даты с помощью вычисления куба, я могу найти предыдущий год с функцией параллельного периода.
3 ответа
Сначала создайте функцию в БД и попробуйте это.
CREATE Function Lynk_Current_WeekStartDate
(
@processDate datetime
)
Returns DateTime
As
Begin
Declare @FromDate DateTime
Set @FromDate=dateadd(d,0,dateadd("ww",datediff(wk,'01/01/1900',DATEADD(dd,-1,@processDate)),'01/01/1900')) --Monday
Return(@FromDate)
End
CREATE Function Lynk_Current_WeekEndDate
(
@Processdate datetime
)
Returns DateTime
As
Begin
Declare @FromDate DateTime
Declare @ToDate DateTime
Set @FromDate=dbo.Lynk_Current_WeekStartDate(@Processdate)
Set @Todate=dateadd(ss,-1,dateadd(d,5,@FromDate))
Return(@ToDate)
End
Пример:
select dbo.Lynk_Current_WeekStartDate('2018-05-03')
select dbo.Lynk_Current_WeekEndDate('2018-05-03')
Используйте это для получения даты предыдущей недели.
Declare @CurWkFromDate DateTime,
@CurWkTodate DateTime,
@PrvWkFromdate DateTime,
@PrvWkTodate DateTime,
@Ondate DateTime = '2018-05-03'
select @CurWkFromDate = dbo.Lynk_Current_WeekStartDate(@Ondate),
@CurWkTodate = dbo.Lynk_Current_WeekEndDate(@Ondate),
@PrvWkFromdate = dbo.Lynk_Current_WeekStartDate(Dateadd(dd,-1,@CurWkFromDate)),
@PrvWkTodate = dbo.Lynk_Current_WeekEndDate(@PrvWkFromdate)
select @CurWkFromDate,@CurWkTodate,@PrvWkFromdate,@PrvWkTodate
Это будет работать Вам нужно просто упомянуть имя последнего дня.
Declare @Pre_last_Dayname datetime, @cur_last_Dayname datetime, @date datetime, @found datetime, @dayname varchar(14)
set @date = GETDATE()
set @dayname = 'Friday'
WHILE @Pre_last_Dayname is null
BEGIN
set @date = @date - 1
select @Pre_last_Dayname = @date
where DATENAME(dw,@date) = @dayname
END ;
set @date = GETDATE()
WHILE @cur_last_Dayname is null
BEGIN
select @cur_last_Dayname = @date
where DATENAME(dw,@date) = @dayname
set @date = @date + 1
END
select concat(format(@Pre_last_Dayname ,'dd/MM/yyyy'),'-',DATENAME(dw,@Pre_last_Dayname) )'last_day of_last_week'
, concat(format(@cur_last_Dayname ,'dd/MM/yyyy'),'-',DATENAME(dw,@cur_last_Dayname) )'last_day of_current_week'
, concat(format(GETDATE() ,'dd/MM/yyyy'),'-',DATENAME(dw,GETDATE()) )'current_date'