This article describes how to reference table parameters within a Rule such as the data set variables and questions that appear in the rows and columns of the table.
- A table with a Rule applied.
- You have read How to Create a Custom Rule.
Referencing variables in a table
The naming conventions of the questions used in a table follow the field colors in Q’s table interface. Row questions are referred to as blue questions and column questions are referred to as brown questions.
In this example, the following would return the names of the input questions in our table:
table.blue // 'Row' question
table.brown // 'Column' question
Note, if the table is not a crosstab then the latter will return RAW DATA or SUMMARY according to the table setup.
We can also access details about these variable sets by using
brownQuestion to find out their Variable Type and Question Type, for example:
Calculating temporary tables
There are times when you may wish to pull values from a different table with the same dimensions or a modified version of your table that has been filtered or weighted differently. The way this works in Q is you need to calculate a temporary table in order to access these values, as a Rule can’t reference another table in your project. Note, this approach could lead to slow-running tables, especially when used on a large table, a large data set, or both, so care needs to be exercised.
Q allows you to do this using the
calculateTable function which references table questions by question name, and filter and weight variables by name (found in the Question and Name fields in the Variables and Questions tab respectively):
calculateTable(ROWS, COLUMNS, [filter], weight)
To create a table using the same original input variables, filters and weight, you would do the following:
var tab = calculateTable(table.blue, table.brown, ['!UseQFilters'], '!UseQWeight');
To create a table using the same original input variables but with a different filter applied (called target_segment) and a different weight variable applied (called weighting):
var tab = calculateTable(table.blue, table.brown, ["target_segment"], weighting);
To create a table using different input variables and no filters or weight:
var tab = calculateTable("Q1b - Awareness", "Q3 - Preferred cola", null, null);
Note, if your current table has no filter or weight applied, using
'!UseQWeight' in your last arguments will respect this.
As with obtaining the statistics from the current table, here we could likewise pull the % statistic from our temporary table called
tab like so:
var vals = tab.get("%");