如何存储蒙德里安查询的数据?
How to store data for mondrian queries?
我正在尝试了解我应该如何存储数据以便使用 mondrian 处理的 MDX 查询来查询它。我在存储数据时遇到问题,因为我不知道是否应该在数据中包含冗余。
例如,我有 YEAR_2017
及其每个季度的事实(Q1_2017
、Q2_2017
、Q3_2017
和 Q4_2017
)。
YEAR_2017
个事实的度量值确实是每个季度值的总和。同样,我存储 TOP_HIERARCHY
值及其 CHILD_HIERACHY
值,再次产生冗余。
结果是,当我为 YEAR_2018
查询 TOP_HIERARCHY
时,我得到的结果是我的 TOP_HIERARCHY
的每个子值的总和以及每个子值的总和, 每个季度的总和和当年的值。
最后我得到了完全错误的结果,所以我的问题是,我是否应该简单地在事实 table 中使用无子层次结构的值?
您不应将粒度数据和聚合数据保存在同一个 table 中。
如果您的数据聚合正确,那么您应该只保留事实中最原子的数据值 table。 Mondrian 负责将月份汇总为季度,将季度汇总为年等。
您通常会创建星型模式:一个事实 table 和多个维度 table。
每个维度都有一个层次结构的每个级别的列。因此,您的日期维度将有一个主键 date_id
,然后是 year
、quarter
、month_number
、month_name
、day_of_month
和任何其他您可能想要添加的字段以允许向下钻取。
您的事实 table 每个维度的每个键都有 1 列,然后每个度量有 1 列。例如 date_id
、customer_id
、product_id
、quantity_sold
、total_amount
.
Mondrian 模式将指定如何聚合度量(通常是 sum
),并使用正确的连接、分组依据和聚合发出必要的 SQL 查询。
我正在尝试了解我应该如何存储数据以便使用 mondrian 处理的 MDX 查询来查询它。我在存储数据时遇到问题,因为我不知道是否应该在数据中包含冗余。
例如,我有 YEAR_2017
及其每个季度的事实(Q1_2017
、Q2_2017
、Q3_2017
和 Q4_2017
)。
YEAR_2017
个事实的度量值确实是每个季度值的总和。同样,我存储 TOP_HIERARCHY
值及其 CHILD_HIERACHY
值,再次产生冗余。
结果是,当我为 YEAR_2018
查询 TOP_HIERARCHY
时,我得到的结果是我的 TOP_HIERARCHY
的每个子值的总和以及每个子值的总和, 每个季度的总和和当年的值。
最后我得到了完全错误的结果,所以我的问题是,我是否应该简单地在事实 table 中使用无子层次结构的值?
您不应将粒度数据和聚合数据保存在同一个 table 中。
如果您的数据聚合正确,那么您应该只保留事实中最原子的数据值 table。 Mondrian 负责将月份汇总为季度,将季度汇总为年等。
您通常会创建星型模式:一个事实 table 和多个维度 table。
每个维度都有一个层次结构的每个级别的列。因此,您的日期维度将有一个主键 date_id
,然后是 year
、quarter
、month_number
、month_name
、day_of_month
和任何其他您可能想要添加的字段以允许向下钻取。
您的事实 table 每个维度的每个键都有 1 列,然后每个度量有 1 列。例如 date_id
、customer_id
、product_id
、quantity_sold
、total_amount
.
Mondrian 模式将指定如何聚合度量(通常是 sum
),并使用正确的连接、分组依据和聚合发出必要的 SQL 查询。