Я хотел бы создать вычисляемую меру, которая суммирует только определенное подмножество записей в моей таблице фактов на основе атрибута измерения.
Дано:
Размер
- Дата
- LedgerLineItem {Начисление, Оплата, Списание, Доплата, Кредит}
Меры
Отношения
* 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 в мою сводную таблицу или нет?