2017-06-22 238 views
3

我試圖計算最近6個月的STDEVX.P(不包括當前月份;所以在2017年5月,我想STDEVX.P對於2016年11月至2017年4月期間),以便進一步計算銷售訂單的差異。Power BI:計算6個月期間的STDEVX.P

銷售數據由日常交易組成,因此它包含交易日期:iContractsChargebacks[TransactionDate]和銷售單位:iContractsChargebacks[ChargebackUnits],但如果在給定期間內沒有銷售,那麼該月不會有任何數據。

因此,例如,在7月1日,銷售爲過去6個月有以下幾條:

Jan 100 
Feb 125 
Apr 140 
May 125 
Jun 130 

三月丟失,因爲沒有銷售。所以,當我計算數據集上的STDEVX.P時,它計算了5個週期,實際上有6個,只有一個恰好爲零。

在一天結束時,我需要計算當前六個月期間的STDEVX.P。如果拉動月度銷售數字時,它只會返回3個時期(月),那麼它需要假設其他3個時期的值爲零。

我想到了手工計算標準差,而不是使用DAX STDEVX.P公式,發現這2個鏈接就如何做一個參考,第一個是最接近我的需要:

https://community.powerbi.com/t5/Desktop/Problem-with-STDEV/td-p/19731

Calculating the standard deviation from columns of values and frequencies in Power BI ...

我試圖讓它去,但仍然沒有得到正確的計算。我的代碼是:

STDEVX2 = 
    var Averageprice=[6M Sales] 
    var months=6 
    return 
    SQRT(
    DIVIDE(SUMX(
    FILTER(ALL(DimDate), 
    DimDate[Month ID]<=(MAX(DimDate[Month ID])-1) && 
    DimDate[Month ID]>=(MAX(DimDate[Month ID])-6) 
    ), 
    (iContractsChargebacks[SumOfOrderQuantity]-Averageprice)^2), 
     months 
    ) 
) 

*注:除了在代碼中使用日期參數,我創建的日期表中計算列給出了每月一個唯一的ID,讓我更容易。

回答

2

你的問題肯定會更容易回答,更多關於你的模型的解釋。例如。你如何定義[SumOfOrderQuantity]和[6M Sales],因爲錯誤肯定會影響最終結果。此外,知道你看到的結果是什麼,而你期望的結果會有幫助(使用示例數據)。

但是,我的猜測是,您的DimDate表是一個標準的日期表(每個日期有一行),但您需要按月標準差。

公式中的FILTER語句將日期範圍限定爲前6個整月,但每個日期仍然有一行。

Table = FILTER(ALL(DimDate), 
DimDate[MonthID]<=(MAX(DimDate[MonthID])-1) && 
DimDate[MonthID]>=(MAX(DimDate[MonthID])-6)) 

假設你已經銷售超過一天一個:你可以通過進入數據視圖,建模下選擇功能區上的「新表」,並把您的篩選語句在電力BI證實了這一點給定月份,按天而不是按月計算差異會導致混亂。

我會建議嘗試:

Table = FILTER(SUMMARIZE(ALL(DimDate),[MonthID]), 
DimDate[MonthID]<=(MAX(DimDate[MonthID])-1) && 
DimDate[MonthID]>=(MAX(DimDate[MonthID])-6)) 

額外的總結聲明意味着你只能得到一個行每個MonthID,而不是1行每個日期。如果您的[6M銷售額]是6個月內的月平均值,[SumOfOrderQuantity]是每個月的月總和,那麼您應該設置計算方差,平方除以6和平方根。

如果您需要進一步排除故障,請記住您可以在MonthID,SumOfOrderQuantity和[6M Sales]的畫布上放置一張表格,並將計算每個階段期望的數字與您所看到的數字進行比較。

希望這會有所幫助。

+0

謝謝Lenard,但我在計算本身有問題。是否可以創建一個表格來計算過濾器已識別的6個月中每個SKU的銷售額總和,並且如果其中一個期間沒有銷售額,那麼它應該爲0? – Epicleo

+0

DimDate表如上所述。 Sales表是日常交易,它包含交易日期:iContractsChargebacks [TransactionDate],特定的SKU:iContractsChargebacks [SKU]以及爲該SKU銷售的單位:iContractsChargebacks [ChargebackUnits] 我想創建一個表,將iContractsChargebacks [ ChargebackUnits]由SKU和月份。如果在特定的月份,某SKU沒有任何銷售,那麼我希望該月的數據爲0,即iContractsChargebacks [ChargebackUnits] 然後,我可以在計算STDEV.P的新表中創建度量 – Epicleo

+0

也許嘗試不使用SKU,並查看是否可以使其工作(因爲我沒有在我的答案中說明SKU)。我想你可以很容易地將SKU添加到SUMMARIZE語句中,但我首先會看到是否可以在沒有SKU的情況下使用SKU。一旦你有了這個,然後嘗試添加SKU。 – Leonard