Как я определяю Расчетную Меру в MDX на основе Атрибута размерности?

Я хотел бы создать расчетную меру, которая подводит итог только определенного подмножества записей в моей таблице фактов на основе атрибута размерности.

Данный:

Размер

  • Дата
  • LedgerLineItem {заряд, оплата, списание со счета, доплата, кредит}

Меры

  • LedgerAmount

Отношения
* LedgerLineItem является вырожденным размером FactLedger

Если я ломаю LedgerAmount LedgerLineItem. Введите я могу легко видеть, сколько заряжено, заплачено, кредит, и т.д., но когда я не ломаю его LedgerLineItem. Введите я не могу легко добавить кредит, заплаченный, кредит, и т.д. в сводную таблицу. Я хотел бы создать отдельные расчетные меры, которые суммируют только определенный тип (или несколько типов) фактов бухгалтерской книги.

Пример желаемого вывода был бы:

| Year  | Charged | Total Paid | Amount - Ledger |
| 2008  | $1000   | $600       | -$400           |
| 2009  | $2000   | $1500      | -$500           |
| Total | $3000   | $2100      | -$900           |

Я попытался создать расчетную меру несколько путей, и каждый работает при некоторых обстоятельствах, но не при других. Теперь, прежде чем, как любой говорит, делают это в ETL, я уже сделал его в ETL, и он работает просто великолепно. Что я пытаюсь сделать как часть обучения понять, что MDX лучше должен выяснить, как копировать то, что я сделал в ETL в MDX как до сих пор, я не могу сделать это.

Вот две попытки, которые я предпринял и проблемы с ними. Это работает только, когда тип бухгалтерской книги находится в сводной таблице. Это возвращает корректный объем записей бухгалтерской книги (хотя в этом случае это идентично [сумма - бухгалтерская книга], но когда я пытаюсь удалить тип, и просто получить сумму всех записей бухгалтерской книги это возвращается неизвестный.

CREATE MEMBER CURRENTCUBE.[Measures].[Received Payment]
AS CASE WHEN ([Ledger].[Type].currentMember = [Ledger].[Type].&[Credit]) 
OR ([Ledger].[Type].currentMember = [Ledger].[Type].&[Paid])
OR ([Ledger].[Type].currentMember = [Ledger].[Type].&[Held Money: Copay])
THEN [Measures].[Amount - ledger] 
ELSE 0
END 
, FORMAT_STRING = "Currency"
, VISIBLE = 1 
, ASSOCIATED_MEASURE_GROUP = 'Ledger'  ; 

Это работает только, когда тип бухгалтерской книги не находится в сводной таблице. Это всегда возвращает общую сумму платежа, которая является неправильной, когда я режу типом, поскольку я только ожидал бы видеть часть кредита под кредитом, заплаченную часть, под заплаченным, 0$ под зарядом, и т.д.

CREATE MEMBER CURRENTCUBE.[Measures].[Received Payment]
AS sum({([Ledger].[Type].&[Credit]), ([Ledger].[Type].&[Paid])
, ([Ledger].[Type].&[Held Money: Copay])}
,  [Measures].[Amount - Ledger])
, FORMAT_STRING = "Currency"
, VISIBLE = 1 
, ASSOCIATED_MEASURE_GROUP = 'Ledger'  ;  

Есть ли любой способ сделать этот возврат корректными числами независимо от ли Ledger. Тип включен в мою сводную таблицу или нет?

5
задан marc_s 16 April 2010 в 18:24
поделиться

2 ответа

Попробуйте СУЩЕСТВОВАТЬ:

CREATE MEMBER CURRENTCUBE.[Measures].[Received Payment]
AS sum(Existing({([Ledger].[Type].&[Credit]), ([Ledger].[Type].&[Paid])
, ([Ledger].[Type].&[Held Money: Copay])})
,  [Measures].[Amount - Ledger])
, FORMAT_STRING = "Currency"
, VISIBLE = 1 
, ASSOCIATED_MEASURE_GROUP = 'Ledger'  ;  

Должен обратить внимание на участников в игре.

7
ответ дан 14 December 2019 в 04:33
поделиться

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

Тогда подойдет простая СУММ, основанная на типе вашей бухгалтерской книги, имеет ли это смысл?

0
ответ дан 14 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: