2015-11-26 4 views
1

Я пытаюсь создать расчетный элемент, который должен возвращать средние заказы в неделю на человека.Расчет ордеров в день с использованием MDX

Ниже представлен снимок экрана, где клиент будет искать прогнозируемую рабочую нагрузку. Персонал может работать не каждый день в неделю.

Расчет будет следующим: количество заказов или количество запланированных дней на этой неделе.

Невозможно вычислить это, если имя недели находится в той же иерархии даты, но в этом случае оно не находится в иерархии, а просто является членом измерения.

enter image description here

Required Output

Это MDX Я пробовал:

Avg (Descendants 
([Date Planned].[Date Planned].CurrentMember, [Date Planned].[Date Planned].[Date Planned]), 
[Measures].[Orders Qty]) 
+0

Share скрипт вы пробовали до сих пор для того, чтобы помочь вам. –

+0

Я знаю, что это неправильно, потому что в строках нет даты. Avg (Потомки ([Запланировано по дате]. [Дата запланирована] .CurrentMember, [Date Planned]. [Date Planned]. [Date Planned]), [Measures]. [Orders Qty]) – Murty

+0

Вам нужна средняя неделя? Если так, отредактируйте заголовок своего вопроса. Почему вы не использовали атрибут 'week'? –

ответ

0

Было бы намного проще, если у вас есть неделя и день добавляется в иерархию, но если вы не У меня есть возможность добавить это, есть другое не элегантное решение.

Если бы предположить, что этот элемент будет использоваться всегда с недели на строки ваш расчет член будет следующим: enter image description here

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

+0

Спасибо за ваш ответ.Это может не работать для меня в этом случае, поскольку никакие дни не фиксируются. Это может быть любая вещь от 1 до 7 на основе личности. Однако, если я рассмотрю ваше предложение добавить его в иерархию, если я не найду никакого решения. Еще раз спасибо за ваше предложение – Murty

+0

Когда у вас будет неделя и день, добавленные в иерархию, я могу помочь вам закончить это - конечно, если вам понадобится моя помощь. – wbargiel

0

Попробуйте использовать это:

WITH MEMBER [Measures].[avg_week] AS 
    Avg (EXISTING { [Date Planned].[Week Of Year].[Week Of Year] }, 
    [Measures].[Orders Qty]) 
SELECT [Measures].[avg_week] ON COLUMNS, 
NON EMPTY 
{ [Person].[PersonName].[PersonName] * [Date Planned].[Week Of Year].[Week Of Year] } ON ROWS 
FROM [Your cube] 

Позвольте мне знать, если это может помочь вам.

0

Может быть что-то вроде следующего:

WITH 
    MEMBER [Measures].[PlannedDayCnt] AS 
    Count 
    (
     Exists 
     (
     (EXISTING 
      [Date Planned].[Date Planned].[Date Planned].MEMBERS) 
     ,[Date Planned].[Week Of Year].currentmember 
    ) 
    ) 
    MEMBER [Measures].[Averge Orders] AS 
    [Measures].[Orders Qty]/[Measures].[PlannedDayCnt] 
SELECT 
    { 
    [Measures].[Orders Qty] 
    ,[Measures].[PlannedDayCnt] 
    ,[Measures].[Averge Orders] 
    } ON 0 
, 
    [Person].[PersonName].[PersonName] 
    * [Date Planned].[Week Of Year].[Week Of Year] ON 1 
FROM [aCube]; 

Я хотел бы проверить, но не знаете, как моделировать сценарий в AdvWrks куб.

0

Сначала я хотел бы посмотреть, сколько «дат» относится к неделе. Это было бы легко, как и в те дни, когда на эту неделю были отправлены ордера на этого человека.

NonEmpty 
     (
     [Date Planned].[Date Planned].[Date Planned].MEMBERS, 
     (
      [Date Planned].[Week Of Year].currentmember, 
      [Person].[PersonName].currentmember, 
      [Measures].[Orders Qty] 
     ) 
     ) 

Теперь, когда у вас есть необходимые даты для «текущей» недели и «текущего» человека, вам нужно будет рассчитать величину среднего заказа для этого набора дат. Это будет выглядеть следующим образом:

AVG 
    (
    NonEmpty 
      (
      [Date Planned].[Date Planned].[Date Planned].MEMBERS, 
      (
       [Date Planned].[Week Of Year].currentmember, 
       [Person].[PersonName].currentmember, 
       [Measures].[Orders Qty] 
      ) 
      ) 
    , [Measures].[Orders Qty] 
    ) 

Ваша конечная конструкция будет нужно быть:

WITH MEMBER Measures.AverageOrderPerDay AS 
AVG 
    (
    NonEmpty 
      (
      [Date Planned].[Date Planned].[Date Planned].MEMBERS, 
      (
       [Date Planned].[Week Of Year].currentmember, 
       [Person].[PersonName].currentmember, 
       [Measures].[Orders Qty] 
      ) 
      ) 
    , [Measures].[Orders Qty] 
    ) 

SELECT 
    { 
    [Measures].AverageOrderPerDay, 
    [Measures].[Orders Qty] 
    } 
ON 0, 
    [Person].[PersonName].[PersonName].MEMBERS 
    * [Date Planned].[Week Of Year].[Week Of Year].MEMBERS ON 1 
FROM [YourCube]