如何使用Application Insights Analytics计算DAU / MAU?

时间:2017-03-03 21:47:27

标签: azure-application-insights ms-app-analytics

假设我有用户的定义,我可以计算所有每日用户和所有每月用户的总和。

customEvents
| where timestamp > ago(30d)
| where <condition>
| summarize by <user>, bin(timestamp, 1d)
| summarize count() by bin(timestamp, 1d)
| summarize DAU=sum(count_)

customEvents
| where timestamp > ago(30d)
| where <condition>
| summarize by <user>
| MAU=30*count

问题是如何计算DAU / MAU?有些人加入魔术?

3 个答案:

答案 0 :(得分:3)

修改

现在有一种更简单的calculate usage metrics方法 - &#34;评估activity_engagement&#34;:

union *
| where timestamp > ago(90d)
| evaluate activity_engagement(user_Id, timestamp, 1d, 28d)
| project timestamp, Dau_Mau=activity_ratio*100 
| render timechart

-------

DAU在分析中非常直接 - 只需使用dcount。

当然,棘手的部分是计算28天的滚动MAU。

我写了一篇文章详细说明了几周后如何计算stickiness in app analytics - 诀窍是你必须使用hll()和hll_merge()来计算每天的中间dcount结果,然后合并他们在一起。

最终结果如下:

let start=ago(60d);
let period=1d;
let RollingDcount = (rolling:timespan)
{
pageViews
| where timestamp > start
| summarize hll(user_Id) by bin(timestamp, period)
| extend periodKey = range(bin(timestamp, period), timestamp+rolling, period)
| mvexpand periodKey
| summarize rollingUsers = dcount_hll(hll_merge(hll_user_Id)) by todatetime(periodKey)
};
RollingDcount(28d)
| join RollingDcount(0d) on periodKey
| where periodKey < now() and periodKey > start + 28d
| project Stickiness = rollingUsers1 *1.0/rollingUsers, periodKey
| render timechart

答案 1 :(得分:0)

看起来这个查询可以做到:

let query = customEvents
| where timestamp > datetime("2017-02-01T00:00:00Z") and timestamp < datetime("2017-03-01T00:00:00Z") 
| where **<optional condition>**;
let DAU = query
| summarize by **<user>**, bin(timestamp, 1d)
| summarize count() by bin(timestamp, 1d)
| summarize DAU=sum(count_), _id=1;
let MAU = query
| summarize by **<user>**
| summarize MAU=count(), _id=1;
DAU | join (MAU) on _id
| project ["DAU/MAU"] = todouble(DAU)/30/MAU*100, ["Sum DAU"] = DAU, ["MAU"] = MAU

有关过去几个月如何计算的建议吗?

答案 2 :(得分:0)

Zaki,您的查询计算MAU / DAU的时间点。如果您需要滚动MAU,可以使用Asaf建议的HLL方法。或者以下是我首选的滚动MAU,它使用make-series和fir()。您可以将它using this link放到分析演示门户上。 这两种方法需要一些时间来适应......而且从我看到的两种方法都是快速的。 make系列和fir()方法的一个优点是它100%准确,而HLL方法是启发式的并且具有一定程度的误差。另一个好处是,配置用户参与度非常容易,这将使用户有资格获得计数。

let endtime=endofday(datetime(2017-03-01T00:00:00Z));
let window=60d;
let starttime=endtime-window;
let interval=1d;
let user_bins_to_analyze=28;
let moving_sum_filter=toscalar(range x from 1 to user_bins_to_analyze step 1 | extend v=1 | summarize makelist(v)); 
let min_activity=1;
customEvents
| where timestamp > starttime  
| where customDimensions["sourceapp"]=="ai-loganalyticsui-prod"
| where (name == "Checkout")  
| where user_AuthenticatedId <> ""
| make-series UserClicks=count() default=0 on timestamp in range(starttime, endtime-1s, interval) by user_AuthenticatedId
// create a new column containing a sliding sum. Passing 'false' as the last parameter to fir() prevents normalization of the calculation by the size of the window.
| extend RollingUserClicks=fir(UserClicks, moving_sum_filter, false)
| project User_AuthenticatedId=user_AuthenticatedId , RollingUserClicksByDay=zip(timestamp, RollingUserClicks)
| mvexpand RollingUserClicksByDay
| extend Timestamp=todatetime(RollingUserClicksByDay[0])
| extend RollingActiveUsersByDay=iff(toint(RollingUserClicksByDay[1]) >= min_activity, 1, 0)
| summarize sum(RollingActiveUsersByDay) by Timestamp
| where Timestamp > starttime + 28d
| render timechart