SSAS / MDX: РАЗДЕЛИТЬ с переопределением COUNT FORMAT_STRING? - PullRequest
1 голос
/ 05 апреля 2019

У меня странная проблема с форматированием вычисляемого члена в SSAS (многомерный).

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

При использовании SCOPE с функциями DIVIDE и COUNT MDX определенное форматирование меры (FORMAT_STRING) больше не применяется.

Вот код и пример:

CREATE MEMBER CURRENTCUBE.[Measures].[VA Budget]
AS 
    NULL,
FORMAT_STRING = "#,#.00",
VISIBLE = 1; 

([Measures].[VA Budget], [Datum].[Datum JQMT].[Jahr].Members) = [VA Jahresbudget];
([Measures].[VA Budget], [Datum].[Datum JQMT].[Quartal].Members) = DIVIDE([VA Jahresbudget], COUNT( Descendants(Ancestor([Datum].[Datum JQMT].CurrentMember, [Datum].[Datum JQMT].[Jahr]), [Datum].[Datum JQMT].[Quartal]) ));
([Measures].[VA Budget], [Datum].[Datum JQMT].[Monat].Members) = DIVIDE([VA Jahresbudget], COUNT( Descendants(Ancestor([Datum].[Datum JQMT].CurrentMember, [Datum].[Datum JQMT].[Jahr]), [Datum].[Datum JQMT].[Monat]) ));
([Measures].[VA Budget], [Datum].[Datum JQMT].[Tag].Members) = DIVIDE([VA Jahresbudget], COUNT( Descendants(Ancestor([Datum].[Datum JQMT].CurrentMember, [Datum].[Datum JQMT].[Jahr]), [Datum].[Datum JQMT].[Tag]) ));
([Measures].[VA Budget], [Datum].[Datum JWT].[Woche].Members) = DIVIDE([VA Jahresbudget], COUNT( Descendants(Ancestor([Datum].[Datum JWT].CurrentMember, [Datum].[Datum JWT].[Jahr]), [Datum].[Datum JWT].[Woche]) ));

[]

Тем не менее, он применяется правильно, когда я НЕ использую COUNT в функции DIVIDE:

([Measures].[VA Budget], [Datum].[Datum JQMT].[Monat].Members) = DIVIDE([VA Jahresbudget], 12 ));

[]

Кроме того, если я определяю другой вычисляемый элемент и ссылаюсь на предыдущий, форматирование снова применяется правильно:

CREATE MEMBER CURRENTCUBE.[Measures].[VA Budget2]
AS 
    [Measures].[VA Budget],
FORMAT_STRING = "#,#.00",
VISIBLE = 1; 
* * Тысяча двадцать-одина []

Что здесь происходит? Это ошибка? Как я могу сделать форматирование правильным без определения дополнительного вычисляемого элемента?

(версия SSAS 2016 - 13.0.5206)

1 Ответ

0 голосов
/ 26 июля 2019

Кажется, что MDX-функция Divide () приведет к тому, что результат потеряет формат.

Обходной путь - создать новый (не видимый) вычисляемый элемент, содержащий только определение DIVIDE;тогда используйте это в своем рассчитанном члене.Вот пример:

CREATE MEMBER CURRENTCUBE.[Measures].[My measure YTD]
 AS NULL, 
FORMAT_STRING = "0.0000",
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'MeasureGroup';


CREATE MEMBER CURRENTCUBE.[Measures].[My measure YTD DIVIDE YMD]
 AS DIVIDE (
        AGGREGATE (
                         PeriodsToDate([Date].[Year-Month-Day].[Year YMD],
                                        [Date].[Year-Month-Day].CurrentMember),
                         [Measures].[Dividend]
                    ),
        AGGREGATE (
                         PeriodsToDate([Date].[Year-Month-Day].[Year YMD],
                                        [Date].[Year-Month-Day].CurrentMember),
                         [Measures].[Divisor]
                    )
 ),
FORMAT_STRING = "0.0000",
VISIBLE = 0 ,  ASSOCIATED_MEASURE_GROUP = 'MeasureGroup';

CREATE MEMBER CURRENTCUBE.[Measures].[My measure YTD DIVIDE YQMD]
 AS DIVIDE (
        AGGREGATE (
                         PeriodsToDate([Date].[Year-Quarter-Month-Day].[Year YQMD],
                                        [Date].[Year-Quarter-Month-Day].CurrentMember),
                         [Measures].[Dividend]
                    ),
        AGGREGATE (
                         PeriodsToDate([Date].[Year-Quarter-Month-Day].[Year YQMD],
                                        [Date].[Year-Quarter-Month-Day].CurrentMember),
                         [Measures].[Divisor]
                    )
 ),
FORMAT_STRING = "0.0000",
VISIBLE = 0 ,  ASSOCIATED_MEASURE_GROUP = 'MeasureGroup';

SCOPE ( [Measures].[My measure YTD] );

    SCOPE ( [Date].[Data YMD].MEMBERS, [Date].[Year YMD].[Year YMD].MEMBERS );
        THIS = [My measure YTD DIVIDE YMD];
    END SCOPE;

    SCOPE ( [Date].[Data YQMD].MEMBERS, [Date].[Year YQMD].[Year YQMD].MEMBERS );
        THIS = [Measures].[My measure YTD DIVIDE YQMD];
    END SCOPE;

END SCOPE;
...