Ваш MDX
выглядит довольно круто.Оптимизация MDX
- это немного чёрная магия - вам нужно просто попробовать альтернативы.
Изначально я бы попробовал:
1.Поддержка strToSet
вместо двух strToMember
функции.
2. Вам нужно условие [Time].[Year].CURRENTMEMBER IS [Time].[Year].&[2019]
?Причина, по которой я спрашиваю, заключается в том, что [Range]
, по-видимому, уже 2019, и вы перекрестно присоединяетесь к этому набору, так что вам нужно беспокоиться о 2019?
3.Вы можете использовать простой кортеж вместо совокупности SUM
4.Может быть, во время тестирования, возможно, стоит удалить format_strings - это не должно иметь значения, но если это так, вы можете добавить обратно.
Я не проверял следующее, поэтому, пожалуйста, извините за опечатки:
WITH
SET [DateSet] AS
strtoSet
(
"[Time].[Week].&["
+ Format(DateAdd('d', - DatePart('w', Now(), 2), Now()+7), "yyyy-MM-ddT00:00:00")
+ "]:[Time].[Week].&["
+ Format(DateAdd('d', - DatePart('w', Now(), 2), Now()+14), "yyyy-MM-ddT00:00:00")
+"]"
)
MEMBER [Measures].[SalesNew] AS
(
[Time].[Day].CURRENTMEMBER.LEAD(7)
,[Measures].[Sales Prev]
)
MEMBER [Measures].[Order UnitsNew] AS
(
[Time].[Day].CURRENTMEMBER.LEAD(7)
,[Measures].[Order Units Prev]
)
MEMBER [Measures].[Count of OrdersNew] AS
(
[Time].[Day].CURRENTMEMBER.LEAD(7)
,[Measures].[Count of Orders Prev]
)
SELECT
{
[Measures].[Sales]
,[Measures].[Sales Prev]
,[Measures].[SalesNew]
,[Measures].[Order Units]
,[Measures].[Order Units Prev]
,[Measures].[Order UnitsNew]
,[Measures].[Count of Orders]
,[Measures].[Count of Orders Prev]
,[Measures].[Count of OrdersNew]
} ON COLUMNS ,
[DateSet] *
[Time].[Day].[Day].ALLMEMBERS *
[Time].[Hour].ALLMEMBERS *
[Product].[Merch Dept].ALLMEMBERS *
[Product].[Class].ALLMEMBERS ON ROWS
FROM [Cube];