anchor.diff:  
         for block in vals.Split([| block |], StringSplitOptions.RemoveEmptyEntries) do
           let flds = block.Split([| tok |], StringSplitOptions.None) 
  -        { RawMeasurement.ID = Guid.NewGuid() 
  -          Time = DateTimeOffset.Parse(flds.[0])
  -          Pollutant = pollutant
  -          Station = station
  -          Value = float flds.[4] } |> rows.Add
  +        let value = float flds.[4]
  +        if isValidValue value then
  +          { RawMeasurement.ID = Guid.NewGuid(); Time = DateTimeOffset.Parse(flds.[0])
  +            Pollutant = pollutant; Station = station; Value = value } |> rows.Add
       with e -> failwithf "Failed to process observation:\n%A\n\n%A" obs e
     rows.ToArray()    
   
  
positive.code: // Scripts to read downloaded XML files from storage and write them to SQL database
  // ------------------------------------------------------------------------------------------------
  
  let readMeasurements (pollutants:IDictionary<_, _>) year (station:Station) = 
    let blobName = sprintf "%d/%s.xml" year (station.ID.ToLower())
    let data = Data.Parse(Storage.downloadBlobAsText "defra-airquality" blobName)
  
negative.code: "CREATE NONCLUSTERED INDEX IX_PollutantID ON [defra-airquality-monthly-measurement] (PollutantID)" 
  |> Database.executeCommandWithTimeout (60 * 15)
  
  // This is how to drop some index in case we do not actually want it!
  "DROP INDEX IX_measurement_??? ON [defra-airquality-daily-measurement]" 
  |> Database.executeCommand