在单个报告中结合加法和半加法事实

Combining additive and semi-additive facts in a single report

我正在编写季度报告。报告应如下所示:

col Calculation Source table
Start_Balance Sum at start of time period Account_balance
Sell Transactions Sum of all sell values between the two time periods Transactions
Buy Transactions Sum of all buy values between the two time periods Transactions
End Balance Sum at the end of time period Account_balance

所以例如

Calculation sum
Start_Balance 1000
Sell Transactions 500
Buy Transactions 750
End Balance 1250

这里的问题是我正在使用关系星型模式,其中一个事实是半加性的,另一个是加性的,所以它们在时间维度上的表现不同。

在我的案例中,我使用的是 Cognos 分析,但我认为这个问题适用于任何 BI 工具。处理此问题的最佳做法是什么?我确定我可以想出一些 sql 查询,将这两个 table 组合成一个 table 报告从中读取,但这似乎不是最佳实践,或者是吗?另一种方法是在 BI 工具中创建一些度量,我不太喜欢这种方法,因为它似乎是最不可持续的方法,而且我不熟悉它。

您可能需要在 Framework Manager 模型中设置行列式。以下内容很好地解释了这一点: https://www.ibm.com/docs/en/cognos-analytics/11.0.0?topic=concepts-multiple-fact-multiple-grain-queries

对于 Cognos,您可以拼接 tables

该技术与 Cognos 聚合的方式有关

框架管理器连接通常是 1 到 n 以描述关系

中间有事实 table 并代表 N 的星型模式 加上所有外tables describing/grouping的数据,代表1

  • 事实tables,定量数据,你要求和的东西应该在关系的多边上
  • 描述性tables,定性数据,你想描述或分组的东西应该在第一个(而不是很多)

为了拼接我们有多个table我们想要成为事实

采用常用的 table 进行分组,例如句点(可能还有其他一些,例如公司或客户等)

将每个事实 table 与公共 table(又名维度)联系起来,如下所示:

  • Account_balance N 对 1 个公司
  • Account_balance N 到 1 个周期
  • Account_balance N 对 1 个客户
  • 交易 N 到 1 个公司
  • 第 N 至 1 个周期的交易
  • 交易 N 到 1 个客户

这将导致 Cognos 执行带有合并的完全外部连接

允许您处理 table 个事实,即使它们具有不同的粒度级别

请记住,对于外部联接,您可能必须处理空值,并且您可能需要根据报告需要使用汇总过滤器

您想在报告中包含常见的 table,这可能与您希望报告的外观相冲突

一个简单的解决方法是将它们添加到布局中,然后将 属性 设置为方框类型 none,这样 sql 就会按照您想要的方式运行,并且报告看起来就像您想要的那样想要