从同一个累积事实表中分离和独立的计数

Posted

技术标签:

【中文标题】从同一个累积事实表中分离和独立的计数【英文标题】:Separate and independent counts from the same accumulating fact table 【发布时间】:2011-09-12 03:31:58 【问题描述】:

所以,我有一个销售事实表,它基于交易生命周期模型(或累积事实快照表),具有许多不同的日期键列(如销售日期、退款日期等)。我对每个日期列做了不同的度量,即非空销售日期键列的总和是[销售额],非空退款日期键列的总和是[退款数]等。每个的日期键列与不同的日期键维度相关。销售日期维度和退款日期维度是角色扮演维度,均基于同一个 DimDate 表。还有其他非基于日期的维度,但为了这个示例,我将保持简单 - storeType 有另一个额外维度(零售、电子商务等)

当我浏览多维数据集时(因为大多数用户会通过 excel 浏览和探索多维数据集),我可以将 [销售数量] 和 [退款数量] 拖到列部分,然后我可以将 StoreType 维度拖到行部分,它会正确显示数据:

Number of Sales Number of Refunds ---------------------------------------------------- Retail 10 8 eCommerce 5 2

这很好,因为我没有应用任何日期过滤器,所以它会显示所有内容。我已经确认了 Fact 表中的数据,确实,数字是正确的。

但是我想对 [销售数量] 和 [退款数量] 应用相同的日期过滤器 - 所以我将这两个维度拖到过滤器区域,并将相同的日期过滤器应用到两者 - 和当然,两列的数字都是一样的:

Number of Sales Number of Refunds ---------------------------------------------------- Retail 5 4 eCommerce 5 4

.. 因为我认为通过有效地将一个日期应用于两个日期维度,我将过滤到同一组行(因为它们来自同一个表)。我知道这是不正确的,因为我可以从 Fact 表中查询各个行并查看它们具有不同的值。

基本上,我想要将两列显示在一起,但实际上它们没有任何共同点。我什至可以在每列上设置两个不同的日期过滤器,即显示 2010 财年的所有销售额并显示 2011 财年的所有退款。这又是用户可以完全浏览的,因此必须提供这些措施而不必做复杂的 MDX 查询。

我想我可以创建另一个事实表来在事务性事实表中存储相同的数据,然后我可以单独计算它 - 但是让两个单独的事实表或多或少地计算相同的东西是没有意义的。

知道怎么做吗?救命!!

【问题讨论】:

【参考方案1】:

听起来您可能需要将 case 语句应用于聚合列。类似这样的东西:

SELECT StoreType
     , SUM(CASE WHEN SalesCol IS NOT NULL THEN 1 ELSE NULL END) AS NumSales
     , SUM(CASE WHEN RefundCol IS NOT NULL THEN 1 ELSE NULL END) AS NumRefunds
FROM FactTable
WHERE SaleDate BETWEEN Date1 AND Date2
GROUP BY 1

【讨论】:

以上是关于从同一个累积事实表中分离和独立的计数的主要内容,如果未能解决你的问题,请参考以下文章

从 Pandas 数据框中另一个系列分段的日期累积计数创建增量计数

查询以查找累积同时减去其他计数

SQL 累积不重复计数

在 Nhibernate 中分离和附加代理

过去 X 个月内的 PostgreSQL 累积计数

用于处理事实表中的不同计数的聚合表