The following M query produces the Relationships table by implementing joins to retrieve the table and column names on each side of each relationship:
let FromTableJoin = Table.NestedJoin( RelationshipsDMV,{"FromTableID"},TablesDMV,{"ID"},"TableDMVColumns", JoinKind.Inner), FromTable = Table.ExpandTableColumn(FromTableJoin, "TableDMVColumns", {"Name"}, {"From Table"}), ToTableJoin = Table.NestedJoin( FromTable,{"ToTableID"},TablesDMV,{"ID"},"TableDMVColumns", JoinKind.Inner), ToTable = Table.ExpandTableColumn(ToTableJoin, "TableDMVColumns", {"Name"}, {"To Table"}), FromColumnJoin = Table.NestedJoin( ToTable,{"FromColumnID"},ColumnsDMV,{"ID"},"ColumnsDMVColumns", JoinKind.Inner), FromColumn = Table.ExpandTableColumn(FromColumnJoin, ...