2010-04-16 19 views
5

Bir özellik niteliğine dayalı olarak aslında gerçek tablodaki belirli bir kayıt alt kümesini özetleyen hesaplanmış bir ölçü oluşturmak istiyorum.Boyut Niteliklerine Göre MDX'te Hesaplanmış Bir Ölçümü nasıl tanımlarım?

Verilen:

Boyut

  • tarihi
  • LedgerLineItem {Şarj, Ödeme, yaz-Off, Copay, Kredi}

önlemler

  • LedgerAmount

İlişkiler
* LedgerLineItem

Ben LedgerLineItem.Type tarafından LedgerAmount yıkmak ben kolayca vb, suçlandıkları ödenir görmek ne kadar kredi yapabilirsiniz FactLedger

bir dejenere boyuttur ancak ben ne zaman değil LedgerLineItem.Type tarafından parçalara ayırın Kredi, ödenen, kredi, vb. pivot tabloya kolayca eklenemiyorum. Yalnızca belirli türde (veya birden fazla türde) defter bilgilerini içeren ayrı hesaplanmış önlemler oluşturmak istiyorum.

istenen çıktı bir örnek

olacaktır: Ben hesaplanan ölçü birkaç yol oluşturmak için çalıştık ve her biri bazı durumlarda diğerlerinde çalışır

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

. Şimdi herkes ETL'de bunu yapmadan önce, bunu ETL'de yapmıştım ve gayet iyi çalışıyor. MDX'i daha iyi anlamayı öğrenmenin bir parçası olarak yapmaya çalıştığım şey, şu ana kadar MDX'te ETL'de yaptığım şeyi çoğaltmanın nasıl olduğunu anlayamıyorum.

Yaptığım iki deneme ve onlarla ilgili problemler. Bu, yalnızca defter tipi pivot tabloda olduğunda çalışır. bu durumda aynıdır rağmen (defter girişlerinin doğru miktarda döner [tutarı - defterin] ama tipini kaldırmak ve sadece bilinmeyen döndüren tüm defter girişlerinin toplamı elde etmeye çalışmak zaman

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

. Bu, yalnızca kağıt türü pivot tablosunda olmadığında çalışır. Her zaman, yalnızca kredinin altındaki kredi kısmını, ödenen kısım, ödenmiş tutarı görmeyi beklediğim gibi, türüne göre dilimleme yaparken yanlış olan toplam ödeme tutarını döndürür. ödeme altından $ 0, vb

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

bu bakmaksızın Ledger.Type dahil olup olmadığı doğru numaralarını dönmelerini sağlamanın bir yolu var mı pivot tablomda değil mi?

cevap

7

MEVCUT deneyin:

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

oyundaki üyelere dikkat edeceklerdir.

+0

Siz sallanıyorsunuz! Bu tam olarak ne arıyordum. –

0

Ledger boyutunun FactLedger içindeki bir anahtarının olduğunu varsayardım, ancak ilk MDX hesaplanan üye ile sağlanmadığı sorunu, bunun için hiyerarşileri yeniden düşünmek isteyebileceğine inanmamı sağlar.

Sonra, defterinizdeki kağıda dayalı basit bir SUM işe yarar, bu mantıklı mıdır?

+0

defter türüne göre basit SUM yapar işi, Çok sık olan pivot tabloya defter tipi dahil etmek. Yapmaya çalıştığım şey, pivot tablodaki türleri ayrı birer öğe olarak eklemek zorunda kalmadan, farklı türlerin toplamını görüntülemektir. Örneğin, toplam ücretlendirilen, ödenen ve çalışanların çalıştığı saatler gibi, işletmemle ilgili daha geniş bir görünüm istiyorsam . Çalışılan personel saatleri, kestirici türüyle dilimlememekte, böylece toplam ücret almak için defter türü tarafından kesilmek zorunda kalmamakta ve ödenen ücret, yalnızca belirli muhasebede yalnızca raporlarda tüm durumlarda benim için harika bir çözüm değildir. –

1

Meff'un cevabı hakkında yorum yapamam, böylece kendi başıma göndereceğim.

sonuç her zaman Sum kullanarak bekliyoruz olanlar olmayabilir gibi, yerine Sum Agrega kullanmayı düşünmelisiniz: Ben istemiyorum hariç

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

AGGREGATE, varsayılan olarak aynı sonucu SUM olarak döndürecektir. AGGREGATE aslında SUM'dan daha üstündür, çünkü diğer toplama işlevleri onunla birlikte kullanılabilir. – SouravA

İlgili konular