如何在 PowerBI 中使用 DAX 计算平均每周活跃访客

How to calculate average weekly active visitor using DAX in PowerBI

*请注意,Visit 1 表示当天的第一次访问,而 Visit 2 表示当天的第二次访问。

大家好,

我正在尝试使用 DAX 计算 PowerBI 中的平均每周活跃访问者。

首先,我需要计算一周(周一至周日)有多少唯一身份访问者访问了商店。根据日历,5/10/2022 - 5/13/2022 将归入一周,而 5/16/2022 - 5/18/2022 将归入另一周。因此,从 5/10/2022 - 5/13/2022 开始的那一周,有 9 个唯一身份访问者,从 5/16/2022 - 5/18/2022 开始的那一周,有 3 个唯一身份访问者。

一旦我找到了相应周的唯一身份访问者,我就可以通过以下方式获得平均每周活跃访问者:

(9+3)/2 = 6 visitors

因此,屏幕截图中示例的答案将是 6 个访问者。输出将用于卡片可视化。

正在努力寻找最佳方法,如有任何帮助或建议,我们将不胜感激!

示例数据:

https://docs.google.com/spreadsheets/d/10TsJUy-Lkdpb9Eeh5itx-XE59hytC_i5I_6UeLLHS84/edit#gid=0

VAR days = 
        SUMMARIZE(
            'Sheet1'
            ,'Sheet1'[Date]
        )
VAR Calend=
        ADDCOLUMNS(
            days
            ,"week",WEEKNUM('Sheet1'[Date])
        )
VAR weeks= 
        SUMMARIZE(
            Calend
            ,[week]
            ,"qty",COUNTROWS(VALUES('Sheet1'[Visitor ID]))
        )         
RETURN
    AVERAGEX(
        weeks
        ,[qty]
    )

我对 DAX(或 Power BI)了解不够,无法设计仅 DAX 的解决方案。

但是,您可以使用 Power Query M 代码(主页 => 在 Power BI 中转换)计算每周独立访客,然后创建一个度量以在卡片上显示每周平均访客。

Power Query M代码
编辑:从计算 weeknumber 更改为计算 start of week 以避免日期跨度超过一年时出现问题,根据 @weizer[ 下方的评论=34=]

let

//change next line to whatever your actual source is
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],

//Don't need this column for the output
    #"Removed Columns" = Table.RemoveColumns(Source,{"Visit"}),

//Set data types
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Visitor ID", Int64.Type}, {"Date", type date}}),

//add custom column referenced to "StartOfWeek" so we can group by week
    #"Added Custom" = Table.AddColumn(#"Changed Type", "WeekNumber", each Date.StartOfWeek([Date],Day.Monday), type date),

//Group by week number
//  Then aggregate by week range and distinct visitor count
    #"Grouped Rows" = Table.Group(#"Added Custom", {"WeekNumber"}, {
        {"Date Range", each Date.ToText(List.Min([Date])) & " - " & Date.ToText(List.Max([Date])), type text},
        {"Distinct Visitors", each List.Count(List.Distinct([Visitor ID])), Int64.Type}
        }),

//Remove unneeded Weeknumber column
    #"Removed Columns1" = Table.RemoveColumns(#"Grouped Rows",{"WeekNumber"})
in
    #"Removed Columns1"

卡的度量将只是一个简单的平均函数:

Distinct Visitors per Week = Average(yourTableName[Distinct Visitors])