private processData()

in src/converter/data/dataConverter.ts [229:332]


    private processData(
        dataRepresentation: IDataRepresentation,
        columnGroupByRole: IColumnGroupByRole,
        settings: Settings,
        valuesColumn: powerbiVisualsApi.DataViewValueColumns,
    ): void {
        const dateColumnGroup: IColumnGroup = columnGroupByRole[dateColumn.name];
        const valueColumnGroup: IColumnGroup = columnGroupByRole[valueColumn.name];

        if (!dateColumnGroup
            || !dateColumnGroup.columns
            || !dateColumnGroup.columns.length
            || !valueColumnGroup
            || !valueColumnGroup.columns
            || !valueColumnGroup.columns.length
        ) {
            return;
        }

        settings.date.setColumnFormat(dateColumnGroup.columns[0].source.format);

        const tooltipColumnGroup: IColumnGroup = columnGroupByRole[tooltipColumn.name];

        const {
            createSelectionIdBuilder,
        } = this.constructorOptions;

        valueColumnGroup.columns.forEach((column: powerbiVisualsApi.DataViewValueColumn, columnIndex: number) => {
            const x: Date = <Date>(dateColumnGroup.values[0]);

            if (x instanceof Date && x !== undefined && x !== null) {
                if (!dataRepresentation.series[columnIndex]) {
                    const selectionId: powerbiVisualsApi.visuals.ISelectionId = createSelectionIdBuilder()
                        .withSeries(valuesColumn, column)
                        .withMeasure(column.source.queryName)
                        .createSelectionId();

                    const seriesSettings: SeriesSettings = this.prepareSeriesSettings(settings, column);
                    const series = this.initDataRepresentationSeries(
                        selectionId,
                        dataRepresentation.series.length,
                        column.source.displayName,
                        seriesSettings,
                    );

                    dataRepresentation.series.push(series);
                    dataRepresentation.sortedSeries.push(series);
                }

                const seriesItem: IDataRepresentationSeries = dataRepresentation.series[columnIndex];
                const y: number = this.parseValue(
                    valueColumnGroup.values[columnIndex],
                    seriesItem.settings.values.treatEmptyValuesAsZero,
                );

                const dataPoint: IDataRepresentationPoint = {
                    index: seriesItem.points.length,
                    x,
                    y,
                };

                dataRepresentation.latestDate = x;

                if (seriesItem.points.length > 1 && (seriesItem.points[seriesItem.points.length - 1].y !== dataPoint.y)) {
                    seriesItem.isLine = false;
                }

                seriesItem.points.push(dataPoint);

                if (seriesItem.settings.values.showLatterAvailableValue) {
                    if (!isNaN(dataPoint.y)) {
                        seriesItem.current = dataPoint;
                    }
                } else {
                    seriesItem.current = dataPoint;
                }

                seriesItem.x.min = this.getMin(seriesItem.x.min, x);
                seriesItem.x.max = this.getMax(seriesItem.x.max, x);
                this.setupYMinMax(y, seriesItem);
                const tooltip: string = tooltipColumnGroup && tooltipColumnGroup.values && tooltipColumnGroup.values[columnIndex] || undefined;
                dataRepresentation.series[columnIndex].tooltip = tooltip;
            }
        });

        const subtitleColumnGroup: IColumnGroup = columnGroupByRole[subtitleColumn.name];
        if (subtitleColumnGroup) {
            dataRepresentation.subtitle = subtitleColumnGroup.values[0];
        }

        const warningColumnGroup: IColumnGroup = columnGroupByRole[warningStateColumn.name];
        if (warningColumnGroup) {
            dataRepresentation.warningState = warningColumnGroup.values[0];
        }

        const changeStartDateColumnGroup: IColumnGroup = columnGroupByRole[changeStartDateColumn.name];
        if (changeStartDateColumnGroup) {
            const date: Date = changeStartDateColumnGroup
                && changeStartDateColumnGroup.values
                && changeStartDateColumnGroup.values[0];

            dataRepresentation.percentCalcDate = date instanceof Date ? date : dataRepresentation.percentCalcDate;
        }
    }