compassql
Version:
CompassQL visualization query language
43 lines (39 loc) • 1.24 kB
text/typescript
import {Dict} from '../../util';
import {Scorer} from './base';
import {SpecQueryModel} from '../../model';
import {Schema} from '../../schema';
import {QueryConfig} from '../../config';
import {FeatureScore} from '../ranking';
import {EncodingQuery, isFieldQuery, isAutoCountQuery} from '../../query/encoding';
/**
* Penalize if facet channels are the only dimensions
*/
export class DimensionScorer extends Scorer {
constructor() {
super('Dimension');
}
protected initScore() {
return {
row: -2,
column: -2,
color: 0,
opacity: 0,
size: 0,
shape: 0
} as Dict<number>;
}
public getScore(specM: SpecQueryModel, _: Schema, __: QueryConfig): FeatureScore[] {
if (specM.isAggregate()) {
specM.getEncodings().reduce((maxFScore, encQ: EncodingQuery) => {
if (isAutoCountQuery(encQ) || (isFieldQuery(encQ) && !encQ.aggregate)) { // isDimension
const featureScore = this.getFeatureScore(encQ.channel + '');
if (featureScore && featureScore.score > maxFScore.score) {
return featureScore;
}
}
return maxFScore;
}, {type: 'Dimension', feature: 'No Dimension', score: -5});
}
return [];
}
}