Чтобы решить эту проблему, мы будем работать с двумя разными концепциями. Сначала создайте новую иерархию, а затем используйте MDX+.
Сначала мы должны создать новое измерение, [Гистрограмма]. Это новое измерение будет содержать определение сегментов с двумя свойствами элемента: start-bucket и end-bucket. Псевдотаблица, которая выглядит как
Name start-bucket end-bucket
0-1 0 1
1-2 1 2
2-3 2 3
...
10++ 10 2147483647
Эта иерархия не связана с фактами и определяет для каждого члена два свойства, определяющие ведро.
Давайте применим это в MDX.
Предположим, у нас есть параметр [Сеансы] и показатель [клики]. Сначала мы воспользуемся объектно-ориентированными функциями icCube и создадим вектор, который для каждого сеанса вычисляет количество кликов.
-> Вектор( [Сеансы], [клики], EXCLUDEEMPTY )
У вектора есть функция hist(start,end), которая делает именно то, что нам нужно, и подсчитывает все вхождения между началом и концом (исключая).
Vector( [Sessions], [click-outs], EXCLUDEEMPTY )->hist(0,1)
Объединение этого с нашей недавно созданной иерархией позволяет автоматизировать расчет для всех сегментов. Функция const гарантирует, что вектор вычисляется только один раз, так как это может занять много времени.
Окончательный MDX выглядит следующим образом (обратите внимание, что члены function и calc. могут быть созданы в сценарии схемы по одному разу для каждой схемы):
WITH
CONST FUNCTION ClicksBySession() AS Vector( [Sessions], [Measures].[click-outs], EXCLUDEEMPTY )
MEMBER [Session/Clickout] AS ClicksBySession()->hist( [Histogram].currentMember.properties("start-bucket", TYPED) , [Histogram].currentMember.properties("end-bucket", TYPED)
SELECT
{[Session/Clickout] } on 0,
[Histogram].on 1
FROM [clickout]
--where [Geography].[Europe]
И вот у вас есть гистограмма, которая рассчитывается динамически, которую можно легко вставить в информационную панель и использовать повторно.
person
ic3
schedule
10.07.2015