MDX-запрос для суммирования меры для всех столбцов / строк - PullRequest
1 голос
/ 27 июля 2011

У меня есть куб, который имеет:

DimEntity
EntityID
EntityName
EntityLongName

FactReturns
TotalReturn

То, что я хочу сделать, это суммировать TotalReturns между всеми комбинациями сущностей, поэтому результат будет таким:

             NameA        NameB
LongNameA    sum(A, 1)    sum(A, 2)
LongNameB    sum(B, 1)    sum(B, 2)

(сумма (A, 1) = сумма (A, A), поскольку EntityName "A" и EntityID "1" относятся к одной и той же сущности)

То, что у меня сейчас есть, это:

WITH MEMBER [Measures].[SumReturns] AS
    SUM([Dim Entity].[EntityID], [Measures].[TotalReturn])
SELECT 
    [Dim Entity].[EntityName].Children ON COLUMNS,
    [Dim Entity].[EntityLongName].Children ON ROWS  
FROM
    [Returns]
WHERE
    [Measures].[SumReturns]

Но это просто дает мне такую ​​таблицу:

             NameA            NameB
LongNameA    A.TotalReturn    null
LongNameB    null             B.TotalReturn
etc...

Я только изучаю MDX и очень трудно понять, как это работает.

1 Ответ

3 голосов
/ 28 июля 2011

Вы смешиваете немного понятий MDX, извините за ввод в заблуждение Я бы посоветовал вам потратить некоторое время на чтение документации по MDX. У вас есть краткое введение в MDX здесь , также интересно прочитать эту страницу ; не пропустите следующую страницу - продвинутый.

  • Это ноль по построению, так как кортеж не существует.

Существует важное различие между измерениями и иерархиями. Размеры представляют собой координаты в вашем пространстве фактов (или кубе ваших фактов). Чтобы извлечь некоторые значения из этого пространства (он же куб), вам нужно определить подпространство (он же ячейка). Иерархия - это «другой» способ группировки координат (сущностей) измерения. Если вы определяете две сущности разных иерархий одного измерения, вы выполняете пересечение между этими двумя сущностями. Это пересечение может быть пустым, как в вашем случае.

Давайте рассмотрим пример:

  • EntityName - это координата вашего [Dim Entity], этот пример - плоское измерение с объектами в качестве координат.
  • Давайте представим, что вы хотели бы сгруппировать сущности этого измерения по-разному: одну, содержащую «а», и одну без. В этой новой иерархии есть два члена или сущности [с] и [без].

Теперь, если вы спросите кортеж ([Dim Entity]. [Flat]. [Entity 1], [Dim Entity]. [Содержит A]. [С a]), он всегда равен нулю, так как этот кортеж не существует как в кубе нет координаты для этой комбинации. Зачем ? [Сущность 1] не содержит «а».

Я не уверен, что вы рассчитываете, но вам нужно покрутить ваш расчетный член. После комментария santiii нам нужно новое измерение:

 WITH MEMBER [Measures].[SumReturns] AS
   -- we're reseting here COLUMNS information, sum is not needed
  ([Dim Entity].[EntityName].defaultmember,[Measures].[TotalReturn])
  +
  -- we're reseting here ROWS
  ([Dim Entity 2].defaultmember,[Measures].[TotalReturn])
 SELECT 
  [Dim Entity].[EntityName].Children ON COLUMNS,
  [Dim Entity 2].[EntityName].Children ON ROWS  
 FROM [Returns]
...