anchor.diff:      }
   
       table("ods-table", rawData.slice(24, 44));
  +
  +    $('.tipsit').tipsy({fade: false, gravity: 's', html: true});
  +    $('.tipsit-n').tipsy({fade: false, gravity: 'n', html: true});
  +    $('.tipsit-w').tipsy({fade: false, gravity: 'w', html: true});
  +    $('.tipsit-e').tipsy({fade: false, gravity: 'e', html: true});
  +    $('.tipsit-treemap').tipsy({fade: false, gravity: $.fn.tipsy.autoNS, html: true});
     });
   });
   
  
positive.code:     .enter()
      .append( "th" )
      .attr("class", (d, i) => "ods-" + i + " tipsit")
      .attr("title", function ( d ) { return d; })
      .text( function ( d ) { return d; } );
  
    // append the header row
    // thead.append( "tr" )
    //   .attr("class", "ods-header-row-labels")
    //   .selectAll( "th" )
    //   .data( columnNames )
    //   .enter()
    //   .append( "th" )
    //   .attr("class", (d, i) => "ods-" + i)
    //   .text( function ( columnNames ) { return columnNames; } );
  
    // create a row for each object in the data
    let rows = tbody.selectAll( "tr" )
  
negative.code: 
    let columnNames = [""].concat(Object.values(data[0])).slice(0, 18).concat([""]);
    let columnNumbers = [""].concat(Object.keys(data[0]).map(i => parseInt(i)).filter( i => i > 0 )).concat(["TOTAL"]);
  
    // append the header row with the numbers
    thead.append( "tr" )
  