Мы используем куб, построенный в 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