2010-04-16 16 views
5

Tôi muốn tạo phép tính được tính tổng chỉ một tập hợp con cụ thể của các bản ghi trong bảng sự thật của tôi dựa trên thuộc tính thứ nguyên.Làm cách nào để xác định Số đo được tính trong MDX dựa trên Thuộc tính thứ nguyên?

Given:

Dimension

  • ngày
  • LedgerLineItem {phí, thanh toán, Viết-Off, đồng thanh toán, tín dụng}

biện pháp

  • LedgerAmount

Mối quan hệ
* LedgerLineItem là một chiều hướng thoái hóa của FactLedger

Nếu tôi phá vỡ LedgerAmount bởi LedgerLineItem.Type tôi có thể dễ dàng nhìn thấy bao nhiêu là tính phí, thanh toán, tín dụng, vv, nhưng khi tôi làm không phá vỡ nó xuống bởi LedgerLineItem.Type Tôi không thể dễ dàng thêm tín dụng, trả tiền, tín dụng, vv vào một bảng tổng hợp. Tôi muốn tạo các biện pháp tính toán riêng biệt chỉ tính tổng loại cụ thể (hoặc nhiều loại) của các dữ kiện sổ kế toán.

Một ví dụ về các đầu ra mong muốn sẽ là:

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

Tôi đã cố gắng để tạo ra các biện pháp tính toán một vài cách và mỗi người làm việc trong một số trường hợp nhưng không phải trong những người khác. Bây giờ trước khi bất cứ ai nói làm điều này trong ETL, tôi đã thực hiện nó trong ETL và nó hoạt động tốt. Những gì tôi đang cố gắng làm là một phần của việc học để hiểu MDX tốt hơn là tìm ra cách nhân bản những gì tôi đã làm trong ETL trong MDX cho đến nay tôi không thể làm điều đó.

Dưới đây là hai lần tôi đã thực hiện và các vấn đề với họ. Điều này chỉ hoạt động khi loại sổ kế toán nằm trong bảng tổng hợp. Nó trả về đúng số lượng các mục sổ kế toán (mặc dù trong trường hợp này nó giống như [số tiền - sổ cái] nhưng khi tôi cố gắng để loại bỏ loại và chỉ nhận được tổng của tất cả các mục sổ kế toán nó sẽ trả về chưa biết

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

. Điều này chỉ hoạt động khi loại sổ kế toán không có trong bảng tổng hợp. Số tiền này luôn trả về tổng số tiền thanh toán, điều này không chính xác khi tôi cắt theo loại như tôi sẽ chỉ thấy phần tín dụng dưới dạng tín dụng, phần trả tiền, được thanh toán, $ 0 dưới phí, v.v.

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

Có cách nào để trả lại số chính xác cho dù Ledger có được bao gồm hay không. d trong bảng tổng hợp của tôi hay không?

Trả lời

7

Hãy thử HIỆN:

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

nên làm cho nó chú ý đến các thành viên trong vở kịch.

+0

Bạn đá! Đó là chính xác những gì tôi đang tìm kiếm. –

0

Tôi giả định độ mờ Ledger có khóa trong FactLedger nhưng vấn đề mà nó không cuộn lên ngay với thành viên MDX đầu tiên được tính toán dẫn tôi tin rằng bạn có thể muốn suy nghĩ lại những con ngựa này.

Sau đó, SUM đơn giản dựa trên loại sổ kế toán của bạn sẽ hoạt động, điều đó có hợp lý không?

+0

Một SUM đơn giản dựa trên các loại sổ kế toán làm việc, trừ khi tôi không muốn để bao gồm loại sổ kế toán trong bảng tổng hợp của tôi, điều này khá thường xuyên xảy ra. Những gì tôi đang cố gắng thực hiện là hiển thị tổng số loại khác nhau mà không phải bao gồm các loại như các thực thể riêng biệt trong bảng tổng hợp, nói rằng nếu tôi muốn có cái nhìn rộng hơn về doanh nghiệp của mình, như tổng số giờ đã tính phí, trả tiền và nhân viên . Nhân viên giờ làm việc không cắt theo loại sổ kế toán vì vậy phải cắt theo loại sổ kế toán để có được tổng số phí và trả tiền không phải là một giải pháp tuyệt vời cho tôi trong mọi trường hợp, chỉ trong sổ cái cụ thể chỉ báo cáo. –

1

Không thể nhận xét về câu trả lời của Meff, vì vậy tôi sẽ đăng câu trả lời của riêng mình.

Bạn nên xem xét sử dụng tổng hợp thay vì Sum, như kết quả có thể không phải luôn luôn là những người bạn mong đợi sử dụng 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' ; 
+1

AGGREGATE, theo mặc định sẽ trả lại kết quả tương tự như SUM. AGGREGATE thực sự vượt trội so với SUM vì các hàm tổng hợp khác có thể được sử dụng cùng với nó. – SouravA