Epi*_*leo 5 standard-deviation dax powerbi
我正在尝试计算最近 6 个月的 STDEVX.P(不包括当月;所以在 2017 年 5 月,我想计算 2016 年 11 月至 2017 年 4 月期间的 STDEVX.P)按产品销售,以便进一步计算销售订单的变化。
销售数据由每日交易组成,因此它包含交易日期: iContractsChargebacks[TransactionDate]和售出单位数:iContractsChargebacks[ChargebackUnits],但如果在给定时间段内没有销售,则该月将没有数据。
因此,例如,在 7 月 1 日,过去 6 个月的销售额如下:
Jan 100
Feb 125
Apr 140
May 125
Jun 130
Run Code Online (Sandbox Code Playgroud)
由于没有销售,March 没有出现。所以,当我在数据集上计算 STDEVX.P 时,它计算了 5 个周期,而实际上有 6 个,只有一个恰好为零。
归根结底,我需要计算当前六个月期间的 STDEVX.P。如果在拉取月销售数字时,它只返回 3 个期间(月),则需要假设其他 3 个期间为零值。
我考虑过手动计算标准偏差而不是使用 DAX STDEVX.P 公式,并发现这 2 个链接作为如何执行此操作的参考,第一个最接近我的需要:
https://community.powerbi.com/t5/Desktop/Problem-with-STDEV/td-p/19731
我试图试一试,但仍然没有得到正确的计算。我的代码是:
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
)
)
Run Code Online (Sandbox Code Playgroud)
*注意:我没有在代码中使用日期参数,而是在日期表中创建了一个计算列,为每个月提供一个唯一的 ID,这对我来说更容易。
通过有关您的模型的更多解释,您的问题肯定会更容易回答。例如,您如何定义 [SumOfOrderQuantity] 和 [6M Sales],因为那里的错误肯定会影响最终结果。另外,了解您看到的结果与您期望的结果会有所帮助(使用示例数据)。
然而,我的猜测是,您的 DimDate 表是一个标准日期表(每个日期一行),但您想要按月的标准偏差。
公式中的 FILTER 语句将日期范围正确限制为前 6 个完整月份,但每个日期仍包含一行。您可以在 Power BI 中确认这一点,方法是进入数据视图,选择功能区“建模”下的“新表”,然后将 FILTER 语句放入:
Table = FILTER(ALL(DimDate),
DimDate[MonthID]<=(MAX(DimDate[MonthID])-1) &&
DimDate[MonthID]>=(MAX(DimDate[MonthID])-6))
Run Code Online (Sandbox Code Playgroud)
假设给定月份的销售额超过一天,按天而不是按月计算方差会让事情变得混乱。
我建议尝试什么:
Table = FILTER(SUMMARIZE(ALL(DimDate),[MonthID]),
DimDate[MonthID]<=(MAX(DimDate[MonthID])-1) &&
DimDate[MonthID]>=(MAX(DimDate[MonthID])-6))
Run Code Online (Sandbox Code Playgroud)
附加的 SUMMARIZE 语句意味着您只能为每个 MonthID 获取一行,而不是为每个日期获取 1 行。如果您的 [6M Sales] 是所有 6 个月的月平均值,而 [SumOfOrderQuantity] 是每个月的月总和,那么您应该开始计算方差、平方、除以 6 和开方。
如果您需要进行进一步的故障排除,请记住您可以在画布上放置一个包含 MonthID、SumOfOrderQuantity 和 [6M Sales] 的表格,并将计算每个阶段的预期数字与您看到的数字进行比较。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |