Chciałbym utworzyć obliczoną miarę, która sumuje tylko określony podzbiór rekordów w mojej tabeli faktów na podstawie atrybutu wymiaru.Jak zdefiniować miarę obliczaną w MDX na podstawie atrybutu Dimension?
Dane:
Wymiar
- Data
- LedgerLineItem {Charge, płatności, odpis, Copay, Credit}
Środki
- LedgerAmount
Relacje
* LedgerLineItem jest zdegenerowany wymiar od FactLedger
Gdybym rozbić LedgerAmount przez LedgerLineItem.Type mogę łatwo zobaczyć, ile jest pobierana, zapłacił, kredyt, etc, ale kiedy nie rozbij go przez LedgerLineItem.Type Nie mogę łatwo dodać do tabeli przestawnej kredytu, płatności, kredytu itp. Chciałbym utworzyć oddzielne obliczone miary, które sumują tylko określony typ (lub wiele typów) faktów z ksiąg rachunkowych.
Przykładem pożądanym wyjściem byłoby:
| Year | Charged | Total Paid | Amount - Ledger |
| 2008 | $1000 | $600 | -$400 |
| 2009 | $2000 | $1500 | -$500 |
| Total | $3000 | $2100 | -$900 |
Próbowałem stworzyć obliczonej mierzyć kilka sposobów, a każdy z nich działa w pewnych okolicznościach, ale nie w innych. Teraz zanim ktokolwiek mówi, że robię to w ETL, zrobiłem to już w ETL i działa dobrze. Co staram się zrobić, aby nauczyć się lepiej rozumieć MDX, to dowiedzieć się, jak powielić to, co zrobiłem w ETL w MDX, ponieważ do tej pory nie jestem w stanie tego zrobić.
Oto dwie próby, które podjęłam i problemy z nimi. Działa to tylko wtedy, gdy typ księgi znajduje się w tabeli przestawnej. Zwraca odpowiednią ilość zapisów księgi głównej (choć w tym przypadku jest ona identyczna [Kwota - księgi], ale gdy próbuję usunąć typ i po prostu suma wszystkich zapisów księgi głównej zwraca nieznany
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' ;
. Działa to tylko wtedy, gdy typ księgi nie znajduje się w tabeli przestawnej, zawsze zwraca całkowitą kwotę płatności, która jest niepoprawna, gdy dzielę według typu, ponieważ spodziewałbym się, że część kredytu zostanie uznana za kredytową, część płatna, pod płatną, 0 USD pod obciążeniem, itp.
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' ;
Czy istnieje sposób na zwrócenie poprawnych liczb niezależnie od tego, czy Ledger.Type zawiera d w moim stole obrotowym czy nie?
Skałasz! To jest dokładnie to, czego szukałem. –