in src/converter/data/dataConverter.ts [192:305]
public convert(options: IConverterOptions): IDataRepresentation {
const {
dataView,
columnMapping,
settings,
settingsState,
viewMode,
} = options;
this.amountOfFilledSeries = 0;
const dataRepresentation: IDataRepresentation = this.getDefaultData();
if (!this.isDataViewValid(dataView)) {
return dataRepresentation;
}
const xAxisMetadataColumn: powerbi.DataViewMetadataColumn = this.getColumnByRoleName(
dataView.table.columns,
dateColumn.name,
);
dataRepresentation.columns = this.getColumns(
dataView.table.columns,
[
actualValueColumn,
comparisonValueColumn,
kpiIndicatorValueColumn,
secondComparisonValueColumn,
]);
dataRepresentation.type = this.getTypeOfColumn(xAxisMetadataColumn, settings.powerKPISettings.xAxis.type);
dataRepresentation.metadata = xAxisMetadataColumn;
settings.asOfDate.parseByType(dataRepresentation.type);
if (!this.isDataColumnBasedModel) {
settings.table.forceToUseDefaultSortOrderByName();
}
settings.asOfDate.columnFormat = xAxisMetadataColumn
&& xAxisMetadataColumn.format;
settings.currentValue.columnFormat = dataRepresentation.columns[actualValueColumn.name]
&& dataRepresentation.columns[actualValueColumn.name].format;
settings.comparisonValue.columnFormat = dataRepresentation.columns[comparisonValueColumn.name]
&& dataRepresentation.columns[comparisonValueColumn.name].format;
settings.kpiIndicatorValue.columnFormat = dataRepresentation.columns[kpiIndicatorValueColumn.name]
&& dataRepresentation.columns[kpiIndicatorValueColumn.name].format;
settings.secondComparisonValue.columnFormat = dataRepresentation.columns[secondComparisonValueColumn.name]
&& dataRepresentation.columns[secondComparisonValueColumn.name].format;
if (!dataRepresentation.columns[secondComparisonValueColumn.name]) {
settings.secondComparisonValue.show = false;
settings.secondKPIIndicatorValue.show = false;
}
const defaultUnmappedCategoryName: string = settings.table.getDefaultUnmappedCategoryName();
dataView.table.rows.forEach((row: powerbi.DataViewTableRow, rowIndex: number) => {
const columnValues: IColumnValues = this.getColumnValues(dataView.table.columns, row);
const categorySet: ICategoryHyperlink[] = this.parseCategorySet(columnValues, defaultUnmappedCategoryName);
dataRepresentation.seriesDeep = Math.max(
dataRepresentation.seriesDeep,
categorySet.length,
);
this.applyCategorySet(
categorySet,
dataRepresentation.series,
dataRepresentation.seriesArray,
undefined,
!settings.table.isDefaultSortOrderByName(),
);
const levels: string[] = categorySet.map((categoryHyperlink: ICategoryHyperlink) => {
return categoryHyperlink.name;
});
this.converterStep({
columnMapping,
columnValues,
dataRepresentation,
identities: dataView.table.identity || [],
identityQueryName: dataView.table.columns[0].queryName,
levels,
rowIndex,
rows: dataView.table.rows,
settings,
settingsState,
viewMode,
});
});
this.replaceTheFilledSeriesAtFirstLevel(dataRepresentation, defaultUnmappedCategoryName);
dataRepresentation.seriesArray = this.postProcess(
dataRepresentation.seriesArray,
settings.subtotal,
settings.table.style,
settings,
dataRepresentation.type,
dataRepresentation.y,
);
settings.hideDescriptors(dataRepresentation.seriesDeep);
return dataRepresentation;
}