我正在使用 SQL Server 2005 标准版分析服务 (SSAS)。我正在尝试从可以回答这些类型问题的零售 OLTP 数据库构建多维数据集:
- 列出所有使用某种付款方式支付的产品(哪些产品是使用凭证类型 X 等购买的)
- 创建用于支付产品 X 的支付类型频率的细目分类(使用现金支付产品 X 的次数,借方、贷方、代金券等的次数)
有 3 个主要的事务表:SALESHEADERS、SALESDETAILS 和 SALESPAYMENTS。
- SALESHEADERS 包含销售日期、收银员、POS 代码等。
- SALESDETAILS 包含表头代码、产品代码、数量、单价、毛利、折扣等。
- SALESPAYMENTS 包含标题代码、付款类型代码、付款金额等。
一笔交易可以包含很多产品。一笔交易可以支付多种支付方式。除通过标头(销售 ID)外,细节和付款之间没有任何联系。
目前我已经创建了 2 个多维数据集,一个销售多维数据集和一个支付多维数据集。
销售多维数据集是通过连接标题和详细信息创建的。付款多维数据集是通过连接标题和付款创建的。
两个多维数据集都表现良好,但它们无法回答我帖子顶部的问题。
您需要从
cross join
详细信息和付款开始,因为您说“任何交易中包含某种付款方式的产品都被视为使用该付款方式付款”,因此您实际上是在要求交易的一部分是如果使用多种付款方式,则计算多次。感谢@JackPDouglas 的指导,我想我可能对自己的问题有了答案。这是一个黑客,但我认为它会起作用:
用户只对某些类型的支付和某些类型的产品感兴趣。我将仅为详细视图中的那些付款类型附加子查询:
还有付款视图中产品的一些子查询。想法?
编辑
正如@JackPDouglas 所建议的,子查询可以从“选择”部分移动到“来自”部分以使其成为一个连接:
或者它也可以做成一个单独的视图: