Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

...

...

...

...

...

...

...

Question

I have a Datamart named "SalesHistoryDM" with the following columns:

  • Sku

  • CustomerId

  • YearMonth (Time Dimension)

  • Revenue

  • UnitsSold

  • MarginalContributionAbs

  • MarginalContributionPerc

...

I need to aggregate the Datamart in the logic for a specific product. I need to to sum Revenue, UnitsSold, MarginalContribution and count how many customers bought the product per year.

Answer

You need to run a Datamart query:

Code Block
def filters = [
Filter.equal("Sku", sku),
]

def dmCtx = api.getDatamartContext()
def salesDM = dmCtx.getTable("SalesHistoryDM")
def datamartQuery = dmCtx.newQuery(salesDM)

datamartQuery.select("SUM(Revenue)", "revenue")
datamartQuery.select("SUM(UnitsSold)", "unitsSold")
datamartQuery.select("SUM(MarginalContributionAbs)", "marginAbs")
datamartQuery.select("COUNTDISTINCT(CustomerId)", "customersCount")
datamartQuery.select("YearMonthYear", "year")
datamartQuery.where(filters)

def result = dmCtx.executeQuery(datamartQuery)?.getData()?.collect() ?: []

In the result you will get a list of maps:

Code Block
[
[ revenue: 123.0, unitsSold: 2, marginAbs:  56.78, customersCount: 2, year: 2017],
[ revenue: 456.0, unitsSold: 4, marginAbs: 123.45, customersCount: 3, year: 2018]
]