The view.columns parameter takes an array of column definitions to use. Each element in the array is either a column index in the base table, or an object which tells the chart how to build the column. In this case, the first element is a reference to the first column in the DataTable. The second element is an object describing a column of type "number", with the label "Germany", and a calculation function that populates the column with data.
The calculation function takes two parameters, a DataTable (represented by the variable "dt") and a row index (represented by the variable "row"). When the chart attempts to draw, it will attempt to calculate all of the rows necessary to draw the chart. For each row, the calculation function will be called, and provided with the base DataTable (as provided by the "dataTable" chart parameter) and the row index.
In this case, the function checks the value in the DataTable (dt) at (row, 0) to see if it matches "Germany". If it does, then the function returns an object with two properties: v, the value at (row, 0); and f, the formatted value at (row, 0). If it does not match, then the function returns null. The syntax used here is called a ternary operator, and generally works in the form (condition) ? value if true : value if false. You can think of it as a one-line if statement, most frequently used (in my experience) for assigning values in binary situations. Here, it is shorthand for this:
if (dt.getValue(row, 0) == 'Germany') {
return {v: dt.getValue(row, 1), f: dt.getFormattedValue(row, 1)};
}
else {
return null;
}
Is that clear?