Я хотел бы создать вычисляемую меру, которая суммирует только определенное подмножество записей в моей таблице фактов на основе атрибута измерения.
Данный:
Измерение
- Дата
- LedgerLineItem {Charge, Payment, Write-Off, Copay, Credit}
Меры
- LedgerAmount
Взаимосвязи
* LedgerLineItem — это вырожденное измерение FactLedger.
Если я разбиваю LedgerAmount по LedgerLineItem.Type, я могу легко увидеть, сколько начислено, оплачено, кредит и т. д., но когда я не разбиваю его по LedgerLineItem.Type, я не могу легко добавить кредит, оплачено, кредит и т. д. в сводная таблица. Я хотел бы создать отдельные вычисляемые показатели, которые суммируют только определенный тип (или несколько типов) фактов бухгалтерской книги.
Примером желаемого результата может быть:
| 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.Type в мою сводную таблицу или нет?