in src/columnChart/baseColumnChart.ts [345:487]
public static converter(
visualHost: IVisualHost,
categorical: DataViewCategorical,
colors: IColorPalette,
is100PercentStacked: boolean = false,
isScalar: boolean = false,
supportsOverflow: boolean = false,
dataViewMetadata: DataViewMetadata = null,
localizationManager: ILocalizationManager,
chartType?: MekkoVisualChartType): MekkoColumnChartData {
const xAxisCardProperties: powerbi.DataViewObject = dataViewUtils.getCategoryAxisProperties(dataViewMetadata);
const valueAxisProperties: powerbi.DataViewObject = dataViewUtils.getValueAxisProperties(dataViewMetadata);
isScalar = dataViewUtils.isScalar(isScalar, xAxisCardProperties);
categorical = utils.applyUserMinMax(isScalar, categorical, xAxisCardProperties);
const converterStrategy: BaseConverterStrategy =
new BaseConverterStrategy(categorical, visualHost);
const firstCategory: DataViewCategoryColumn = categorical
&& categorical.categories
&& categorical.categories[0],
categories: PrimitiveValue[] = firstCategory
? firstCategory.values
: [],
categoryIdentities: CustomVisualOpaqueIdentity[] = firstCategory
? firstCategory.identity
: [],
categoryMetadata: DataViewMetadataColumn = firstCategory
? firstCategory.source
: undefined;
const categoryFormatter: IValueFormatter = valueFormatter.create({
format: valueFormatter.getFormatStringByColumn(categoryMetadata),
value: categories[0],
value2: categories[categories.length - 1],
displayUnitSystemType: DisplayUnitSystemType.Verbose
});
let borderSettings: MekkoBorderSettings = MekkoChart.DefaultSettings.columnBorder,
sortSeriesSettings: MekkoSeriesSortSettings = MekkoChart.DefaultSettings.sortSeries,
sortLegendSettings: MekkoLegendSortSettings = MekkoChart.DefaultSettings.sortLegend,
xAxisLabelsSettings: MekkoXAxisLabelsSettings = MekkoChart.DefaultSettings.xAxisLabels,
categoryColumnSettings: MekkoCategoryColorSettings = MekkoChart.DefaultSettings.categoryColor,
labelSettings: VisualDataLabelsSettings = dataLabelUtils.getDefaultColumnLabelSettings(true),
dataPointSettings: MekkoDataPointSettings = MekkoChart.DefaultSettings.dataPoint;
let defaultDataPointColor: string = undefined,
showAllDataPoints: boolean = undefined;
if (dataViewMetadata && dataViewMetadata.objects) {
const objects: powerbi.DataViewObjects = dataViewMetadata.objects;
defaultDataPointColor = dataViewObjects.getFillColor(
objects,
MekkoChart.Properties["dataPoint"]["defaultColor"]);
showAllDataPoints = dataViewObjects.getValue<boolean>(
objects,
MekkoChart.Properties["dataPoint"]["showAllDataPoints"]);
labelSettings = MekkoChart.parseLabelSettings(objects);
borderSettings = MekkoChart.parseBorderSettings(objects);
sortLegendSettings = MekkoChart.parseLegendSortSettings(objects);
sortSeriesSettings = MekkoChart.parseSeriesSortSettings(objects);
xAxisLabelsSettings = MekkoChart.parseXAxisLabelsSettings(objects);
dataPointSettings = MekkoChart.parseDataPointSettings(objects);
}
// Allocate colors
let legendAndSeriesInfo: LegendSeriesInfo = converterStrategy.getLegend(colors, defaultDataPointColor, "", dataPointSettings.categoryGradient, dataPointSettings.colorGradientEndColor.solid.color);
let legend: MekkoLegendDataPoint[] = legendAndSeriesInfo.legend.dataPoints;
let seriesSources: DataViewMetadataColumn[] = legendAndSeriesInfo.seriesSources;
// Determine data points
let result: MekkoDataPoints = BaseColumnChart.createDataPoints(
visualHost,
categorical,
categories,
categoryIdentities,
legend,
legendAndSeriesInfo.seriesObjects,
converterStrategy,
labelSettings,
is100PercentStacked,
isScalar,
supportsOverflow,
localizationManager,
converterHelper.categoryIsAlsoSeriesRole(
categorical,
RoleNames.series,
RoleNames.category),
firstCategory && firstCategory.objects,
defaultDataPointColor,
chartType,
categoryMetadata);
if (sortSeriesSettings.enabled) {
let columns = BaseColumnChart.createAlternateStructure(result, sortSeriesSettings.direction === "des");
BaseColumnChart.reorderPositions(result, columns);
}
const valuesMetadata: DataViewMetadataColumn[] = [];
for (let j: number = 0; j < legend.length; j++) {
valuesMetadata.push(seriesSources[j]);
}
const labels: axisUtils.AxesLabels = axisUtils.createAxesLabels(
xAxisCardProperties,
valueAxisProperties,
categoryMetadata,
valuesMetadata);
return {
categories,
categoryFormatter,
defaultDataPointColor,
showAllDataPoints,
categoryMetadata,
categoriesWidth: result.categoriesWidth,
borderSettings,
sortlegend: sortLegendSettings,
sortSeries: sortSeriesSettings,
xAxisLabelsSettings: xAxisLabelsSettings,
labelSettings,
series: result.series,
valuesMetadata,
legendData: legendAndSeriesInfo.legend,
hasHighlights: result.hasHighlights,
scalarCategoryAxis: isScalar,
axesLabels: {
x: labels.xAxisLabel,
y: labels.yAxisLabel
},
hasDynamicSeries: result.hasDynamicSeries,
categoryProperties: result.categoryProperties,
isMultiMeasure: false,
dataPointSettings: dataPointSettings
};
}