Вкратце, этот код не будет работать. Причина в том, что следующая строка кода ищет одного члена иерархии вы применили Currentmember
к:
[Date].CurrentMember
У вас есть более чем один элемент в наборе [Date].[2015].[2].[1]:[Date].[2015].[2].[9]
Вот небольшое доказательство выше:
Этот сценарий:
WITH
MEMBER [Measures].[x] AS
[Date].[Calendar].CurrentMember.Member_Key
SELECT
{[Product].[Category].[All Products]} ON 0
,{[Measures].[x]} ON 1
FROM [Adventure Works]
WHERE
{
[Date].[Calendar].[Date].&[20080322]
};
возвращает это:
В то время как этого сценария:
WITH
MEMBER [Measures].[x] AS
[Date].[Calendar].CurrentMember.Member_Caption
SELECT
{[Product].[Category].[All Products]} ON 0
,{[Measures].[x]} ON 1
FROM [Adventure Works]
WHERE
{
[Date].[Calendar].[Date].&[20080322]
:
[Date].[Calendar].[Date].&[20080323]
};
Возвращает это:
Сообщение об ошибке:
В AdvWrks
я просто написал следующее, который может помочь, если вы можете переместить целевой диапазон дат от пункта WHERE
к имени набора.
Как это работает:
1.Finds первый день в вашем имени установить через .Item(0).Item(0)
2.Finds последняя дата в имени установить через .Item([myStartDates].Count - 1).Item(0)
3.THE использует две даты поиска, чтобы создать диапазон, который параллелен
WITH
SET [myStartDates] AS
{
[Date].[Calendar].[Date].&[20080322]
:
[Date].[Calendar].[Date].&[20080323]
}
SET [parallelToFirst] AS
ParallelPeriod
(
[Date].[Calendar].[Calendar Year]
,1
,[myStartDates].Item(0).Item(0)
)
SET [parallelToLast] AS
ParallelPeriod
(
[Date].[Calendar].[Calendar Year]
,1
,[myStartDates].Item(
[myStartDates].Count - 1).Item(0)
)
SET [Rebuild] AS
[parallelToFirst].Item(0) : [parallelToLast].Item(0)
SELECT
{} ON COLUMNS
,[Rebuild] ON ROWS
FROM [Adventure Works];
достаточно легко просуммировать этот диапазон и вставьте его в измерении дата:
WITH
SET [myStartDates] AS
{
[Date].[Calendar].[Date].&[20080322]
:
[Date].[Calendar].[Date].&[20080323]
}
SET [parallelToFirst] AS
ParallelPeriod
(
[Date].[Calendar].[Calendar Year]
,1
,[myStartDates].Item(0).Item(0)
)
SET [parallelToLast] AS
ParallelPeriod
(
[Date].[Calendar].[Calendar Year]
,1
,[myStartDates].Item(
[myStartDates].Count - 1).Item(0)
)
SET [ParallelRange] AS
[parallelToFirst].Item(0) : [parallelToLast].Item(0)
MEMBER [Date].[Calendar].[parallelSum] AS
Sum([ParallelRange])
SELECT
{
[myStartDates]
,[ParallelRange]
,[Date].[Calendar].[parallelSum]
} ON 0
,{
[Measures].[Internet Sales Amount]
,[Measures].[Internet Order Quantity]
} ON 1
FROM [Adventure Works];
Вот результат (только доказать, что это делает то, что мы хотим):
Эй, хорошей попытки. Добавили еще один возможный подход. – SouravA
Спасибо за ваш ответ. Теперь я должен сделать это в соответствии с моим использованием: мой процесс должен генерировать такие запросы ... – jBravo
@jBravo Я не уверен, как работает Mondrian - есть ли способ введения параметров? В «SSRS» это возможно. В «Pyramid» (с которой я играю) это очень просто: поэтому я могу легко параметризовать первый набор '[myStartDates]' – whytheq