2017-02-08 5 views
0

У меня есть дневной уровень в моем измерении времени.MDX: сумма времени с диапазоном в строках

Я хочу, чтобы вывести сумму/срд для выбранного диапазона дней, как в следующем заявлении:

WITH 
    MEMBER measures.[sum1] AS 
    Sum([Measures].[Menge_Artikel_Stk]) 
    MEMBER measures.[sum2] AS 
    Sum 
    (
     [D_Datum].[Datum].[Tag] 
    ,[Measures].[Menge_Artikel_Stk] 
    ) 
SELECT 
    { 
    [Measures].[stock] 
    ,[Measures].[sum1] 
    ,[Measures].[sum2] 
    } ON 0 
,NON EMPTY 
    CrossJoin 
    (
     {[D_item].[itemno].[itemno].MEMBERS} 
    ,{ 
     [D_Date].[Date].[day].[30.01.2017] : [D_Date].[Date].[Day].[05.02.2017] 
     } 
    ) ON 1 
FROM [Cube]; 

Моя цель состоит в том, чтобы показать сумму/срд вдоль финикового измерения фильтруется по строкам. enter image description here

Вместо 40/1653 я хочу, чтобы сумма отображала 250 баллов или 35,7 для среднего. (1653, очевидно, является суммой всего дневного уровня). Я хочу добавить этот вычисляемый элемент в Excel-лист. Таким образом, временной диапазон является переменным.

ответ

0

получить сумму/Avg строки через определенный диапазон вы можете сделать что-то вроде этого:

WITH 
    MEMBER measures.[sum1] AS 
    Sum([Measures].[Menge_Artikel_Stk]) 
    MEMBER measures.[sum2] AS 
    Sum 
    (
     [D_Datum].[Datum].[Tag] 
    ,[Measures].[Menge_Artikel_Stk] 
    ) 
    MEMBER [D_Date].[Date].[All].[DaySum] AS 
    Sum 
    (
     [D_Date].[Date].[day].[30.01.2017] : [D_Date].[Date].[Day].[05.02.2017] 
    ) 
    MEMBER [D_Date].[Date].[All].[DayAvg] AS 
    Avg 
    (
     [D_Date].[Date].[day].[30.01.2017] : [D_Date].[Date].[Day].[05.02.2017] 
    ) 
SELECT 
    { 
    [Measures].[stock] 
    ,[Measures].[sum1] 
    ,[Measures].[sum2] 
    } ON 0 
,NON EMPTY 
    CrossJoin 
    (
     {[D_item].[itemno].[itemno].MEMBERS} 
    ,{ 
     { 
      [D_Date].[Date].[day].[30.01.2017] : [D_Date].[Date].[Day].[05.02.2017] 
     } 
     ,[D_Date].[Date].[All].[DaySum] 
     ,[D_Date].[Date].[All].[DayAvg] 
     } 
    ) ON 1 
FROM [Cube]; 
+0

Спасибо за сообщение. Я думаю, что это не сработает, поскольку интервал будет исправлен и, таким образом, изменив Excel-фильтр, который не будет передан на результат? – rasenkantenstein

+0

@rasenkantenstein Правильно - чтобы сделать эту динамику, я не уверен. Хотя обходным путем было бы добавить специальные меры для RollingSum и RollingAvg, а не подход, который вы сейчас используете. – whytheq

0

Вы можете использовать функцию оси для определения текущего набора на вашей оси:

WITH 
MEMBER measures.[sum] AS 
Sum(
    Axis(1), 
    [Measures].[Menge_Artikel_Stk] 
) 
MEMBER measures.[avg] AS 
AVG(
    Axis(1), 
    [Measures].[Menge_Artikel_Stk] 
) 

SELECT 
    {[Measures].[Menge_Artikel_Stk],[Measures].[sum],[Measures].[avg]} ON 0, 
    NON EMPTY {[D_Date].[Date].[day].[30.01.2017]:[D_Date].[Date].[Day].[05.02.2017]} ON 1 
FROM [Cube]; 
Смежные вопросы