DAX使用AVERAGE计算滚动平均值

时间:2020-08-23 19:29:55

标签: sql powerbi dax

在PowerBI上设置可视页面时,遇到了一个奇怪的问题要解决。我正在尝试计算表A中带有它们的日期(日期)的togheter的某些值的平均值。

更准确地说,tableA具有日期字段和数字特征(功能),并且同一日期可能有更多值。此外,数据字段指向公共日历表(calendarTable)中的另一个数据字段。我想计算“功能”的平均值(例如,每日平均值)。

为实现这一点,我尝试计算出一个新的度量,如下所示:

Average = CALCULATE(
                       AVERAGE('tableA'[feature]),
                       USERELATIONSHIP('tableA'[date], 'calendarTable'[date]),
                       GROUPBY(date, 'calendarTable'[date])
                       )

我得到的是“累计”平均值而不是每日平均值。换句话说,对于每个日期,要平均的一组值都会增加,包括先前的值。

我也尝试过在SQL中成功执行计算(在DAX中,因为我使用了计算列,所以无需引用tableB):

SELECT 
    CAST(a.Date AS Date) AS Dates, 
    AVG(DATEDIFF(MINUTE, b.Date, a.Date)) AS AVG_DURATION
FROM 
    tableB AS b
INNER JOIN 
    tableA AS a
ON 
    a.ID = b.ID
GROUP BY 
    CAST(a.Date AS Date)
ORDER BY 
    Dates ASC;

有人知道如何在DAX中获得与SQL相同的结果吗?我已经尝试对日期应用一些过滤器,但是没有运气。

谢谢。

1 个答案:

答案 0 :(得分:1)

尽管您的问题有些困惑,但以下说明可以帮助您达到要求。

如果我理解正确,那么您正在寻找“功能”列的每日AVEGARE。您可以使用带有的GROUP BY功能的新自定义表来执行此操作。单击新表并使用下面的代码,并检查是否获得预期的输出-

group_by_date = 

GROUPBY (  
    your_table_name,
    your_table_name[date_column_name].[Date],
    "Average Feature", AVERAGEX(CURRENTGROUP(), your_table_name[feature])
)

现在,如果您希望DAX在每行中计算相同(但多余)的结果,则可以使用以下代码-

date_wise_average = 

VAR current_row_date = MIN(your_table_name[date_column_name].[Date])

RETURN
CALCULATE(
    AVERAGE(your_table_name[feature]),
    FILTER(
        ALL(your_table_name),
        your_table_name[date_column_name].[Date] = current_row_date 
    )
)