在crossfilter

时间:2018-01-16 10:12:30

标签: angular typescript crossfilter

我遇到一些麻烦,将我的一些数据用于crossfilter。 让我们首先解释一下我想做什么;

我有两个不同的数据库表:

  1. 传感器(sensor_id,EUI,经度,纬度,location_id)
  2. 影响(impact_id,EUI,GyroX,GyroY,GyroZ,AccelX,AccelY,AccelZ和时间戳)
  3. 传感器表正在保存每个传感器的信息。 影响表中包含每个传感器影响的信息。

    现在我想创建交互式图形,我可以在其中筛选所有数据。因此,例如在选择location_id = 1时。我希望看到所有图表都更改其数据以显示与位置1相关的所有数据。 (所以在这种情况下,我希望看到与位置1相关的影响和传感器)

    首先,我在我的数据服务中编写了一个函数getSensorDataWithImpacts()。这样我就可以得到一个包含传感器的阵列,这些传感器都会受到影响。

    对象[0]如下所示:

    [
     EUI: 123,
     location_id: 1,
     latitude: 1.285101,
     longitude: 103.769902,
     impacts: {
        Count: 2,
        Items: [
         0:
          EUI: {S: "123"},
          timestamp: {N: "1512028997"}
          accelX: {N: -10}
          accelY: {N:  20}
          accelZ: {N: -30}
          gyroX: {N: -40}
          gyroY: {N:  50}
          gyroZ: {N:  60}
          impactScore: {N:  2000},
         1:
          EUI: {S: "123"},
          timestamp: {N: "1512028900"}
          accelX: {N: -23}
          accelY: {N:  56}
          accelZ: {N: -12}
          gyroX: {N: -43}
          gyroY: {N:  6}
          gyroZ: {N:  12}
          impactScore: {N:  3000},
       ],
       ScannedCount: 2,
     }
    

    收到此对象后,我创建了一个crossfilter。 在此之后,我可以通过执行以下操作创建多个维度:

    let locationDim = ndx.dimension(function (d) {
          return d.location_id;
        });
    let locationGroup = locationDim.group();
    

    我为EUI做了同样的事情:

     let sensorsDim = ndx.dimension(function (d) {
          return d.EUI;
        });
     let sensorsGroup = sensorsDim.group();
    

    对于影响:

     let impactDim = ndx.dimension(function (d) {
          for(let a = 0; a<d.impacts.Items.length; a++){
            return d3.time.minute(new Date(d.impacts.Items[a].timestamp['N'] * 1000));
          }
        });
    
        let impactGroup = impactDim.group()
          .reduceSum(function (d) {
            for(let a = 0; a<d.impacts.Count; a++){
              return d.impacts.Items[a].impactScore['N'] / 1000;
            }
          });
    

    通过这些尺寸,我可以成功过滤所有数据。我看到不同的位置,不同的EUI号码,我看到每个传感器的1个影响。这不是预期的。我希望收到每个传感器的所有影响。

    Different graphs with 1 impact for each sensor

    我不知道我做错了什么 真的很感激任何帮助!

0 个答案:

没有答案