Aggregated Columns

Return a data object for an aggregated query, push 0s for rows with

HTML

<pre><div id="ltvData">

</div></pre>

TypeScript

interface Profile {
  id: string;
}

interface DataResonseRow {
   id: string;
   data: number[];
}


function calculateLTV (queryResults: DataResponseRow[], aggregationMethod: string, profiles: Profile[] ) {
  //results object
  const responsesById: { [id: string]: any[] } = {};
  
  for (const i in profiles){
    if (
        aggregationMethod === "count" ||
        aggregationMethod === "sum"
      ) {
        //default all entries for counted or summed aggregations to 0 to start... will be replaced later if there is a response
        responsesById[profiles[i].id] = [0];
      }
  }
  
  for (const row in queryResults){
    responsesById[queryResults[row].id] = queryResults[row].data;
  }

  return responsesById;
}


const mockQueryResults = [{id:1, data:[112.50]}, {id:2, data:[16.48]}, {id:3, data:[42.97]}, {id:4, data:[96.41]}]
const mockAggregationMethod = "sum"
const mockProfiles = [{id: 1}, {id: 2}, {id: 3}, {id: 4}, {id: 5}]

const dataToDisplay = JSON.stringify(calculateLTV(mockQueryResults, mockAggregationMethod, mockProfiles), null, 2);

document.getElementById("ltvData").innerHTML = dataToDisplay;