I'm building a model-driven app. I want to create a form that uses cascading lookups - lets call them lvl1, lvl2, and lvl3 (there may be more lvls but right now I only have three). A single term from lvl2 can relate to multiple terms in lvl1 (i.e. 1:M from lvl1 to lvl2), likewise a term from lvl3 can related to multiple terms from lvl2.
If it helps to understand this from a data perspective, think about this; city names are likely unique within a state/province, but may not be unique within a country, likewise state/province names within a country vs. globally. The relationships are inherently many to many. How do you set up a three level cascading lookup that honors those relationships and allows filtering lvl2 by lvl1 and lvl3 by lvl2?
I have two questions:
1) How do I set up the lookups i.e. define the tables?
2) How do I use them on a data entry form so that lvl2 is filtered by the applicable lvl1 terms and lvl3 filtered by the applicable lvl2 terms?
What I've already tried
Simple lookups
I've created a table with lvl1 terms and a table with lvl2 terms. The lvl2 terms table has a lookup to lvl1 terms. When I import data into this table things work fine because lvl1 terms are unique. I can have "duplicate" lvl2 terms that relate to different lvl1 terms.
I've also created a table with lvl3 terms that has a lookup to lvl2 terms. When I try to import data into this table I get failures because there are duplicate lvl2 terms and the import doesn't know which lvl2 term the lvl3 term should be related to. This is the problem that doesn't have a workable solution, so far as I can tell. On a data entry form, when I create columns that use these lookups I'm able to use filtering to show only the cascaded/applicable values.
Many to Many tables between lvl1 & lvl2 and lvl2 & lvl3
I've created lvl1, lvl2, and lvl3 tables and imported the unique values for each lvl into those tables. I've then created a M:M for the relationship between lvl1 and lvl2 that has M:1 relationships to lv1 and lv2. I've done likewise for the relationship between lvl2 and lvl3. I've imported the relationships into those tables. So far, so good. On a data entry form, when I create columns that use these lookup tables:
- the column for the lvl1 value references the lvl1 lookup table,
- the column for the lvl2 value references the M:M table that joins lvl2:lvl1
- the column for the lvl3 value references the M:M table that joins lvl3:lvl2,
I'm unable to filter lvl3 column based on the choice in lvl2 column (I am able to filter lvl2 column based on the choice in lvl1. I'm not sure I understand why that works but I'll take it.). This is the problem that doesn't have a workable solution so far as I can tell.
Can someone point out what I'm doing wrong? Is there another alternative to this?