Yes, Standard → Virtual relationships are supported. The mechanism works through Alternate Keys on the standard table, with the virtual table's lookup External Name matching that key. I have seen this pattern work in production environments. I haven't yet implemented these strategies at this scale, but these are the options I am contemplating.
Your repeated failures suggest either:
-
ExternalName collision on B
-
Alternate Key on A not fully indexed
-
Text formatting mismatch between A.sCOM_Clave and B.sCOM_Clave_Key
The "can't open table" error after adding the relationship indicates an ExternalName conflict or provider metadata issue.
About your GUID approach:
Bringing GUID from SQL table E into B view via JOIN could work better than COM_Clave. Here's why:
If A uses GUID as PK and E contains matching GUIDs, you can:
-
Create view v_B with CAST(E.GUID AS nvarchar(50)) AS GUID_Key
-
Map B lookup External Name to GUID_Key
-
Point that lookup directly to A's PK
This avoids Alternate Keys entirely because lookups to standard tables resolve via PK by default when the External Name matches a GUID format.
Critical: SQL GUIDs must format as xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Use LOWER(CONVERT(nvarchar(36), E.GUID)) in your view.
About your options:
Option 1 with 10M rows: expensive, yes. Factor Dataverse database capacity costs before choosing this.
Option 2 Canvas workaround: you asked about filtering B by related A in another form. Canvas components can accept context variables, so you can filter B by A.sCOM_Clave or A.GUID passed from the parent form. Requires custom connectors if B exceeds delegation limits.
Option 3 Mapping bridge: the bridge table Map_AB is standard, not virtual. You populate it once with all distinct sCOM_Clave values and link each to A. Then B (virtual) looks up to Map_AB (standard) using sCOM_Clave. This avoids the Virtual → Standard direct link that keeps failing for you. The relationship chain becomes: A ← Map_AB ← B. Both hops use proven patterns.
My honest recommendation:
Try the GUID approach first. If E.GUID exists and matches A.PK, your view joins B and E, exposes GUID_Key, and B's lookup points to A via that GUID. This removes text formatting risk and Alternate Key dependency.
If GUID works, you solved it without workarounds.
If GUID still fails with the same "can't open table" error, then Option 3 is your safest path. I have not personally deployed 10M row virtual tables with cross-type relationships, but the mapping bridge pattern is documented and supported.
If these approaches still encounter issues: I encourage you to review the entire configuration once more against the steps outlined in my earlier responses. Sometimes small details like column formatting, metadata caching, or security roles can block relationships in ways that are not immediately obvious. Walk through the validation checklist systematically, and if something still feels off, share screenshots of your exact column mappings and relationship definitions. Fresh eyes on the specific configuration often reveal the missing piece.