Как рассчитать последний день предыдущей недели и последний день текущей недели в кубе ssas? - PullRequest
0 голосов
/ 03 мая 2018

Мне требуется рассчитать последний день предыдущей недели и последний день текущей недели в многомерном кубе. Мне нужно иметь в расчете куба

Например: у меня есть измерение времени с иерархиями, как показано ниже

Year-Quarter-month-date
Year-Quarter-month
Year-Quarter-week
Year-Week.

У меня есть измерение Time Week, которое имеет иерархию Time-week и мое представление View ниже данных

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 ]

0 голосов
/ 03 мая 2018

Это будет работать. Вам нужно просто упомянуть фамилию последнего дня.

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'
0 голосов
/ 03 мая 2018

Используйте это для получения даты предыдущей недели.

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
0 голосов
/ 03 мая 2018

Сначала создайте функцию в БД и попробуйте это.

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')
...