Создайте вычисляемый элемент MDX, чтобы создать гистограмму с накоплением, используя данные с итогами и сокращениями. - PullRequest
2 голосов
/ 17 июня 2010

Мы используем куб, построенный в SSAS, и мы хотели бы показать влияние дельт на прогноз.

Итак, у нас есть такие данные:

Year    Type        Amount
----    ---------   ---------
2008    Forecast    +1000
2008    Delta 1     - 100
2008    Delta 2     - 200
2009    ...

Нам бы хотелосьчтобы составить столбчатую диаграмму с накоплением, нам нужны такие данные:

Year    Type        Amount
----    ---------   ---------
2008    Result      +700
2008    Delta 1     +100
2008    Delta 2     +200

. Вы можете видеть, что «Результат» равен сумме прогноза и дельт с определенной гранулярностью (в данном примере этоэто просто время, у нас также будет место в качестве дополнительного измерения).

Уловка в том, что мы хотели бы иметь возможность отфильтровывать дельту и обновлять гистограмму, так что тогда потребуется «Результат»затем изменить так, чтобы сумма все еще была прогнозом для этой гранулярности:

Type          Amount
---------   ---------
Result         +900
Delta 1        +100

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

Есть ли способ сделать это в кубе?Наше лучшее предположение - какой-то вычисляемый член MDX, но мы открыты и для других решений.

Спасибо!

ОБНОВЛЕНИЕ 1: проблема, которую я вижу с вычисляемым полем, состоит в том, что он добавляетчлен (т. е. столбец) в куб, где нам действительно нужно добавить строки с помощью UNION ... но в кубе.Вот пример SQL-кода psuedo:

SELECT 
  Year,
  'Result' AS Type,
  SUM(Amount) AS Amount
FROM Table1
WHERE 1=1
  --AND Type 'Delta 2' 
GROUP BY Year

UNION ALL

SELECT 
  Year,
  Type,
  -1*Amount AS Amount
FROM Table1
WHERE Type LIKE 'Delta%'
  --AND Type 'Delta 2'

--Note the commented out WHERE clauses are where you would de-select a delta if desired.

Может ли это быть переведено в MDX для вычисления на лету?

ОБНОВЛЕНИЕ 2:

Это самый близкий Iдошел до сих пор, но он не идеален:

CREATE MEMBER CURRENTCUBE.[Measures].[Adjusted]
 AS CASE [Measure Type DEV].[Measure Type] /* This is the 'Type' column above */
    WHEN [Measure Type DEV].[Measure Type].&[2] /* Forecast is key 2 */
    THEN ([Measure Type DEV].[Measure Type].&[2],
        [Time].[Year].CURRENTMEMBER,[Measures].[Amount]) 
      + ([Measure Type DEV].[Measure Type].&[3], /* Delta is key 3 */
         [Time].[Year].CURRENTMEMBER,[Measures].[Amount]) END

Ответы [ 2 ]

1 голос
/ 12 июля 2010

В моем последнем обновлении вопроса (Обновление 2) я спросил, как сделать SQL-подобный союз в MDX ..., который привел меня в правильном направлении, но это неправильный способ думать об этом (я все еще новичокв MDX).

Чтобы добавить результат "Строка", мне нужно было добавить вычисляемое измерение (которое можно поместить в строки), которое вернуло уровень Все, который выполняет суммирование, которое я искал, И мне нужно было добавитьновое вычисленное измерение, которое будет делать оператор случая (перевернуть сокращения в одном случае, вычесть сокращения из общей суммы в другом).

1 голос
/ 29 июня 2010

Нет действительно отличного способа сделать это в MDX, но когда мне пришлось создавать forcasts, я использовал интеллектуальный анализ данных для выполнения этой задачи, используя эту статью в качестве основной ссылки:

http://cwebbbi.spaces.live.com/Blog/cns!7B84B0F2C239489A!2795.entry?a665aac0&wa=wsignin1.0

Я надеюсь, что это поможет, и это может быть быстрее, чем попытка решить эту проблему с помощью прямого MDX.

...