Визуализация нескольких наборов данных - PullRequest
0 голосов
/ 03 апреля 2019

Попытка подключить визуализатор Keen javascript к двум наборам данных, что приводит к ошибкам во всем, что я пробовал.

Пробовал использовать мультианализ для получения ответа, это работает, но не включается в график.

https://keen.io/docs/api/#multi-analysis

Также пробовал запускать отдельные запросы и использовать client.run в клиенте для анализа. Каждый запрос выполняется нормально отдельно, но при совместном выполнении выдает ошибку в диаграмме относительно timeframe.start.

https://keen.io/docs/visualize/common-chart-examples/#area-step-chart-with-multiple-results

Инструменты:

"keen-analysis": "^3.4.0",
"keen-dataviz": "^3.5.3",
"keen-tracking": "^4.3.1",

Настройка диаграммы

const matchBreakdown = new keenDataviz({
  container: "#match-breakdown",
  type: "area-step",
  title: "Match Breakdown (last 2 months)",
  showLoadingSpinner: true
});

Попытка мульти-анализа:

client
  .query("multi_analysis", {
    event_collection: "kitchen.matches",
    analyses: {
      "total_matches": {
        analysis_type: "count",
        filters: [
          {"operator":"eq","property_name":"environment","property_value":"production"}
        ]
      },
      "bad_matches": {
        analysis_type: "count",
        filters: [
          {"operator":"eq","property_name":"environment","property_value":"production"},
          {"operator":"eq","property_name":"match_count","property_value":0}
        ]
      }
    },
    timezone: "US/Mountain",
    group_by: ["date"],
    order_by: ["date"],
    timeframe: "this_60_days"
  })
  .then(res => {
    matchBreakdown.render(res);
  })
  .catch(err => {
    // Source data is missing a component at (0,1)!
    matchBreakdown.message(err.message);
  });

Попытка множественных запросов:

const allMatches = client
  .query("count", {
    event_collection: "kitchen.matches",
    filters: [{"operator":"eq","property_name":"environment","property_value":"production"}],
    group_by: ["date"],
    order_by: ["date"],
    timezone: "US/Mountain",
    timeframe: "this_2_months"
  });

const badMatches = client
  .query("count", {
    event_collection: "kitchen.matches",
    filters: [
      {"operator":"eq","property_name":"environment","property_value":"production"},
      {"operator":"eq","property_name":"match_count","property_value":0}
    ],
    group_by: ["date"],
    order_by: ["date"],
    timezone: "US/Mountain",
    timeframe: "this_2_months"
  });

client
  .run([allMatches, badMatches])
  .then(res => {
    matchBreakdown.render(res);
  })
  .catch(error => {
    // Cannot read property 'start' of undefined
    matchBreakdown.message(error.message);
  });

Обратите внимание, что это работает:

client.run([badMatches]).then(res => {
  matchBreakdown.render(res);
});

// Or this

client.run([allMatches]).then(res => {
  matchBreakdown.render(res);
});

Примеры не дают дополнительной информации о том, как форматировать данные ответов, похоже, что они должны просто работать.

1 Ответ

2 голосов
/ 04 апреля 2019

Я проверял вашу проблему и, к сожалению, filters не работает для многоанализа, также вы не можете использовать group_by при выполнении нескольких запросов .run([allMatches, badMatches])

Я подготовил пример с другим решением, основанным на этом: https://jsfiddle.net/a2fvmk1h/

Вместо group_by Вы можете использовать interval для получения похожих результатов.Вот пример для Вас: https://jsfiddle.net/dariuszlacheta/h0x6mvan/14/ Тот факт, что вы используете те же запросы count для одного и того же event collection, вызывает проблемы с именованием результатов, поэтому вы должны сделать один трюк.Вам нужно изменить хотя бы один «анализ_типа» для результатов, потому что в противном случае данные будут перезаписаны: res[1].query.analysis_type = 'games';

У меня нет доступа к Вашим данным, но я думаю, что это будет выглядеть с вашим кодом:

const allMatches = client
  .query("count", {
    event_collection: "kitchen.matches",
    filters: [
      {
         "operator":"eq",
         "property_name":"environment",
         "property_value":"production"
      }
    ],
    interval: "daily"
    timezone: "US/Mountain",
    timeframe: "this_2_months"
  });

const badMatches = client
  .query("count", {
    event_collection: "kitchen.matches",
    filters: [
      {
         "operator":"eq",
         "property_name":"environment",
         "property_value":"production"
      },
      {
         "operator":"eq",
         "property_name":"match_count",
         "property_value":0
      }
    ],
    interval: "daily"
    timezone: "US/Mountain",
    timeframe: "this_2_months"
  });

client
  .run([allMatches, badMatches])
  .then(res => {
    res[1].query.analysis_type = 'badMatches';
    matchBreakdown.render(res);
  })
  .catch(error => {
    // Cannot read property 'start' of undefined
    matchBreakdown.message(error.message);
  });

Я попытаюсь решить эту проблему с помощью перезаписи имен запросов, когда два или более одинаковых запросов используются в .run([])

...