Modelagem · leitura de 8 minutos

JOIN, associações e cardinalidade em CDS Views

Como evitar duplicidade de registros e valores em CDS, com exemplos de 1:N, seleção de textos e testes de granularidade.

Um erro de cardinalidade pode produzir uma view que ativa normalmente e ainda assim entrega resultados financeiramente errados. Em ABAP CDS, JOINs e associações devem respeitar o relacionamento real entre as fontes. Uma chave declarada na projeção não corrige um resultado duplicado.

1. Por que os totais dobram?

Imagine 100 itens de pedido, cada um valendo R$ 50. O total esperado é R$ 5.000. Se cada item for ligado a uma fonte que possui duas linhas compatíveis e o JOIN não restringir essa relação, o resultado terá 200 linhas. Uma soma ingênua mostrará R$ 10.000, mesmo que cada montante de origem esteja correto.

2. JOIN ou associação?

O JOIN realiza a combinação necessária para aquela seleção. A associação define uma relação reutilizável que pode ser navegada pelo consumidor. Em ambos os casos, a cardinalidade precisa refletir a realidade da fonte. Não use [0..1] apenas por conveniência quando múltiplas correspondências são possíveis.

3. Caso recorrente: tabela de textos

Uma tabela de descrição pode ter uma linha por idioma. Um JOIN somente pelo código encontra textos em português, inglês e outros idiomas e multiplica linhas. Se o contrato pede português, a condição de idioma deve estar no relacionamento ou no filtro, conforme a modelagem e o comportamento necessário para textos ausentes.

Fonte principal:  DOC  ITEM  VALOR
                   10    1     50

Texto sem filtro: CODIGO  IDIOMA
                  A       PT
                  A       EN

JOIN incompleto: DOC  ITEM  VALOR  TEXTO
                 10    1     50     PT
                 10    1     50     EN

Total original: R$ 50
Total duplicado: R$ 100

4. Testes que identificam o problema

  1. Conte as linhas e chaves distintas antes do join.
  2. Conte novamente após incluir cada fonte.
  3. Compare somas de valores monetários na mesma moeda.
  4. Verifique se os campos da condição ON realmente cobrem a chave lógica.
  5. Teste textos em vários idiomas, registros sem correspondência e períodos de validade.
Atenção: uma associação que parece 1:1 no conjunto de testes pode se tornar 1:N em produção. Cardinalidade é uma característica do contrato e dos dados, não apenas da amostra.
RL
Robson Leão

Consultor SAP com atuação em dados, analytics, planejamento e transformação digital. Conheça o autor.