MDX - Нет продаж более 30 дней - PullRequest
1 голос
/ 28 июля 2011

Я бы хотел получить продукт с нулевыми продажами в течение 30 дней.Например, ниже ожидаемый результат: Магазин, Продукт, Магазин дней1, Продукт1, 33 Магазин1, Продукт2, 100 Магазин2, Продукт5, 96 Магазин34, Продукт14, 78 Магазин100, Продукт9, 47

Итак, я написал ниже запрос1003 *

WITH 
MEMBER [Measures].[Zero Sales Days] 
AS 
COUNT(
     FILTER(
            NONEMPTY( [Calendar].[Date].[Day],[Measures].[POS Qty])                   
             , ( [Measures].[POS Qty]=0)
            ) 
 )

SELECT 
([Store].[Store].[Store],[product].[product].[product]) on 1,
([MEASURES].[Zero Sales Days]) ON 0
FROM [testcube]

Проблема заключается в следующем: Как отфильтровать дело: дни нулевых продаж <30 </p>

Спасибо, Nia


Я внес некоторые изменения и затем столкнулсямоя БД.Я ничего не получил, если бы добавил причину.Если нет, результатом будет «#Error».

Мне не нужно выбирать измерение, связанное со временем.Что я хочу сделать для отчета: выберите измерение магазина и продукта и определите рассчитанную меру, чтобы получить счет.Боян, я буду очень признателен, если вам понадобится подробный запрос.

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Функция LastPeriods - это то, что вы ищете:

 WITH 
  MEMBER [Measures].[Zero Sales Days] 
  AS COUNT(
        FILTER([Calendar].[Date].[Day], 
          SUM( LastPeriods(30, [Calendar].[Date].currentmember),[Measures].[POS Qty]) 
          = 0 )
        ) 
 SELECT 
  ([Store].[Store].[Store],[product].[product].[product]) on 1,
  ([MEASURES].[Zero Sales Days]) ON 0
 FROM [testcube]
1 голос
/ 29 июля 2011

Следующий запрос работает с Adventure Works и показывает вам продукты без продаж в течение более 30 дней с даты, указанной в предложении WHERE:

WITH
MEMBER [Measures].[Number of Periods With No Sales] AS
    Iif(([Date].[Date].CurrentMember, [Measures].[Internet Sales Amount])=0,
        ([Date].[Date].PrevMember, [Measures].[Number of Periods With No Sales])+1,
        NULL
    )
MEMBER [Measures].[Number of > 30 Periods With No Sales] AS
    Sum(
        Iif([Measures].[Number of Periods With No Sales] > 30,
            [Measures].[Number of Periods With No Sales],
            NULL
        )
    )
SELECT
{
    [Measures].[Number of > 30 Periods With No Sales]
} ON 0,
NON EMPTY {
    [Product].[Product Categories].[Product]
} ON 1
FROM [Adventure Works]
WHERE [Date].[Calendar].[Date].&[860]

Вам нужно будет переработать его (изменитьимена измерений / мер), чтобы заставить его работать против вашей базы данных.Пожалуйста, дайте мне знать, если вам нужен запрос, который может дать вам все продукты независимо от даты, у которых есть по крайней мере один период с более чем 30 днями без продаж (например, максимальный период без продаж или произвольный такой период).Это потребует нескольких изменений.Кроме того, поскольку в запросе используется рекурсия, он может быть медленным - если он слишком медленный, мы можем увидеть, как повысить его производительность - что может потребовать изменений в вашей модели данных для поддержки этой части аналитики.

...