Я относительно новичок в SSAS MDX и сталкиваюсь с проблемой создания агрегатов по всем показателям различных элементов измерения.
Следующая картина лучше всего описывает то, чего я пытаюсь достичь:
Проблема и какое решение должно быть
Это черновик и упрощение более сложного сценария, так что не беспокойтесь ;-).
После проведения серии экспериментов я решил использовать простое измерение без связи с другими измерениями, чтобы иметь возможность использовать инструкцию SCOPE для переопределения полученных результатов в отчете.
Простое измерение "Kurz PuL" содержит предшествующие элементы (Umsatz .. Periodenergebnis) и должно создавать отчет о прибылях и убытках.
Размер Kurz PuL
В настоящее время работает, чтобы показать результаты отдельных членов (например, Umsatz, Wareneinsatz, SbA, Personal).
Но я не могу агрегировать значения более чем одного члена , чтобы получить агрегат, например: Umsatz + Wareneinsatz = Rohertrag. Я пробовал разные подходы, но ни один не работал.
См. Следующие операторы SCOPE, которые используются для «переопределения» результирующих значений, отображаемых в Excel (первое изображение ^^):
ОБЛАСТЬ ПРИМЕНЕНИЯ:
/*
The CALCULATE command controls the aggregation of leaf cells in the cube.
If the CALCULATE command is deleted or modified, the data within the cube is affected.
You should edit this command only if you manually specify how the cube is aggregated.
*/
CALCULATE;
SCOPE ([Kurz PuL].[Calculated].[Umsatz]);
THIS = AGGREGATE([EinfacheBwaZeile].[Hierarchy].&[U]);
END SCOPE;
SCOPE ([Kurz PuL].[Calculated].[Wareneinsatz]);
THIS = AGGREGATE([EinfacheBwaZeile].[Hierarchy].&[W]);
END SCOPE;
/* DOES NOT WORK: */
SCOPE ([Kurz PuL].[Calculated].[Rohertrag]);
THIS = AGGREGATE(FILTER([EinfacheBwaZeile].[Hierarchy].CurrentMember, { [EinfacheBwaZeile].[Hierarchy].&[U], [EinfacheBwaZeile].[Hierarchy].&[W] }));
END SCOPE;
SCOPE ([Kurz PuL].[Calculated].[Personal]);
THIS = AGGREGATE( { [EinfacheBwaZeile].[Hierarchy].&[P] });
END SCOPE;
SCOPE ([Kurz PuL].[Calculated].[Marketing]);
THIS = AGGREGATE( { [EinfacheBwaZeile].[Hierarchy].&[M] });
END SCOPE;
/* DOES NOT WORK: */
SCOPE ([Kurz PuL].[Calculated].[Deckungsbeitrag]);
THIS = AGGREGATE( { [EinfacheBwaZeile].[Hierarchy].&[U], [EinfacheBwaZeile].[Hierarchy].&[W], [EinfacheBwaZeile].[Hierarchy].&[R], [EinfacheBwaZeile].[Hierarchy].&[P]
, [EinfacheBwaZeile].[Hierarchy].&[M], [EinfacheBwaZeile].[Hierarchy].&[D] });
END SCOPE;
SCOPE ([Kurz PuL].[Calculated].[SbA]);
THIS = AGGREGATE( { [EinfacheBwaZeile].[Hierarchy].&[S] });
END SCOPE;
/* DOES NOT WORK: */
SCOPE ([Kurz PuL].[Calculated].[EBITDA]);
THIS = AGGREGATE( { [EinfacheBwaZeile].[Hierarchy].&[U], [EinfacheBwaZeile].[Hierarchy].&[W], [EinfacheBwaZeile].[Hierarchy].&[R], [EinfacheBwaZeile].[Hierarchy].&[P]
, [EinfacheBwaZeile].[Hierarchy].&[M], [EinfacheBwaZeile].[Hierarchy].&[D]
, [EinfacheBwaZeile].[Hierarchy].&[S], [EinfacheBwaZeile].[Hierarchy].&[A] });
END SCOPE;
/* DOES NOT WORK: */
SCOPE ([Kurz PuL].[Calculated].[EBIT]);
THIS = AGGREGATE( { [EinfacheBwaZeile].[Hierarchy].&[U], [EinfacheBwaZeile].[Hierarchy].&[W], [EinfacheBwaZeile].[Hierarchy].&[R], [EinfacheBwaZeile].[Hierarchy].&[P]
, [EinfacheBwaZeile].[Hierarchy].&[M], [EinfacheBwaZeile].[Hierarchy].&[D]
, [EinfacheBwaZeile].[Hierarchy].&[S], [EinfacheBwaZeile].[Hierarchy].&[A]
, [EinfacheBwaZeile].[Hierarchy].&[I] });
END SCOPE;
/* DOES NOT WORK: */
SCOPE ([Kurz PuL].[Calculated].[EBT]);
THIS = AGGREGATE( { [EinfacheBwaZeile].[Hierarchy].&[U], [EinfacheBwaZeile].[Hierarchy].&[W], [EinfacheBwaZeile].[Hierarchy].&[R], [EinfacheBwaZeile].[Hierarchy].&[P]
, [EinfacheBwaZeile].[Hierarchy].&[M], [EinfacheBwaZeile].[Hierarchy].&[D]
, [EinfacheBwaZeile].[Hierarchy].&[S], [EinfacheBwaZeile].[Hierarchy].&[A]
, [EinfacheBwaZeile].[Hierarchy].&[I]
, [EinfacheBwaZeile].[Hierarchy].&[T] });
END SCOPE;
/* DOES NOT WORK: */
SCOPE ([Kurz PuL].[Calculated].[Periodenergebnis]);
THIS = AGGREGATE( { [EinfacheBwaZeile].[Hierarchy].&[U], [EinfacheBwaZeile].[Hierarchy].&[W], [EinfacheBwaZeile].[Hierarchy].&[R], [EinfacheBwaZeile].[Hierarchy].&[P]
, [EinfacheBwaZeile].[Hierarchy].&[M], [EinfacheBwaZeile].[Hierarchy].&[D]
, [EinfacheBwaZeile].[Hierarchy].&[S], [EinfacheBwaZeile].[Hierarchy].&[A]
, [EinfacheBwaZeile].[Hierarchy].&[I]
, [EinfacheBwaZeile].[Hierarchy].&[T]
, [EinfacheBwaZeile].[Hierarchy].&[E] });
END SCOPE;
Я пытался найти ресурс, который объясняет, как агрегировать по нескольким элементам, но не нашел решения.
Как я могу использовать функцию AGGREGATE () для объединения / суммирования значений, связанных с несколькими элементами измерения [EinfacheBwaZeile]. [Hierarchy] .A,… .B,… .C?
Я очень ценю ваши ответы!
Заранее спасибо,
Cordt
- ОБНОВЛЕНИЕ 2019-05-28 в качестве ответа Моазу на 2019-05-27: -
Привет Моаз,
Спасибо за ваше предложение.
К сожалению, это решение не отвечает моим потребностям.
Первое, на что нужно обратить внимание, это то, что мне нужен SCOPE-Statement, а не SELECT-MDX.
Во-вторых, мне нужно, чтобы все меры определенных членов другого измерения были "обобщены". На первый взгляд это выглядит как «промежуточный итог», но это зависит от значений «предыдущих» членов, где некоторые могут быть пропущены.
В словах примера Adventure Works, следующее показывает, что мне нужно:
SCOPE (MountainBikeSales);
THIS = AGGREGATE(Product.&[Bikes]);
END SCOPE;
SCOPE (BikesAndAccessories);
THIS = AGGREGATE({ Product.&[Bikes], Product.&[Accessories] });
END SCOPE;
SCOPE (BikesAccsClothing);
THIS = AGGREGATE({ Product.&[Bikes], Product.&[Accessories], Product.&[Clothing] });
END SCOPE;
Это более понятно?
Вы могли бы даже подумать о ОБЛАСТИ, в которой пропускаются аксессуары, суммируя велосипеды и одежду вместо аксессуаров.
Для меня проблема в том, что первое утверждение будет успешным (то есть, суммирует одного члена), а другие - нет.
Спасибо за ваш совет!
Cordt