Estou usando o SQL Server 2005 Standard Edition Analysis Services (SSAS). Estou tentando criar cubos a partir de um banco de dados OLTP de varejo que possa responder a esses tipos de perguntas:
- Liste todos os produtos que foram pagos com determinado tipo de pagamento (quais produtos são comprados com voucher tipo X, etc)
- Crie um detalhamento da frequência do tipo de pagamento usado para pagar o produto X (quantas vezes o dinheiro é usado para pagar o produto X, quantas vezes débito, crédito, voucher etc.)
Existem 3 tabelas de transações principais: SALESHEADERS, SALESDETAILS e SALESPAYMENTS.
- SALESHEADERS contém data de vendas, caixa, código POS, etc.
- SALESDETAILS contém código do cabeçalho, código do produto, quantidade, preço unitário, bruto, desconto, etc.
- SALESPAYMENTS contém código de cabeçalho, código de tipo de pagamento, valor do pagamento, etc.
Uma transação pode conter muitos produtos. Uma transação pode ser paga com vários tipos de pagamento. Não há conexões entre o detalhe e o pagamento, exceto através do cabeçalho (ID de vendas).
Atualmente criei 2 cubos, um cubo de vendas e um cubo de pagamento.
O cubo de vendas é criado unindo o cabeçalho e o detalhe. O cubo de pagamento é criado unindo o cabeçalho e o pagamento.
Ambos os cubos têm um bom desempenho, mas não podem responder às perguntas no início do meu post.
Você precisa começar com
cross join
detalhes e pagamento, porque diz "os produtos em qualquer transação que inclua um determinado tipo de pagamento são considerados pagos com esse tipo de pagamento", então você está efetivamente solicitando que partes de uma transação sejam contado várias vezes se houver vários tipos de pagamento usados.Obrigado a @JackPDouglas pela orientação , acho que posso ter uma resposta para minha própria pergunta. É um hack, mas acho que vai funcionar:
O usuário está interessado apenas em alguns tipos de pagamentos e alguns tipos de produtos. Anexarei subconsulta apenas para esses tipos de pagamento na exibição de detalhes:
Também algumas subconsultas para produtos na visualização de pagamento. Pensamentos?
EDITAR
Conforme sugerido por @JackPDouglas, a subconsulta pode ser movida da seção 'selecionar' para a seção 'de' para torná-la uma junção:
Ou pode ser feito em uma visão separada também: