monostop
monostop

Reputation: 569

Control what elements get shown in dc.js datatable

I'm stuck on a seamingly easy problem with dc.js and crossfilter.

I have a datatable on a dimension and it shows my data correctly. The problem is that I want to show the 'worst' data items but the datatable picks the 'best' items in the filters.

The following is a scetch of the current table code.

var alertnessDim = ndx.dimension(function(d) {return d.alertness1;});

dc.dataTable(".dc-data-table")
    .dimension(alertness1)
    .group(function (d) {
        return d.DATE.getYear();
    })
    .columns([
        function (d) {
            return d.DATE;
        },
        function (d) {
            return d['FLEET'];
        },
        function (d) {
            return d.alertness1;
        }

    ])
    .sortBy(function (d) {
        return d.alertness1;
    })
    .order(d3.ascending); 

This connects to the crossfilter properly and it sorts the items in the correct order, but the 25 items it is showing are the ones with the highest alertness values, not the lowest.

Anyone have any ideas on how to solve this, preferbly without creating another dimension?

Upvotes: 2

Views: 1290

Answers (2)

nico
nico

Reputation: 196

One quick way to achieve descending sort on a specific column, is to sort by its negative value: .sortBy(function(d){ return -d.ALARM_OCCURRENCE; }); // show highest alarm count first

Upvotes: 0

Gordon
Gordon

Reputation: 20140

You are right to be confused here. You would think this would be a supported use case but it is not, as far as I can tell. The data table uses dimension.top so it is always going to take the highest values.

So I don't think there is a way around using a special dimension with opposite ordering/keys. For the other charts you could use group.order in order (heh) to get it to return the lowest values. But the data table doesn't use a group because it's not reducing its values.

It's confusing that the data table also has an order parameter which doesn't help here.

Hope that is acceptable. Otherwise I think you'd have to poke around in the code. Pull Requests always welcome! (preferably with tests)

Upvotes: 2

Related Questions