复杂的Tallies / Aggregation dc.js

时间:2016-04-25 17:50:41

标签: d3.js dc.js crossfilter

我正在使用仪表板来帮助公司分析多个方面的成本。

我有 主要在<{3}}

进行工作

有些事我似乎无法工作。

显示承包商的独特采购订单数量:

我已经能够在数据表中准确地显示这一点,你可以在小提琴中看到,但由于某种原因,我在rowChart上尝试的任何内容都不会显示总PO的行,而不是唯一的PO(这是扁平化的数据,每个行项目都是数据表中的一行,因此一个PO可能有很多行。 FOR EXAMPLE ,Bill只提交了一个PO,但它有两行。图表显示(2)比尔)。

  contractorChart
        .dimension(contractors)
        .group(contractorGroup)

  contractorChart
        .dimension(uniqueDim)
        .group(contractorGroup)

显示PO的总额

在主要工作的数据表上,我希望总列显示该PO的所有行的汇总总数,而不仅仅是第一个匹配。在我的uniqueDim函数中,它只能通过聚合唯一的PO编号而不是整个PO对象来工作。我不确定如何汇总总数。

2 个答案:

答案 0 :(得分:2)

在rowCharts中,显示的键和值仅由组确定。维度仅用于过滤,因此切换维度不应导致显示值的任何更改。您需要让您的组跟踪唯一的PO而不是维度。这有点难以正确有效地执行,但我建议使用Reductio exception aggregation,在这种情况下,只需在图表上定义Reductio reducer和值访问器:

  reductio()
    .exception(function(d) { return d.po; })
    .exceptionCount(true)(contractorGroup)      

  contractorChart
        .width(800)
        .height(200)
        .margins({ top: 20, left: 10, right: 10, bottom: 20 })
        .dimension(contractors)
        .group(contractorGroup)
        .ordinalColors(['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#dadaeb'])
        .valueAccessor(function(d) { return d.value.exceptionCount; })
        .label(function (d) {
            return d.key;
        })
        .title(function (d) {
            return d.value;
        })
        .elasticX(true)
        .xAxis().ticks(4);

就数据表而言,您可以根据dc.js常见问题解答中的建议创建“假维度”,但实际上您需要一个具有聚合值的虚假维度。因此,将其建立在一个群体上:

var uniqueDim = {
    bottom: function (num) {
      var pos = poDimension.top(Infinity);
      // Uses top because the version of Crossfilter being used
      // doesn't support group.bottom.
      return poGroup.top(num)
        .filter(function(d) { return d.value > 0; })
        .map(function(d) {
            var currPo = pos.filter(function(g) { return g.po === d.key; })[0];
          return {
            po: d.key,
            total: d.value,
            contractor: currPo.contractor,
            complexity: currPo.complexity
          };
      });
    }
  };

两者的工作示例:https://jsfiddle.net/33228p1d/2/

答案 1 :(得分:-2)

请尝试以下代码:

FBSDKLoginManager().logInWithReadPermissions(["email"], fromViewController: self) { (facebookResult: FBSDKLoginManagerLoginResult!, facebookError: NSError!) in
  if let token = facebookResult.token.tokenString {
    print(token)
  }
}

次要添加,例如:

contractorChart
    .width(800)
    .height(200)
    .margins({ top: 20, left: 10, right: 10, bottom: 20 })
    .dimension(contractors)
    .group(contractorGroup)
    .ordinalColors(['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#dadaeb'])
    .label(function (d) {
        return d.key;
    })
    .title(function (d) {
        return d.value;
    })
    .elasticX(true)
    .xAxis().ticks(4);