【问题标题】:DAX moving average not workingDAX移动平均线不起作用
【发布时间】:2018-08-22 09:32:28
【问题描述】:

我尝试在 DAX power bi 中计算移动平均线。我使用不同的代码,例如这个。

    Moving AverageX 7B Days = 
    AVERAGEX (
    DATESINPERIOD( 
    sahkoInput[Date];
    LASTDATE ( sahkoInput[Date]);
    -7;
    DAY
    );
    sahkoInput[price]
    )

所有代码给出相同的结果 - 移动平均 X 7B 天等于“价格”列。出了什么问题以及如何解决?

【问题讨论】:

    标签: powerbi dax moving-average


    【解决方案1】:

    首先,我希望将日期/日历表添加到您的数据模型中。 这可以简单到从您的第一个数据点之前至少 7 天到您期望最后一个数据点结束之后的连续日期列表。 这样做的原因是,DAX 中的日期函数总是在有一个连续日期表可供查看时工作得最好 - 当您的事实表没有特定日期的任何数据时,您可能会得到不可预知的结果。

    添加日期表后,创建关系以将 sahkoInput 表中的日期列链接到日期表中的日期列。

    现在,以下措施应该起作用了:

    移动平均线 X 7B 天 = 计算 ( AVERAGE('sahkoInput'[价格]); DATESINPERIOD('日期表'[日期]; LASTDATE('日期表'[日期]); -7; 天) )

    【讨论】:

    • 变得更清楚了,这就是网上的内容。但我的日期是日期和小时,所以一天有 24 小时和 24 条记录。可以吗?
    【解决方案2】:

    创建一个日期表,这将显着提高性能并增加可读性。您可以使用以下 DAX 来做到这一点:

    Min Date := MIN('sahkoInput'[Date])
    Max Date := MAX('sahkoInput'[Date])
    
    Dates :=
        VAR BaseCalendar =
            CALENDAR ( [Min Date], [Max date] )
        RETURN
            GENERATE (
                BaseCalendar,
                VAR BaseDate = [Date]
                VAR YearDate =
                    YEAR ( BaseDate )
                VAR MonthNumber =
                    MONTH ( BaseDate )
                RETURN
                    ROW (
                        "Day", BaseDate,
                        "Year", YearDate,
                        "Month Number", MonthNumber,
                        "Month", FORMAT ( BaseDate, "mmmm" ),
                        "Year Month", FORMAT ( BaseDate, "mmm yy" )
                    )
            )
    

    然后参考此日期表,您可以使用标准平均值函数创建平均值,如下所示:

    Moving Average 7 Days :=
    CALCULATE (
        AVERAGE ( 'sahkoInput'[Price] );
        KEEPFILTERS ( DATESINPERIOD ( 'Dates'[Date]; MAX ( 'Dates'[Date] ); -7; DAY ) )
    )
    

    我希望这会有所帮助!

    【讨论】:

    • 变得更加清晰,这是在线的。但我的日期是日期和小时,所以一天有 24 小时和 24 条记录。可以吗?
    • 如果你的类型是 datetime vs shortdate,我认为不会有问题,试试看,让我知道它是否有效。
    • 如果我使用这里的代码 community.powerbi.com/t5/Desktop/…,它会给我错误“表 'DateTime' 中的列 'Date' 包含重复值 '1/1/2015',这对于列是不允许的在多对一关系的一侧或用作表主键的列。"
    • 我给你的日期/日历表代码应该可以正常工作。
    • 对不起,我是全新的。那么我应该如何添加日期时间?对于日期,我添加日历(日期(2016;1;1);日期(2016;12;31))。我应该如何用时间标记它? PowerBi 没有时间函数。再次感谢您的谈话。
    猜你喜欢
    • 2017-09-01
    • 2013-12-22
    • 2022-01-26
    • 2011-06-29
    • 2019-04-24
    • 2012-05-24
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多