Вот пример нахождения сегодня в кубе AdvWrks вместе с 30 предыдущих дней:
WITH
MEMBER [Measures].[Key for Today] AS
Format
(
Now()
,'yyyyMMdd'
)
MEMBER [Measures].[Key for Today (AW)] AS
'2007' + Right([Measures].[Key for Today],4)
MEMBER [Measures].[Today string] AS
'[Date].[Calendar].[Date].&[' + [Measures].[Key for Today (AW)] + ']'
SET [Today] AS
StrToMember
(
[Measures].[Today string]
,constrained
)
SET [Last30Days] AS
[Today].Item(0).Item(0).Lag(30) : [Today].Item(0).Item(0)
SELECT
{} ON 0
,[Last30Days] ON 1
FROM [Adventure Works];
Результаты в этом:

Так что, если мы хотим изменить выше так что мы получаем только объем продаж в Интернете за последние 30 дней:
WITH
MEMBER [Measures].[Key for Today] AS
Format
(
Now()
,'yyyyMMdd'
)
MEMBER [Measures].[Key for Today (AW)] AS
'2007' + Right([Measures].[Key for Today],4)
MEMBER [Measures].[Today string] AS
'[Date].[Calendar].[Date].&[' + [Measures].[Key for Today (AW)] + ']'
SET [Today] AS
StrToMember
(
[Measures].[Today string]
,constrained
)
SET [Last30Days] AS
[Today].Item(0).Item(0).Lag(30) : [Today].Item(0).Item(0)
MEMBER [Date].[Calendar].[All].[Last30Days] AS
Aggregate([Last30Days])
SELECT
{[Measures].[Internet Sales Amount]} ON 0
FROM [Adventure Works]
WHERE [Date].[Calendar].[All].[Last30Days];
. Применительно к вашему сценарию вышесказанное выглядело примерно так:
WITH
MEMBER [Measures].[Key for Today] AS
Format
(
Now()
,'yyyyMMdd'
)
MEMBER [Measures].[Today string] AS
'[Created_Date.Created_Hir].[Created_On].&[' + [Measures].[Key for Today] + ']'
SET [Today] AS
StrToMember
(
[Measures].[Today string]
,constrained
)
SET [~FILTER] AS
[Today].Item(0).Item(0).Lag(30) : [Today].Item(0).Item(0)
MEMBER [Created_Date.Created_Hir].[All].[~FILTERaggregated] AS
//MEMBER [Created_Date.Created_Hir].[Created_On].[All].[~FILTERaggregated] AS //<<if above is throwing an exception then try this instead
Aggregate([~FILTER])
SET [~ROWS] AS
{
[Sales Order Attributes SO.Sales_order].[Sales Order ID].MEMBERS
}
SELECT
NON EMPTY
{[Measures].[CONT_AMT_GROSS]} ON COLUMNS
,NON EMPTY
[~ROWS] ON ROWS
FROM [SALES_ORDER]
WHERE
[Created_Date.Created_Hir].[All].[~FILTERaggregated];
Расскажите еще, как даты хранятся в вашей таблице дат. Является ли он предварительно заполнен некоторыми диапазонами или есть ли даты только для дней транзакции? Дата сегодняшней даты? – SouravA
Hi Sourav, Я добавил дату в формате yyyyMMdd. это предварительно заполненный стол. Для примера WITH SET [~ FILTER] AS {[Created_Date.Created_Hir]. [Created_On]. [20140220]} SET [~ ROWS] AS {[Атрибуты заказа клиента SO.Sales_order]. [Идентификатор заказа клиента] .Members} ВЫБРАТЬ непустой {[Measures]. [CONT_AMT_GROSS]} на колонны, непустой [~] ROWS РЯДОВ нА FROM [sales_order] WHERE [~ FILTER] с этим запросом я в состоянии принести запись с транзакцией, произошедшей в 2014-02-20, поэтому, используя указанный выше запрос, я хотел получить все записи между ними() - 30 дней. Спасибо, – malay
@malay сделал или sourav или я отвечу на ваш вопрос? – whytheq