Я изо всех сил пытаюсь заставить таблицы агрегации работать. Вот как выглядит моя таблица фактов:
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
не включены в биты, поэтому, если я сделаю запрос с этими столбцами, эта таблица агрегации будет пропущена? Это противоречит тому, что я планировал. Мой план был до тех пор, пока вы делаете запрос по границам года, используйте эту таблицу агрегации.
Я не понимаю, почему это не работает и почему не удается правильно построить бит-ключи. Я пробовал отлаживать код мондриуса, но выясняя, какой столбец отображает, какая позиция в бит-ключах не очевидна. Я чувствую, что это не должно быть так сложно, но все, что там действительно не очень хорошо объясняет. И эта архитектура таблицы агрегации действительно сломается.
Что я делаю неправильно? И почему мое решение не работает?
Обновить Вот мой файл 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