首页 文章

Power BI:计算STDEVX.P超过6个月

提问于
浏览
3

我正在尝试计算最近的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

三月失踪,因为没有销售 . 因此,当我在数据集上计算STDEVX.P时,它会在5个周期内计算它,而实际上有6个周期,只有一个恰好为零 .

在一天结束时,我需要计算当前六个月期间的STDEVX.P . 如果在提取月度销售数字时,它仅返回3个周期(月),则需要假设其他3个期间为零值 .

我想过手动计算标准偏差,而不是使用DAX STDEVX.P公式,发现这两个链接作为参考,如何这样做,第一个最接近我的需要:

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,使我更容易 .

1 回答

  • 2

    通过对模型的更多解释,您的问题肯定会更容易回答 . 例如 . 如何定义[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))
    

    假设您在某个月内有超过一天的销售额,那么按天计算方差而不是按月计算方差会使事情变得混乱 .

    我建议尝试的内容:

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

    附加的SUMMARIZE语句意味着每个MonthID只能获得一行,而不是每个日期获得1行 . 如果您的[6M销售额]是所有6个月的月平均值,并且[SumOfOrderQuantity]是每月的月度总和,那么您应该设置为计算方差,平方,除以6和平方根 .

    如果您需要进行进一步的故障排除,请记住您可以使用MonthID,SumOfOrderQuantity和[6M Sales]在画布上放置一个表格,并将计算的每个阶段所期望的数字与您看到的数字进行比较 .

    希望这可以帮助 .

相关问题