我一直在努力让聚合表发挥作用。这是我的事实表的样子:
employment_date_id
dimension1_id
dimension2_id
dimension3_id
dimension4
dimension5
measure1
measure2
measure3
我正在折叠年、季度和月的 employment_date_id
以仅包含年份,但包含所有其他列。这就是我的聚合表的样子:
yearquartermonth_year
dimension1_id
dimension2_id
dimension3_id
dimension4
dimension5
measure1
measure2
measure3
fact_count
我只是折叠日期的年份部分。其余字段保持原样。这是我的配置:
<AggFactCount column="FACT_COUNT"/>
<AggForeignKey factColumn="dimension1_id" aggColumn="dimension1_id"/>
<AggForeignKey factColumn="dimension2_id" aggColumn="dimension2_id"/>
<AggForeignKey factColumn="dimension3_id" aggColumn="dimension3_id"/>
<AggMeasure name="[Measures].[measure1]" column="measure1"/>
<AggMeasure name="[Measures].[measure2]" column="measure2"/>
<AggMeasure name="[Measures].[measure3]" column="measure3"/>
<AggLevel name="[dimension4].[dimension4]" column="dimension4"/>
<AggLevel name="[dimension5].[dimension5]" column="dimension5"/>
<AggLevel name="[EmploymentDate.yearQuarterMonth].[Year]" column="yearquartermonth_year"/>
我的大部分内容是从 documentation 复制聚合表的第二个示例。 。我的大多数列都没有折叠到表中,而是维度表的外键。
我尝试执行的查询类似于:
select {[Measures].[measure1]} on COLUMNS, {[EmploymentDate.yearQuarterMonth].[Year]} on ROWS from Cube1
问题是,当我调试它并打开日志记录时,我看到如下所示的位键:
AggStar:agg_year_employment
bk=0x00000000000000000000000000000000000000000000000111111111101111100000000000000000000000000000000000000000000000000000000000000000
fbk=0x00000000000000000000000000000000000000000000000000000001101111100000000000000000000000000000000000000000000000000000000000000000
mbk=0x00000000000000000000000000000000000000000000000111111110000000000000000000000000000000000000000000000000000000000000000000000000
我的查询的位模式是:
Foreign columns bit key=0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
Measure bit key= 0x00000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000
因此我的聚合表被跳过。然而,这些列正是折叠到表格中的列。但查询和聚合表之间的位位置不同。我觉得奇怪的另一件事是,一部分列折叠到表中,但所有 AggForeignKeys
都没有作为位包含在内,因此如果我对这些列进行查询,则该聚合表将被跳过?这与我的计划相反。我的计划是只要您对年份边界进行查询就使用此聚合表。
我不明白为什么这不起作用以及为什么它无法正确构建位 key 。我尝试过调试 mondrian 代码,但弄清楚哪个列映射到位键中的哪个位置并不明显。我觉得这不应该这么难,但是外面的一切并不能很好地解释这一点。而这个聚合表架构实在是要打破。
我做错了什么?为什么我的解决方案不起作用?
<小时/>更新这是我的 mondrian.properties 文件:
mondrian.jdbcDrivers=com.mysql.jdbc.Driver,oracle.jdbc.driver.OracleDriver
mondrian.rolap.generate.formatted.sql=true
mondrian.rolap.localePropFile=locale.properties
mondrian.rolap.aggregates.Use=true
mondrian.rolap.aggregates.Read=true
mondrian.trace.level=2
mondrian.drillthrough.enable=true
最佳答案
可能是 mondrian.rolap.aggregates.Read 设置为 true 且 mondrian.rolap.aggregates.Use 设置为 false 的情况。
请设置 mondrian.rolap.aggregates.Use=true
并检查。
引用:http://mondrian.pentaho.com/documentation/configuration.php
如果不是这种情况,请附加与聚合表相关的所有属性和完整的多维数据集定义 XML。
关于olap - 蒙德里安:似乎无法使用聚合表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29782583/