【问题标题】:How to export Mixpanel events, segmented by time?如何导出按时间分段的 Mixpanel 事件?
【发布时间】:2014-06-06 02:42:17
【问题描述】:

除了“从和至今”之外,我想进一步按时间细分来自Mixpanel export() API method 的事件信息(事件包含一个“时间”属性,表示为一个unix 时间戳);但是,例如,当我指定“where”参数时,我得到一个空响应(见下文)。

"where" 参数 = 'properties["time"] >= 1401642000'

我肯定有与此相符的活动。这应该工作吗?

没有“位置”参数:

args = {'from_date': '2014-06-01', 'api_key': 'REDACTED', 'sig': 'REDACTED', 'to_date': '2014-06-04', 'expire': 1402424767}

response = [我收到预期的事件]


'where' 参数 = 'properties["time"] >= 1401642000'

args = {'from_date': '2014-06-01', 'expire': 1402424767, 'sig': 'REDACTED', 'to_date': '2014-06-04', 'api_key': 'REDACTED ', 'where': 'properties["time"] >= 1401642000'}

response = [HTTP请求成功,但响应为空]


与上述相同,只是将时间值放在引号中:

'where' 参数 = 'properties["time"] >= "1401642000"'

args = {'from_date': '2014-06-01', 'expire': 1402424767, 'sig': 'REDACTED', 'to_date': '2014-06-04', 'api_key': 'REDACTED ', 'where': 'properties["time"] >= "1401642000"'}

response = [HTTP请求成功,但响应为空]


尝试将 properties["time"] 转换为数字:

'where' 参数 = 'number(properties["time"]) >= 1401642000'

args = {'from_date': '2014-06-01', 'expire': 1402424767, 'sig': 'REDACTED', 'to_date': '2014-06-04', 'api_key': 'REDACTED ', 'where': 'number(properties["time"]) >= 1401642000'}

response = [HTTP请求成功,但响应为空]

【问题讨论】:

    标签: mixpanel


    【解决方案1】:

    在联系他们的客户支持之前,我在此 API 上遇到了同样的问题并尝试了各种解决方案。他们的回应如下:

    “不幸的是,我们无法通过导出 API 选择性地导出特定时间的事件。这主要是因为时间不是事件向 API 公开的属性之一。只有在导出 API 中公开的属性是与您的事件一起发送并实际在 UI 中公开的属性。”

    不过,他继续指出他们更新的 JQL 系统 https://mixpanel.com/help/reference/jql 显然可以过滤时间等内容。

    希望对您有所帮助。

    【讨论】:

    • 这不好。这个2018年的朋友有什么更新吗?我已经能够从 API 中获取时间并使用时间尝试了一堆过滤器,但无法让它工作
    【解决方案2】:

    您可以使用类型转换函数 datetime() 将目标时间戳转换为 datetime 类型,然后像上面那样进行比较,例如"where" param = 'properties["time"] >= datetime(1401642000)'.

    您还可以在括号内进行时间间隔算术,以在给定的起点或终点建立周期,例如"where" param = 'properties["time"] >= datetime(1401642000 - 60*60*24)' 用于“时间”属性发生在目标日期时间前一个多小时的事件。

    【讨论】:

    • 我正在尝试这个,但我仍然得到一个空集。请问您是从哪里得知这种类型转换的?在他们的文档中找不到它。
    【解决方案3】:

    用不同的方法解决同样的问题:首先将数据导出到 MYSQL 或任何其他数据库中。 我曾经有自己的脚本来执行此操作,但随着数据量越来越大,我开始看到自定义脚本的局限性(重复事件、长/繁重的 http 请求……)。

    我现在正在使用Mixpaneldb,它非常适合我的需求。

    Treasuredata 显然也可以这样做,但它们不是自助式的。

    【讨论】:

      【解决方案4】:

      我能够使用 Mixpanel 的 JQL API 端点解决这个问题。正如其他答案中提到的,其他 Mixpanel API 端点似乎忽略了 where 子句中的“时间”参数。 (这令人沮丧和困惑!)

      以下是我在 Python 中的解决方案,其中我使用了mixpanel-jql 库来简化操作。它会在万圣节(格林威治标准时间 2018 年 10 月 31 日)中午之后获取“聊天”事件。值得注意的是,from_date、to_date和e.time比较需要全部重叠才能真正获取事件。

      now = datetime(2018, 10, 31)
      from_timestamp_epoch_ms = 1540987200000 # Noon, Halloween 2018, GMT
      
      query = JQL(
                  MIXPANEL_SECRET,
                  events=Events({
                      # 'event_selectors' can be left out to grab all events
                      'event_selectors': [{'event': 'Chat'}], 
                      'from_date': datetime(now.year, now.month, now.day),
                      'to_date': datetime(now.year, now.month, now.day)
                  })
              ).filter('e.time > {}'.format(from_timestamp_epoch_ms))
      
      for row_dict in query.send():
           # Work your magic
      

      【讨论】:

        猜你喜欢
        • 2023-01-28
        • 2022-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多