Basic Analysis Dashboard for PO

This dashboard contains charts useful for Pricing Scientists and is usually used when setting up a PO Model. At the moment it consists of the charts listed below.


TODO:

  • Extract screenshot example from demofx-dev
  • Extract chart builder code from demofx-dev
  • Compare if something is already in SIP
  • Define what has to be mapped to DM
  • Define Input / Filter fields


Charts (Portlets)

1. Heatmap: Discount per Product Group and Customer

image-20210429-132805.png


def chart = api.newChartBuilder()
	.newHeatmap()
		.getOptions()
			.setTitle('Discount per Product Group and Customer')
			.setHideLegend(false)
			.setHideTooltips(false)
			.setSubtitle('Heatmap')
			.setColorAxisType(ColorAxisType.RANGED)
			.withInterpolatedColorAxis()
				.addStop('#EFEFFF', 0)
				.addStop('#003875', 100)
				.back()
			.withRangedColorAxis()
				.addRange('#7ed321', -999, 0.25)
				.addRange('#f8e71c', 0.25, 0.4)
				.addRange('#f5a623', 0.4, 1)
				.back()
			.back()
		.getSeries()
			.setLabel('Heatmap Data')
			.setHideDataLabels(true)
			.setDatamart('DM.Standard_Sales_Data')
			.setCurrency('USD')
			.addFilters(FilterOperator.AND)
				.addFilter('Classification', null, 'A')
				.back()
			.setAxisX('CustomerName')
			.setAxisY('ProductGroup')
			.setColorAxis('[Total Customer Discount Percentage]')
				.withExpression()
					.setExpression('((sum(VolumeDiscounts)+sum(SalesChannelDiscount)+sum(PromotionDiscount)+sum(CompetitorDiscount)+sum(CustomerNegotiatedDiscount))/sum(InvoicePrice))')
					.setDescription('[Total Customer Discount Percentage]')
					.back()
				.back()
			.withSortByAxisX(SortType.ASCENDING)
			.withSortByAxisY(SortType.ASCENDING)
			.setGeneratedQueryDto('{"datamart":"DM.Standard_Sales_Data","source":"DM.Standard_Sales_Data","name":null,"label":"Heatmap Data","rollup":true,"projections":{"x":{"alias":"x","label":"Customer Name","expression":"CustomerName","format":null},"y":{"alias":"y","label":"Product Group","expression":"ProductGroup","format":null},"z":{"alias":"z","label":"Gross Margin %","expression":"((sum(VolumeDiscounts)+sum(SalesChannelDiscount)+sum(PromotionDiscount)+sum(CompetitorDiscount)+sum(CustomerNegotiatedDiscount))/sum(InvoicePrice))","format":null,"name":"[Total Customer Discount Percentage]","advancedProjection":true,"function":null,"default":null,"formatString":"Total Customer Discount Percentage","parameters":{"field":"[Total Customer Discount Percentage]","quantity":"Quantity","base":"InvoicePrice"}}},"filter":{"_constructor":"AdvancedCriteria","operator":"and","criteria":[{"fieldName":"Classification","operator":"iEquals","value":"A"}]},"aggregateFilter":null,"sortBy":[],"options":{"currency":"USD","distinctValues":["x","y"]}}')
			.back()
		.getDictionary()
			.buildFromOpaqueString('[{"sectionIdx":1,"category":"PROJECTION","categoryLabel":"Projection","defaultValue":"Total Customer Discount Percentage","key":"z","keyLabel":"Color Axis","sectionLabel":"Heatmap Data","format":" % ","value":"Gross Margin %"},{"sectionIdx":1,"category":"PROJECTION","categoryLabel":"Projection","defaultValue":"Customer Name","field":{"name":"CustomerName","label":"Customer Name","rank":59,"sourceField":"CustomerName","expression":"CustomerName","numeric":false,"key":false,"time":false,"persisted":true,"auxiliary":false,"deployed":true,"dimension":true,"calculated":false,"queryable":true,"aggregation":false,"deleted":false,"system":false,"type":"TEXT","source":"DMDS.Customer","owningFC":"Customer"},"key":"x","keyLabel":"X Axis","sectionLabel":"Heatmap Data"},{"sectionIdx":1,"category":"PROJECTION","categoryLabel":"Projection","defaultValue":"Product Group","field":{"name":"ProductGroup","label":"Product Group","rank":44,"sourceField":"ProductGroup","expression":"ProductGroup","numeric":false,"key":false,"time":false,"persisted":true,"auxiliary":false,"deployed":true,"dimension":true,"calculated":false,"queryable":true,"aggregation":false,"deleted":false,"system":false,"type":"TEXT","source":"DMDS.Product","owningFC":"Product"},"key":"y","keyLabel":"Y Axis","sectionLabel":"Heatmap Data"}]')
			.back()
		.build()

