Modify Footers - Add Column Base Sizes

From Q
Jump to: navigation, search

This rule adds sample sizes for each column to the footer for a table or chart.


Client = 919; Supplier = 3650;

Technical details

By editing the rule, you can change the delimiter and the text that appears between the name of the column and the sample size. For example, to: Client base is 919 Supplier base is 3650

How to apply this rule

For the first time in a project

  • Select the table(s)/chart(s) that you wish to apply the rule to.
  • Start typing the name of the Rule into the Search features and data box in the top right of the Q window.
  • Click on the Rule when it appears in the QScripts and Rules section of the search results.


  • Select Automate > Browse Online Library.
  • Choose this rule from the list.

Additional applications of the rule

  • Select a table or chart that has the rule and any table(s)/chart(s) that you wish to apply the rule to.
  • Click on the Rules tab (bottom-left of the table/chart).
  • Select the rule that you wish to apply.
  • Click on the Apply drop-down and choose your desired option.
  • Check New items to have it automatically applied to new items that you create. Use Edit > Project Options > Save as Template to create a new project template that automatically uses this rule.

Removing the rule

  • Select the table(s)/chart(s) that you wish to remove the rule from.
  • Press the Rules tab (bottom-right corner).
  • Press Apply next to the rule you wish to remove and choose the appropriate option.

How to modify the rule

  • Click on the Rules tab (bottom-left of the table/chart).
  • Select the rule that you wish to modify.
  • Click Edit Rule and make the desired changes. Alternatively, you can use the JavaScript below to make your own rule (see Customizing Rules).


// Create the form.
form.setSummary("Show sample sizes in footers");
var label_text = form.newLabel('Between label and number:');
var text_box = form.newTextBox('between');
text_box.setDefault(' = ');
var label_text1 = form.newLabel('Delimiter:');
var text_box1 = form.newTextBox('delimiter');
text_box1.setDefault('; ');
form.setInputControls([label_text, text_box, label_text1, text_box1]);
var between = text_box.getValue();
var delimiter = text_box1.getValue();

// Getting the data
var column_n_missing = table.availableStatistics.indexOf('Column n') == -1;
var base_n_missing = table.availableStatistics.indexOf('Base n') == -1;
if (column_n_missing && base_n_missing)
    form.ruleNotApplicable("This rule only works one tables with Column n or Base n")
var column_ns = column_n_missing ? table.get('Base n') : table.get('Column n');

// Computing the ranges
var ranges = [];
for (var col = 0; col < table.numberColumns; col++) {
    var smallest_size = column_ns [0][col];
    var largest_size = smallest_size;
    for (var row = 0; row < table.numberRows; row++) {
        smallest_size = Math.min(smallest_size, column_ns [row][col]);
        largest_size = Math.max(largest_size, column_ns [row][col]);
    ranges.push(smallest_size  == largest_size ? smallest_size : smallest_size + " to " + largest_size);
// updating the footer
var ss = "";
if (ranges.length == 1 || table.blueQuestion.questionType == "Pick One - Multi")
    ss += ranges[0] + delimiter;
else {
    for (var col = 0; col < table.numberColumns; col++){
        var col_label = table.columnLabels[col];
        if (col_label != "NET" && col_label != "Total" && col_label != "SUM") {
            ss +=  table.columnLabels[col] + between + ranges[col] + delimiter;
    //ss = ss.substring(0, ss.length - delimiter.length);           
table.extraFooters = [ss];

See also