Row.record.cells is not an array?

So row.record.cells is a two dimensional structure called RecordCells.

The first dimension is the columns of the project and the second is "An array of the cells in the given column of the record".

As already was pointed out you need to first specify the first dimension (column name) to be able to access the second dimension (cell array).

row.record.cells[columnName]

Note that columnName is not a placeholder but actually a variable containing the name of the current column.

To be able to show the values of the cells you then would also need to add .value, because OpenRefine does not have a concept of representing "(Cell)Objects" in the GUI (yet).

row.record.cells[columnName].value

Let's wrap this knowledge into a more complex GREL expression, that you can use for example in a Custom text facet.

and(
  row.record.cells[columnName].value.uniques().length() == 1,
  row.record.rowCount > 1
)

This expression checks whether the current column of the record only contains one unique value by using uniques and length. We have to add a second expression to distinguish between records that only have one element using record.rowCount and combining the two expressions using and.

Let's also add some sugar to the output by using the conditional if:

if(
  and(
    row.record.cells[columnName].value.uniques().length() == 1,
    row.record.rowCount > 1
  ),
 "all idendical",
 "different values"
)

This expression will also "translate" the meaning of true and false to human readable text labels.