What are references and strings?
Let's start with the basics:
References are links to rows or people and therefore have all sorts of their own metadata. They also have a name based on the Display Column.
Strings are a set of characters, like the name or status of a task, or the cost of an item on your grocery list.
This is how they look in practice:
"This is a string" is just text in the canvas. "This is a reference" is a link to a row in a table elsewhere in your doc. When you type an @, you can place a reference to both People who are collaborating on your doc, as well as to rows in tables. The example above is referencing the only row in the table below:
The text that you see in the reference is actually the identifying characteristic of the row, or the Display Column. Here's what the same reference looks like when I change the Display Column:
The bottom line: a reference has all the underlying detail of the row, and the Display Column is its name.
Key Things to Remember
Rows in Coda can be referenced. So for example Molly is a reference to a row in the Team Member table above. Since it carries all the information from the row, you can also get properties of that row by typing =@Molly.[Phone number] to receive 555-555-5555.
Lookup columns in Coda are full of row references. So for example, the [Assigned to] column in the Tasks table above is full of references to the Team Member table below it. You can add columns that then get properties from those references - e.g. =[Assigned To].[Phone number].
A common pattern is to do a reverse lookup - You may want to find out for every Team Member, which tasks are assigned to that member, or what is the total duration of the tasks they have signed up for. The Lookup formula is one key pattern for doing this (note that you can do it with the Filter formula as well). Now the key thing to watch for is that you're either comparing references to references, or strings to strings. So in the example above, I've added 3 versions of each lookup. For example, for Tasks Assigned, the 3 patterns are:
=Tasks.Lookup([Assigned To], thisRow) → This compares references in the [Assigned To] column to "this row". Since these both refers to rows, this works.
=Tasks.Lookup([Name of Assignee], thisRow.Name) → This compares the [Name of Assignee] column in the Tasks table (which is a string), to the Name field in the current row (which is also a string). This works as well.
=Tasks.Lookup([Name of Assignee], thisRow) → This doesn't work because it's trying to compare a string from [Name of Assignee] to a row (thisRow).