2016-02-17 118 views
0

如何創建一個DAX度量,以顯示收貨餘額大於或等於付款餘額的第一個收貨日期?DAX來自不同表格的累計總計比較

例如,對於君,我希望[付款收據日期均價]指標顯示爲簡,因爲收據平衡是10比8。

對於八月的收支時,它會顯示因爲二月是因爲那裏的收據餘額至少是13

預期結果的收支的第一個日期:

Output

數據模型

Data Model

表:PO接收

PoReceipt

表:付款

Payment

嘗試性解決方案

我已經定義了以下措施:

Receipt Balance: 
=CALCULATE 
(
    SUM(PoReceipt[Quantity Received]), 
    FILTER 
    (
     ALL (PaymentDates), 
     PaymentDates[Payment_FullDate] <= MAX (PaymentDates[Payment_FullDate]) 
    ) 
) 

Payment Balance: 
=CALCULATE 
(
    SUM(Payment[Payment Amount]), 
    FILTER 
    (
     ALL (PaymentDates), 
     PaymentDates[Payment_FullDate] <= MAX (PaymentDates[Payment_FullDate]) 
    ) 
) 

回答

0

創建計算列,以獲得具有淨收據總運行的第一天(即收入少於付款總額)大於當前行上下文中的付款金額。計算的列將需要執行以下操作:

  1. 返回每個[PO編號]的[Payment Amount]的運行總數。使用EARLIER函數以便對外部上下文中的每一行對內部上下文中的所有行進行求和,其中內部行的[支付日期]小於或等於外部行,並且內部行的[Po Num]等於外排的那個。
  2. 根據PoReceipt表返回彙總表,該表具有擴展列「Receipt Balance Calc」。擴展列計算類似於步驟1的PoReceipt [Quantity Received]的運行總數。彙總表按列[Po Num]和[Receipt Date]進行分組,避免多次執行相同的計算(因爲有多個由於[Receipt Num]列而具有相同[Po Num]的行)。
  3. 將結果過濾爲僅包括收據餘額大於或等於付款餘額的行。
對於計算列

見DAX代碼:

Payment[Payment Balance Calc] 
=CALCULATE (
    SUM (Payment[Payment Amount]), 
    FILTER (
     Payment, 
     Payment[Payment Date] <= EARLIER (Payment[Payment Date]) 
     && Payment[Po Num] = EARLIER (Payment[Po Num]) 
    ) 
) 

Payment[Payment Receipt Date] 
=CALCULATE (
    MIN (PoReceipt[Receipt Date]), 
    ALL (PaymentDates), 
    FILTER (
     ADDCOLUMNS (
      SUMMARIZE (
       PoReceipt, 
       PoReceipt[Po Num], 
       PoReceipt[Receipt Date] 
      ), 
      "Receipt Balance Calc", 
      CALCULATE (
       SUM (PoReceipt[Quantity Received]), 
       FILTER (
        PoReceipt, 
        PoReceipt[Receipt Date] <= EARLIER (PoReceipt[Receipt Date]) 
        && PoReceipt[Po Num] = EARLIER (PoReceipt[Po Num]) 
       ) 
      )  
     ), 
     [Receipt Balance Calc] >= EARLIER (Payment[Payment Balance Calc]) 
    ) 
) 

最後,創建以下度量來計算接收日期的加權平均:

Payment Receipt Date Avg:= 
SUMX ( 
    Payment, 
    Payment[Payment Amount] * Payment[Payment Receipt Date] 
    /SUM (Payment[Payment Amount]) 
)