数据建模设计

时间:2019-01-06 21:07:56

标签: sql-server ssas data-warehouse

我现在正在阅读Kimball的数据仓库书,同时,我正在为以下示例设计数据仓库:

1:客户可以购买会产生发票的产品,然后产生发票行。注意:库存行是一个累积表,即,如果他们订购数量为5的产品A,然后再订购5,则会有2条发票行和一个10行的库存行。

因此,根据描述的方案,以下设计将是适当的: 1.客户规模 2.产品尺寸 3.日期维度 3.发票事实 4.库存事实

现在,假设我想找出诸如以下问题的答案 1.当前哪些客户的库存为零,但最近3个月内已生成发票。同样会有其他类似的问题。 2.哪些客户拥有产品A但没有产品B

根据Kimballs的书,似乎两个事实表之间需要某种连接,例如一个子集?

这似乎效率很低,尤其是两个事实表之间记录的绝对大小。这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

  
    

哪些客户目前的库存为零,但在最近3个月内已生成发票。

  
test('Async function', async () => {
  expect.assertions(1);
  const result = await ContainerGlobals.getResponseFromURL();  // let the Promise resolve
  const data = result.getStatus();  // call getStatus on the result
  expect(data).toBe(207);  // SUCCESS
});
  
    

哪些客户拥有产品A但没有产品B

  
SELECT C.* 
FROM DimClient C
WHERE EXISTS (
  SELECT * FROM FactInvoice I 
  WHERE C.ClientKey = I.ClientKey
  AND InvoiceDate >= DATEADD(m,GetDate(),-3)
  )
AND NOT EXISTS (
    SELECT * FROM FactInventory V 
    WHERE InventoryLevel > 0 
    AND V.ClientKey = C.ClientKey
    AND (Maybe a predicate to limit to current inventory only)
    )

这些查询效率低下吗?没有比在源系统上运行相同查询的效率低

实际上,您的源系统可能需要更多的表,更多的连接,并且索引可能更少

星型模式的基础之一是针对分析进行了优化。

答案 1 :(得分:0)

Kimball认为这似乎是构建drilling-across的正确方法。他提到要使其正常工作,应将其设置为使用定义为hereexplained here的一致尺寸。 我无法说出这种情况下的效率/低效率。

相关问题