code: func (e *AzureMonitorDatasource) executeTimeSeriesQuery(ctx context.Context, originalQueries []*tsdb.Query, timeRange *tsdb.TimeRange) (*tsdb.Response, error) {
  	result := &tsdb.Response{
  		Results: map[string]*tsdb.QueryResult{},
  	}
  
  	queries, err := e.buildQueries(originalQueries, timeRange)
  	if err != nil {
  		return nil, err
  	}
  
  	for _, query := range queries {
  		queryRes, resp, err := e.executeQuery(ctx, query, originalQueries, timeRange)
  		if err != nil {
  			return nil, err
  		}
  		// azlog.Debug("AzureMonitor", "Response", resp)
  
  		err = e.parseResponse(queryRes, resp, query)
  		if err != nil {
  			queryRes.Error = err
  		}
  		result.Results[query.RefID] = queryRes
  	}
  
  	return result, nil
  }
docs: // executeTimeSeriesQuery does the following:
  // 1. build the AzureMonitor url and querystring for each query
  // 2. executes each query by calling the Azure Monitor API
  // 3. parses the responses for each query into the timeseries format