It is configured like this:

image-20210429-132837.png

To be configured:

  • Field for customer name → mapping

  • Field for product group → Filter field

  • Default filters

2. Trend Revenue and Margin

image-20210429-133108.png


def chart = api.newChartBuilder()
	.newTimeSeries()
		.getOptions()
			.setTitle('Trend revenue, margin')
			.setSubtitle('')
			.setHideLegend(false)
			.setHideTooltips(false)
			.setXLabel('Invoice Month')
			.setYLabel('Currency Total')
			.setLegacyComparisonMode(true)
			.setShowZAxis(true)
			.setZLabel('Percentage')
			.setZMin(0)
			.setZMax(1)
			.setBoxplotAxisLabel('Box Plot')
			.back()
		.addSeries()
			.setHideDataLabels(true)
			.setDatamart('DM.Standard_Sales_Data')
			.setCurrency('EUR')
			.addFilters(FilterOperator.AND)
				.addFilter('Quantity', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('InvoicePrice', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('GrossMarginPct', FilterOperator.GREATER_THAN_OR_EQUAL_TO, -0.1)
				.addFilter('GrossMarginPct', FilterOperator.LESS_THAN_OR_EQUAL_TO, 1)
				.back()
			.setAxisX('PricingDateMonth')
			.setAxisY('InvoicePrice')
				.withTotal()
				.back()
			.setType(SeriesType.BAR)
			.setShowBoxplot(false)
			.setBoxplotAxis()
				.withField()
				.back()
			.setWhisker(WhiskerType.MIN_MAX)
			.addAdditionalMeasure()
				.setMeasure('GrossMargin')
				.setId(1)
				.setType(SeriesType.BAR)
				.setOnZAxis(false)
				.withTotal()
				.withBoxplotField()
				.back()
			.addAdditionalMeasure()
				.setMeasure('GrossMargin')
				.setId(2)
				.setType(SeriesType.LINE)
				.setOnZAxis(true)
				.withExpression()
					.setExpression('SUM(GrossMargin)/SUM(InvoicePrice)')
					.setDescription('AvgGrossMargin')
					.back()
				.withBoxplotField()
				.back()
			.setGeneratedQueryDto('{"datamart":"DM.Standard_Sales_Data","source":"DM.Standard_Sales_Data","name":null,"label":null,"rollup":true,"projections":{"x":{"alias":"x","label":"Pricing Date Month","expression":"PricingDateMonth","format":null},"y":{"alias":"y","label":"∑Invoice Price","expression":"SUM({field})","format":null,"name":"InvoicePrice","advancedProjection":true,"function":null,"default":null,"formatString":"∑{field}","parameters":{"field":"InvoicePrice","quantity":"Quantity","base":"InvoicePrice"}},"m1":{"alias":"m1","label":"∑Gross Margin","expression":"SUM({field})","format":null,"name":"GrossMargin","advancedProjection":true,"function":null,"default":null,"formatString":"∑{field}","parameters":{"field":"GrossMargin","quantity":"Quantity","base":"InvoicePrice"}},"m2":{"alias":"m2","label":"AvgGrossMargin","expression":"SUM(GrossMargin)/SUM(InvoicePrice)","format":null,"name":"GrossMargin","advancedProjection":true,"function":null,"default":null,"formatString":"AvgGrossMargin","parameters":{"field":"GrossMargin","quantity":"Quantity","base":"InvoicePrice"}}},"filter":{"_constructor":"AdvancedCriteria","operator":"and","criteria":[{"fieldName":"Quantity","operator":"greaterThan","value":0.01},{"fieldName":"InvoicePrice","operator":"greaterThan","value":0.01},{"operator":"betweenInclusive","fieldName":"GrossMarginPct","start":-0.1,"end":1}]},"aggregateFilter":null,"sortBy":["x"],"options":{"currency":"EUR","regression":["y","x"]}}')
			.back()
		.getDictionary()
			.buildFromOpaqueString('[{"sectionIdx":1,"category":"PROJECTION","key":"m1","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"Measure 1","defaultValue":"∑Gross Margin"},{"sectionIdx":1,"category":"PROJECTION","key":"m2","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"Measure 2","defaultValue":"AvgGrossMargin"},{"sectionIdx":1,"category":"PROJECTION","key":"x","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"X Axis","defaultValue":"Pricing Date Month"},{"sectionIdx":1,"category":"PROJECTION","key":"y","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"Y Axis","defaultValue":"∑Invoice Price"},{"sectionIdx":1,"category":"PROJECTION","key":"bplot_y","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"Y Axis (Box Plot Chart)","defaultValue":"Invoice Price"}]')
			.back()
		.build()


3. Contribution

image-20210429-133436.png


def chart = api.newChartBuilder()
	.newPie()
		.getOptions()
			.setTitle('Contribution')
			.setHideLegend(false)
			.setHideTooltips(false)
			.setSubtitle('')
			.setVerticalLayout(false)
			.back()
		.addSeries()
			.setHideDataLabels(false)
			.setDatamart('DM.Standard_Sales_Data')
			.setCurrency('EUR')
			.addFilters(FilterOperator.AND)
				.addFilter('Quantity', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('InvoicePrice', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('GrossMarginPct', FilterOperator.GREATER_THAN_OR_EQUAL_TO, -0.1)
				.addFilter('GrossMarginPct', FilterOperator.LESS_THAN_OR_EQUAL_TO, 1)
				.back()
			.setHideOther(false)
			.setCategories('Customertype')
			.setSize('InvoicePrice')
				.withTotal()
				.back()
			.withSortBySize(SortType.ASCENDING)
			.setGeneratedQueryDto('{"datamart":"DM.Standard_Sales_Data","source":"DM.Standard_Sales_Data","name":null,"label":null,"rollup":true,"projections":{"x":{"alias":"x","label":"Customer type","expression":"Customertype","format":null},"y":{"alias":"y","label":"∑Invoice Price","expression":"SUM({field})","format":null,"name":"InvoicePrice","advancedProjection":true,"function":null,"default":null,"formatString":"∑{field}","parameters":{"field":"InvoicePrice","quantity":"Quantity","base":"InvoicePrice"}}},"filter":{"_constructor":"AdvancedCriteria","operator":"and","criteria":[{"fieldName":"Quantity","operator":"greaterThan","value":0.01},{"fieldName":"InvoicePrice","operator":"greaterThan","value":0.01},{"operator":"betweenInclusive","fieldName":"GrossMarginPct","start":-0.1,"end":1}]},"aggregateFilter":null,"sortBy":["y"],"options":{"currency":"EUR","distribution":["y"]}}')
			.back()
		.getDictionary()
			.buildFromOpaqueString('[{"sectionIdx":1,"category":"PROJECTION","key":"x","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"Categories","defaultValue":"Customer type"},{"sectionIdx":1,"category":"PROJECTION","key":"y","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"Size","defaultValue":"∑Invoice Price"}]')
			.back()
		.build()


4. Margin vs. Revenue (By Customer)

image-20210429-133625.png


def chart = api.newChartBuilder()
	.newScatter()
		.getOptions()
			.setTitle('Margin vs Revenue')
			.setHideLegend(false)
			.setHideTooltips(false)
			.setSubtitle('by Customer')
			.setXLabel('Revenue')
			.setYLabel('Margin')
			.setXMin(0)
			.setYMin(0)
			.setDiscretization(true)
			.back()
		.addSeries()
			.setLabel('Revenue, Margin')
			.setDatamart('DM.Standard_Sales_Data')
			.setCurrency('EUR')
			.addFilters(FilterOperator.AND)
				.addFilter('Quantity', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('InvoicePrice', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('GrossMarginPct', FilterOperator.GREATER_THAN_OR_EQUAL_TO, -0.1)
				.addFilter('GrossMarginPct', FilterOperator.LESS_THAN_OR_EQUAL_TO, 1)
				.back()
			.setAxisX('InvoicePrice')
				.withTotal()
				.back()
			.setAxisY('GrossMargin')
				.withTotal()
				.back()
			.setAggregationBy('CustomerId')
			.setShowBandByLegend(false)
			.withTrendLine()
				.setLabel('AvgGrossMarginPct')
				.setRegressionType('linear')
				.setShowInLegend(true)
				.setHideDataLabels(true)
				.setColor(AuxLineColor.RED)
				.back()
			.setGeneratedQueryDto('{"datamart":"DM.Standard_Sales_Data","source":"DM.Standard_Sales_Data","name":null,"label":"Revenue, Margin","rollup":true,"projections":{"x":{"alias":"x","label":"∑Invoice Price","expression":"SUM({field})","format":null,"name":"InvoicePrice","advancedProjection":true,"function":null,"default":null,"formatString":"∑{field}","parameters":{"field":"InvoicePrice","quantity":"Quantity","base":"InvoicePrice"}},"y":{"alias":"y","label":"∑Gross Margin","expression":"SUM({field})","format":null,"name":"GrossMargin","advancedProjection":true,"function":null,"default":null,"formatString":"∑{field}","parameters":{"field":"GrossMargin","quantity":"Quantity","base":"InvoicePrice"}},"groupBy":{"alias":"groupBy","label":"Customer Id","expression":"CustomerId","format":null}},"filter":{"_constructor":"AdvancedCriteria","operator":"and","criteria":[{"fieldName":"Quantity","operator":"greaterThan","value":0.01},{"fieldName":"InvoicePrice","operator":"greaterThan","value":0.01},{"operator":"betweenInclusive","fieldName":"GrossMarginPct","start":-0.1,"end":1}]},"aggregateFilter":null,"sortBy":[],"options":{"currency":"EUR","discretization":["x","y"],"distribution":["x","y"],"regression":["y","x"]}}')
			.back()
		.addAuxLine()
			.setLabel('AvgMarginPct')
			.setShowInLegend(false)
			.setHideDataLabels(true)
			.withLine()
				.setSteepness('0.2')
				.setYIntercept('0')
				.back()
			.setColor(AuxLineColor.RED)
			.back()
		.getDictionary()
			.buildFromOpaqueString('[{"sectionIdx":1,"category":"PROJECTION","key":"bandBy","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"Band By","defaultValue":"Customer type"},{"sectionIdx":1,"category":"AUX_LINE","key":"trendLine1","sectionLabel":"AvgGrossMarginPct","categoryLabel":"Auxiliary line","keyLabel":"trendLine1","defaultValue":"AvgGrossMarginPct"},{"sectionIdx":1,"category":"AUX_LINE","key":"AuxLine1","sectionLabel":"AvgMarginPct","categoryLabel":"Auxiliary line","keyLabel":"AuxLine1","defaultValue":"AvgMarginPct"},{"sectionIdx":1,"category":"PROJECTION","key":"groupBy","sectionLabel":"Revenue, Margin","categoryLabel":"Projection","keyLabel":"Aggregation By","defaultValue":"Customer Id"},{"sectionIdx":1,"category":"PROJECTION","key":"x","sectionLabel":"Revenue, Margin","categoryLabel":"Projection","keyLabel":"X Axis","defaultValue":"∑Invoice Price"},{"sectionIdx":1,"category":"PROJECTION","key":"y","sectionLabel":"Revenue, Margin","categoryLabel":"Projection","keyLabel":"Y Axis","defaultValue":"∑Gross Margin"}]')
			.back()
		.build()


5. Margin vs. Revenue (By Product)

image-20210429-133950.png


def chart = api.newChartBuilder()
	.newScatter()
		.getOptions()
			.setTitle('Margin vs Revenue')
			.setHideLegend(false)
			.setHideTooltips(false)
			.setSubtitle('by Product')
			.setXLabel('Revenue')
			.setYLabel('Margin')
			.setXMin(0)
			.setDiscretization(true)
			.back()
		.addSeries()
			.setLabel('Revenue, Margin')
			.setDatamart('DM.Standard_Sales_Data')
			.setCurrency('EUR')
			.addFilters(FilterOperator.AND)
				.addFilter('Quantity', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('InvoicePrice', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('GrossMarginPct', FilterOperator.GREATER_THAN_OR_EQUAL_TO, -0.1)
				.addFilter('GrossMarginPct', FilterOperator.LESS_THAN_OR_EQUAL_TO, 1)
				.back()
			.setAxisX('InvoicePrice')
				.withTotal()
				.back()
			.setAxisY('GrossMargin')
				.withTotal()
				.back()
			.setAggregationBy('ProductId')
			.setShowBandByLegend(false)
			.withTrendLine()
				.setLabel('AvgGrossMarginPct')
				.setRegressionType('linear')
				.setShowInLegend(true)
				.setHideDataLabels(true)
				.setColor(AuxLineColor.RED)
				.back()
			.setGeneratedQueryDto('{"datamart":"DM.Standard_Sales_Data","source":"DM.Standard_Sales_Data","name":null,"label":"Revenue, Margin","rollup":true,"projections":{"x":{"alias":"x","label":"∑Invoice Price","expression":"SUM({field})","format":null,"name":"InvoicePrice","advancedProjection":true,"function":null,"default":null,"formatString":"∑{field}","parameters":{"field":"InvoicePrice","quantity":"Quantity","base":"InvoicePrice"}},"y":{"alias":"y","label":"∑Gross Margin","expression":"SUM({field})","format":null,"name":"GrossMargin","advancedProjection":true,"function":null,"default":null,"formatString":"∑{field}","parameters":{"field":"GrossMargin","quantity":"Quantity","base":"InvoicePrice"}},"groupBy":{"alias":"groupBy","label":"Product Id","expression":"ProductId","format":null}},"filter":{"_constructor":"AdvancedCriteria","operator":"and","criteria":[{"fieldName":"Quantity","operator":"greaterThan","value":0.01},{"fieldName":"InvoicePrice","operator":"greaterThan","value":0.01},{"operator":"betweenInclusive","fieldName":"GrossMarginPct","start":-0.1,"end":1}]},"aggregateFilter":null,"sortBy":[],"options":{"currency":"EUR","discretization":["x","y"],"distribution":["x","y"],"regression":["y","x"]}}')
			.back()
		.addAuxLine()
			.setLabel('AvgMarginPct')
			.setShowInLegend(false)
			.setHideDataLabels(true)
			.withLine()
				.setSteepness('0.2')
				.setYIntercept('0')
				.back()
			.setColor(AuxLineColor.RED)
			.back()
		.getDictionary()
			.buildFromOpaqueString('[{"sectionIdx":1,"category":"PROJECTION","key":"bandBy","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"Band By","defaultValue":"Customer type"},{"sectionIdx":1,"category":"AUX_LINE","key":"trendLine1","sectionLabel":"AvgGrossMarginPct","categoryLabel":"Auxiliary line","keyLabel":"trendLine1","defaultValue":"AvgGrossMarginPct"},{"sectionIdx":1,"category":"AUX_LINE","key":"AuxLine1","sectionLabel":"AvgMarginPct","categoryLabel":"Auxiliary line","keyLabel":"AuxLine1","defaultValue":"AvgMarginPct"},{"sectionIdx":1,"category":"PROJECTION","key":"groupBy","sectionLabel":"Revenue, Margin","categoryLabel":"Projection","keyLabel":"Aggregation By","defaultValue":"Product Id"},{"sectionIdx":1,"category":"PROJECTION","key":"x","sectionLabel":"Revenue, Margin","categoryLabel":"Projection","keyLabel":"X Axis","defaultValue":"∑Invoice Price"},{"sectionIdx":1,"category":"PROJECTION","key":"y","sectionLabel":"Revenue, Margin","categoryLabel":"Projection","keyLabel":"Y Axis","defaultValue":"∑Gross Margin"}]')
			.back()
		.build()


6. Margin Variation

image-20210429-134137.png


def chart = api.newChartBuilder()
	.newBoxplot()
		.getOptions()
			.setTitle('Margin Variation')
			.setHideLegend(false)
			.setHideTooltips(false)
			.setSubtitle('')
			.setComparison(true)
			.setYLabel('Gross Margin %')
			.setMaxDataPoints(0)
			.setYMin(0)
			.setYMax(1)
			.setShowZAxis(false)
			.setZLabel('Other')
			.back()
		.addSeries()
			.setDatamart('DM.Standard_Sales_Data')
			.setCurrency('EUR')
			.addFilters(FilterOperator.AND)
				.addFilter('Quantity', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('InvoicePrice', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('GrossMarginPct', FilterOperator.GREATER_THAN_OR_EQUAL_TO, -0.1)
				.addFilter('GrossMarginPct', FilterOperator.LESS_THAN_OR_EQUAL_TO, 1)
				.back()
			.setAxisX('Classification')
			.setAxisY('GrossMarginPct')
				.withField()
				.back()
			.withSortByAxisY(SortType.ASCENDING)
			.withWhisker(WhiskerType.P_05_95TH)
			.setGeneratedQueryDto('{"datamart":"DM.Standard_Sales_Data","source":"DM.Standard_Sales_Data","name":null,"label":null,"rollup":true,"projections":{"x":{"alias":"x","label":"Classification","expression":"Classification","format":null},"y":{"alias":"y","label":"GrossMarginPct","expression":"{field}","format":null,"name":"GrossMarginPct","advancedProjection":true,"function":"Field","default":null,"formatString":"{field}","parameters":{"field":"GrossMarginPct"}}},"filter":{"_constructor":"AdvancedCriteria","operator":"and","criteria":[{"fieldName":"Quantity","operator":"greaterThan","value":0.01},{"fieldName":"InvoicePrice","operator":"greaterThan","value":0.01},{"operator":"betweenInclusive","fieldName":"GrossMarginPct","start":-0.1,"end":1}]},"aggregateFilter":null,"sortBy":["x"],"options":{"currency":"EUR","statistics":{"y":["q.25","q.5","q.75","q.05","q.95"]}}}')
			.back()
		.getDictionary()
			.buildFromOpaqueString('[{"sectionIdx":1,"category":"PROJECTION","key":"x","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"X Axis","defaultValue":"Classification"},{"sectionIdx":1,"category":"PROJECTION","key":"y","sectionLabel":null,"categoryLabel":"Projection","keyLabel":"Y Axis","defaultValue":"GrossMarginPct"}]')
			.back()
		.build()


7. Margin Distribution

image-20210429-134342.png


def chart = api.newChartBuilder()
	.newHistogram()
		.getOptions()
			.setTitle('Margin Distribution')
			.setSubtitle('')
			.setHideLegend(false)
			.setHideTooltips(false)
			.setXLabel('Gross Margin %')
			.setYLabel('Transactions Count')
			.setShowZAxis(false)
			.setZLabel('Other')
			.back()
		.getSeries()
			.setLabel('MarginPct')
			.setHideDataLabels(true)
			.setDatamart('DM.Standard_Sales_Data')
			.setCurrency('EUR')
			.addFilters(FilterOperator.AND)
				.addFilter('Quantity', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('InvoicePrice', FilterOperator.GREATER_THAN, 0.01)
				.addFilter('GrossMarginPct', null, null)
				.back()
			.setAxisX('GrossMarginPct')
				.withTotal()
				.back()
			.setBins(110)
			.setAxisY('UniqueId')
			.withSortByAxisX(SortType.ASCENDING)
			.setGeneratedQueryDto('{"datamart":"DM.Standard_Sales_Data","source":"DM.Standard_Sales_Data","name":null,"label":"MarginPct","rollup":true,"projections":{"binLabel":{"alias":"binLabel","label":"∑GrossMarginPct","expression":null,"format":null},"binFreq":{"alias":"binFreq","label":"Count","expression":null,"format":null},"x":{"alias":"x","label":"∑GrossMarginPct","expression":"SUM({field})","format":null,"name":"GrossMarginPct","advancedProjection":true,"function":null,"default":null,"formatString":"∑{field}","parameters":{"field":"GrossMarginPct","quantity":"Quantity","base":"InvoicePrice"}},"y":{"alias":"y","label":"Unique Id","expression":"UniqueId","format":null}},"filter":{"_constructor":"AdvancedCriteria","operator":"and","criteria":[{"fieldName":"Quantity","operator":"greaterThan","value":0.01},{"fieldName":"InvoicePrice","operator":"greaterThan","value":0.01},{"operator":"between","fieldName":"GrossMarginPct","start":-0.1,"end":1}]},"aggregateFilter":null,"sortBy":["x"],"options":{"currency":"EUR","discretization":["x"],"distribution":["x"],"bins":110}}')
			.back()
		.getDictionary()
			.buildFromOpaqueString('[{"sectionIdx":1,"category":"PROJECTION","key":"y","sectionLabel":"MarginPct","categoryLabel":"Projection","keyLabel":"Aggregation By","defaultValue":"Unique Id"},{"sectionIdx":1,"category":"PROJECTION","key":"x","sectionLabel":"MarginPct","categoryLabel":"Projection","keyLabel":"X Axis","defaultValue":"∑GrossMarginPct"}]')
			.back()
		.build()