Общее количество членов, рассчитанное многомерными выражениями

Я использую вычисляемый член для «предыдущего периода» как:

Case
// Test for current coordinate being on (All) member.
When [<<Target Dimension>>].[<<Target Hierarchy>>].CurrentMember.Level Is
     [<<Target Dimension>>].[<<Target Hierarchy>>].[(All)]

Then "NA"

Else ( 
       ParallelPeriod
       (
          [<<Target Dimension>>].[<<Target Hierarchy>>].[<<Target Level>>],
          <<Number of Periods>>,
          [<<Target Dimension>>].[<<Target Hierarchy>>].CurrentMember
       ),
       [Measures].[<<Target Measure>>] 
     )
End

// This expression evaluates the difference between the value of the numeric
// expression in the previous period and that of the current period.

(фрагмент кода взят непосредственно из предложения Microsoft)

Он работает, как и ожидалось, но при представлении итогов я получаю итог за весь год, даже если в строках выбрано только несколько месяцев.

Итак, если я выберу, скажем, 2015 год, месяцы с января по июнь, я получу шесть правильных значений для месяцев 2014 года, но общую сумму за 2014 год вместо суммы шести представленных значений.

Любой способ получить «правильное» значение суммы? Под правильным я подразумеваю сумму выбранных строк.

Отредактировано для добавления фактического кода:

Case
When [Dim Time].[Calendar].CurrentMember.Level Is [Dim Time].[Calendar].[(All)]
Then "NA"
Else (ParallelPeriod([Dim Time].[Calendar].[Year],
      1,
      [Dim Time].[Calendar].CurrentMember),[Measures].[Sales])
End

My Dim Time.Calendar имеет уровни Год-Месяц-День. Достаточно легко :)

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

Отредактировано для добавления примера:

Year    Month   Day Sales previous year Sales
2015    04      03      74,154.56 €     135,156.41 €
    Total 04         2,617,045.75 €     135,156.41 €
Total 2015          37,696,665.69 €     135,156.41 €

person DeepButi    schedule 08.07.2015    source источник
comment
Привет, DeepButi. Кто-нибудь смог помочь тебе с любым из твоих предыдущих mdx вопросов? Например, этот: динамическая формула mdx для вычисляемого элемента"> stackoverflow.com/questions/31000705/   -  person whytheq    schedule 08.07.2015
comment
Тот, на который вы указываете, был решен, но только для Мондриана (как вы сказали). Некоторые другие вопросы я задавал непосредственно на других форумах, потому что они были специфичны для используемых инструментов (пакет Pentaho). Но это общий, я использую кубы MicroSoft Olap и динамические таблицы Excel. Я думал, что этот форум будет логичным местом, чтобы спросить. Может я ошибаюсь...   -  person DeepButi    schedule 08.07.2015
comment
Где происходит расчет - в скрипте куба, или в экселе? Какую версию Excel вы используете? (в версии 2013 есть пользовательские функции измерения mdx)   -  person whytheq    schedule 09.07.2015
comment
Excel 2013. Я предполагаю, что общая сумма рассчитывается на стороне клиента (Excel), но для базовых показателей это нормально, даже для вычисляемых элементов, в которых нет времени (например, [Показатели].[Продажи]-[Показатели].[Стоимость]), только cm с параллельным периодом или подобным дает неверный результат. Я хотел попробоватьsolve_order, но не могу использовать его в определении cm, так как он не принимается инструментом VisualStudio, определяющим куб.   -  person DeepButi    schedule 09.07.2015
comment
Итак, вы добавляете этот см в сценарий куба. Вы пытались добавить меру в Excel?   -  person whytheq    schedule 09.07.2015
comment
В Excel есть опция «Включить отфильтрованные элементы в итоги». Если этот флажок установлен, стандартные показатели также добавляют все элементы в итоги, если флажок не установлен, суммируются только выбранные строки. Это именно то, что я хотел бы для cm, но эта опция не имеет никакого влияния на CM, всегда все элементы складываются.   -  person DeepButi    schedule 09.07.2015
comment
Да, я также пытался добавить расчетную меру непосредственно в Excel. Такое же поведение. Итоги для см включают невыбранные строки.   -  person DeepButi    schedule 09.07.2015
comment
@DeepButi. Что происходит, когда вы выбираете всего один день?   -  person SouravA    schedule 10.07.2015
comment
То же поведение: промежуточный итог за месяц включает CM все дни месяца, а промежуточный итог за год включает все дни года. Промежуточные итоги обоих базовых показателей ([Показатели].[Продажи]) в порядке. Исходное сообщение отредактировано, чтобы показать пример.   -  person DeepButi    schedule 10.07.2015


Ответы (2)


(не уверен, должен ли я опубликовать ответ, потому что он еще не решен, но, похоже, я нашел правильное направление)

Используя предложения здесь Я определил динамический набор (во время определения куба с помощью MS SAS):

CREATE DYNAMIC SET CURRENTCUBE.[DynSet] AS [Dim Time].[Calendar]

и вычисляемый член (в Excel проще тестировать другой синтаксис):

count([DynSet])

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

Возможно, кто-то с лучшим знанием MDX сможет развить его дальше.

Я также добавил CM, используя примеры количества сообщений (потомки и количество (существующие (...) оригинального [Dim Temps]. [Calendar], и вот что я получаю:

    Year    Month   Day Previous sales  Sales          CountExisting    CountDescendants    CountDays
    2015    04      03      74,154.56 € 135,156.41 €      1   1 1
                    04     132,992.88 € 152,179.24 €      1   1 1
                    05     130,651.80 € 128,971.65 €      1   1 1
    Total 04             2,617,045.75 € 416,307.30 €     31  31 1
Total 2015              37,696,665.69 € 416,307.30 €    365 365 1

Я не могу понять, как использовать новый динамический набор, поскольку я не могу получить доступ к его компонентам, я ожидал, что [DynSet].[Year] [Month] и [Day] существуют, чтобы я мог использовать их в своих предыдущих выражениях периода, но они этого не делают, поэтому не уверены, как использовать его для моей цели.

спасибо

Отредактировано:

Пытался определить

CREATE DYNAMIC SET CURRENTCUBE.[DynSet] AS [Dim Time].[Calendar].[Day]

и теперь мой последний столбец, т. е. count([DynSet]), имеет значение 3 для всех строк.

До сих пор не знаю, как использовать уровни [DynSet] ...

person DeepButi    schedule 10.07.2015

У меня ушло почти две недели, много часов поиска и дюжина разных форумов, но, наконец, я получил достойный ответ, который решил проблему.

Взгляните на здесь

Короче говоря, добавьте именованное вычисление (не вычисляемый член) и область формулы

SCOPE([Measures].[Previous_Sales]);
    SCOPE([Dim Time].[Calendar].[Day].MEMBERS);
            THIS = ([Measures].[Sales], ParallelPeriod([Dim Time].[Calendar].[Year])) ;
    END SCOPE;
END SCOPE;

Достаточно просто, как только вы это знаете!

person DeepButi    schedule 21.07.2015
comment
@whytheq Я думаю, вы хотели бы знать, что проблема наконец решена - person DeepButi; 21.07.2015
comment
странный QA этот: рад, что вы добрались туда в конце. - person whytheq; 29.12.2015