2010-01-12 1 views
0

У меня есть куб «Действия». Размеры - это «время» и «идентификатор действия», а измерения - это «количество действий» и «общее время» и расчетное «среднее время действия». Я пытаюсь рассчитать верхние 5 действий по времени avg и показать изменение с предыдущего дня. я могу сделать это в двух отдельных запросов:MDX: Вычисление времени действия avg и изменение с течением времени, для 5 лучших действий

SELECT {[Measures].[Avg Action Time]} ON COLUMNS, 
NON EMPTY TopCount(except([Action ID].members, {[Action ID].[All Action IDs]}), 5, [Measures].[Avg Action Time]) ON ROWS 
FROM Actions 
WHERE [Time].[2005].[1]; 

и:

WITH MEMBER [Measures].[Change] AS 
([Time].CurrentMember, [Measures].[Number of Actions])/(ParallelPeriod ([Day], 1, [Time].CurrentMember), [Measures].[Number of Actions]), 
FORMAT_STRING = 'Percent' 
SELECT [Measures].[Change] on COLUMNS, 
NON EMPTY [Time].[2005].[1].children on ROWS 
FROM [Actions]; 

Но я не могу понять, как объединить их в один MDX Query. Я пробовал:

WITH MEMBER [Measures].[Change] AS 
([Time].CurrentMember, [Action ID].CurrentMember, [Measures].[Avg Action Time])/(ParallelPeriod ([Day], 1, [Time].CurrentMember), [Action ID].CurrentMember, [Measures].[Avg Action Time]), 
FORMAT_STRING = 'Percent' 
SELECT {[Measures].[Avg Action Time], [Measures].[Change]} ON COLUMNS, 
NON EMPTY TopCount(except([Action ID].members, {[Action ID].[All Action IDs]}), 5, [Measures].[Avg Action Time]) ON ROWS 
FROM Actions 
WHERE [Time].[2005].[1]; 

но процент изменения всегда бесконечности, так что явно не вычисляя правильно. Каков правильный запрос?

ответ

0

Проблема в том, что у меня не было достаточного количества данных в таблице фактов. Этот запрос работает для меня в другом диапазоне времени.

WITH MEMBER [Measures].[Change] AS 
([Time].CurrentMember, [Measures].[Number of Actions])/(ParallelPeriod ([Day], 1, [Time].CurrentMember), [Measures].[Number of Actions]), 
FORMAT_STRING = 'Percent' 
SELECT {[Measures].[Avg Action Time], [Measures].[Change]} ON COLUMNS, 
NON EMPTY TopCount(except([Action ID].members, {[Action ID].[All Action IDs]}), 5, [Measures].[Avg Action Time]) ON ROWS 
FROM Actions 
WHERE [Time].[2005].[1].[2];