Получение листовых узлов в запросе MDX - PullRequest
0 голосов
/ 02 марта 2010

Я пытаюсь создать запрос MDX для куба TFS, который получает исторические значения поля Оценка. Для каждой задачи я хочу получить последнюю оценку для каждого человека, который установил поле Оценка. Например, если Боб, руководитель проекта, устанавливает оценку на 24 часа, а затем Дейв, разработчик, устанавливает ее на 32 часа, я хочу создать запрос, который показывает отклонение каждой из их оценок от реального отработанного времени [Работа завершена].

Проблема, с которой я сталкиваюсь, заключается в том, что исторические значения рабочих элементов в TFS отслеживаются с помощью оборотов (ревизий), но TFS помещает как положительные, так и отрицательные значения в одну версию для рабочих элементов, которые изменяются. Что делает сумму похожей на 0 / пустую ячейку.

Например, Боб устанавливает оценку 24 в версии 2. Затем Дейв устанавливает 32 в версии 3. TFS добавляет в хранилище данных еще одну строку с -24 для версии 2. Когда это свернуто, я не вижу оценка Боба.

Как выбрать только положительные значения? Я попытался использовать функцию фильтра, и это возвращает правильные члены, но значение ячейки по-прежнему равно нулю

with
member [Last Estimate] as [Measures].[Microsoft_VSTS_CMMI_Estimate]
SELECT  
    {nonempty([Changed By].[Person].[All].Children*[Last Estimate])} ON 0,
    {nonempty([Work Item].[System_Id].[System_Id]*Filter([Work Item].[System_Rev].[All].Children, [Measures].[Microsoft_VSTS_CMMI_Estimate] > 0))} ON 1

FROM [Work Item History]
WHERE [Team Project].[Team Project].&[29];

Вот результаты

Work     rev     Bob             Dave
Item         Last Estimate  Last Estimate
7446      2  (null)          (null)
7446      3  (null)          32.0

В каждом ряду должно быть значение для одного из двух людей.

Заранее спасибо!

1 Ответ

1 голос
/ 02 марта 2010

Функция фильтра фильтрует элементы измерения, но этого недостаточно, потому что элемент может содержать, например, 24 и -24. Попробуйте отфильтровать саму меру с помощью функции Iif:

with 
member [Last Estimate] as 
'
Iif([Measures].[Microsoft_VSTS_CMMI_Estimate] > 0, [Measures].[Microsoft_VSTS_CMMI_Estimate], 0)
'
SELECT   
    {nonempty([Changed By].[Person].[All].Children*[Last Estimate])} ON 0, 
    {nonempty([Work Item].[System_Id].[System_Id]*Filter([Work Item].[System_Rev].[All].Children, [Measures].[Microsoft_VSTS_CMMI_Estimate] > 0))} ON 1 

FROM [Work Item History] 
WHERE [Team Project].[Team Project].&[29]; 
...