Как определить вычисляемую меру в многомерных выражениях на основе атрибута измерения?


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

Дано:

Размерность

  • дата
  • LedgerLineItem {Начисление, Оплата, Списание, Copay, Кредит}

Меры

  • LedgerAmount

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

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

Примером желаемого результата может быть:

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

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

Вот две попытки, которые я сделал, и проблемы с ними. Это работает только тогда, когда тип книги находится в сводной таблице. Он возвращает правильное количество операций книги (хотя в данном случае это идентично [сумма-книга], но когда я пытаюсь удалить тип и просто получить сумму всех операций книги, он возвращает неизвестный.
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'  ;  

Есть ли какой-либо способ сделать это возвращение правильных чисел независимо от того, то ли дело Леджер.Тип включен в мою сводную таблицу или нет?

3 5

3 ответа:

Попробуйте существовать:

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'  ;  

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

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

Вы должны рассмотреть возможность использования Aggregate вместо Sum, так как результаты не всегда могут быть теми, которые вы ожидаете, используя Sum:

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

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

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