dailyDealsByRegionWith7DaySums = {
const rows = []
const [minDate, maxDate] = d3.extent(dailyDealsByRegion.map(d => d.date))
for (let targetDate = minDate; targetDate <= maxDate; targetDate = agnosticAddDays(targetDate, 1)) {
const sevenDayDateRange = d3.utcDay.range(
agnosticAddDays(targetDate, -6),
agnosticAddDays(targetDate, 1)
)
const twentyEightDayDateRange = d3.utcDay.range(
agnosticAddDays(targetDate, -27),
agnosticAddDays(targetDate, 1)
)
for (const region of dailyDealsByRegionIndexed.keys()) {
let sevenDayDealCount = 0
let sevenDayDataSize = 0
let sevenDayLifetimeValue = 0
let twentyEightDayDealCount = 0
let twentyEightDayDataSize = 0
let twentyEightDayLifetimeValue = 0
const dateIndex = dailyDealsByRegionIndexed.get(region)
const row = getRow(dateIndex, region, targetDate)
for (const date of sevenDayDateRange) {
const pastDateRow = getRow(dateIndex, region, date)
sevenDayDealCount += pastDateRow.count
sevenDayDataSize += pastDateRow['sum(pieceSizeDouble)']
sevenDayLifetimeValue += pastDateRow['sum(lifetimeValue)']
}
for (const date of twentyEightDayDateRange) {
const pastDateRow = getRow(dateIndex, region, date)
twentyEightDayDealCount += pastDateRow.count
twentyEightDayDataSize += pastDateRow['sum(pieceSizeDouble)']
twentyEightDayLifetimeValue += pastDateRow['sum(lifetimeValue)']
}
rows.push({
...row,
sevenDayDealCount,
sevenDayDataSize,
sevenDayLifetimeValue,
twentyEightDayDealCount,
twentyEightDayDataSize,
twentyEightDayLifetimeValue
})
}
}
return rows
function getRow (dateIndex, region, date) {
if (dateIndex.get(date)) {
return {
count: 0,
'sum(pieceSizeDouble)': 0,
'sum(lifetimeValue)': 0,
...dateIndex.get(date)
}
} else {
return {
date,
region,
count: 0,
'sum(pieceSizeDouble)': 0,
'sum(lifetimeValue)': 0
}
}
}
}