Мондриан, все меры куба пусты.

Я использую плагин Saiku на Pentaho для анализа куба. Несмотря на то, что все поля измерений и измерений видны, факты не отображаются, все ячейки пусты. (Если на панели инструментов выбрана опция «Не пусто», Saiku возвращает «Нет результата», когда эта опция не выбрана, отображается таблица со списком всех элементов, правильно расположенных в столбцах и строках, но без значений ячеек). Поскольку значения членов в столбцах и строках верны, я знаю, что Saiku правильно читает XML-файл куба и источник данных MySQL. Я думаю, что может быть какая-то проблема с указанными измерениями, но я не могу найти никакой ошибки (нет ошибок в консоли или журналах, которые я вижу). Обратите внимание, что я получаю эту проблему независимо от того, какие измерения я выбираю при кубировании в Saiku. Это файл схемы Mondrian, который я создал с помощью schema workbench.

<Schema name="Test Small4">
<Cube name="Policy Cube" caption="A small test" visible="true" description="Policy data description" cache="true" enabled="true">
<Table name="fact_policy">
</Table>
<Dimension type="StandardDimension" visible="true" foreignKey="deductable_id" highCardinality="false" name="Deductable" caption="Caption: deductable">
  <Hierarchy visible="true" hasAll="false">
    <Table name="deductable">
    </Table>
    <Level name="Deductable Type" visible="true" column="type" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
    <Level name="Deductable Limit" visible="true" column="deductable_limit" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
    <Level name="Deductable Cap" visible="true" column="cap" type="Numeric" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
  </Hierarchy>
</Dimension>
<Dimension type="StandardDimension" visible="true" foreignKey="endorsement_id" highCardinality="false" name="Endorsement" caption="Caption: Endorsement">
  <Hierarchy visible="true" hasAll="true">
    <Table name="endorsement">
    </Table>
    <Level name="Endorsement Type" visible="true" column="type" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
    <Level name="Endorsement Number" visible="true" column="number" type="Numeric" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
    <Level name="Endorsement Effective Date Regular" visible="true" column="effective_date" type="Date" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
    </Level>
  </Hierarchy>
</Dimension>
<Measure name="Quantity Unique Rate" column="rate" datatype="Numeric" aggregator="distinct-count" visible="true">
</Measure>
<Measure name="Average Rate" column="rate" datatype="Numeric" aggregator="avg" visible="true">
</Measure>
<Measure name="Average Premium" column="premium" datatype="Numeric" formatString="#,###" aggregator="avg" visible="true">
</Measure>
<Measure name="Num Rates" column="rate" datatype="Integer" aggregator="distinct-count" visible="true">
</Measure>
<Measure name="String test" column="rate" datatype="String" aggregator="distinct count" visible="true">
</Measure>
<Measure name="Sum test" column="system_id" datatype="Integer" aggregator="sum" visible="true">
</Measure>
<Measure name="Test" column="system_id" datatype="Integer" formatString="Standard" aggregator="count" visible="true">
</Measure>
<CalculatedMember name="Premium Rate dif" formula="[Measures].[Average Rate]-[Measures].[Average Premium]" dimension="Measures" visible="true">
</CalculatedMember>

Любая идея, почему это может быть? Как я могу отладить эту проблему?


person BOENDAGGER    schedule 12.06.2014    source источник


Ответы (1)


Вам не хватает атрибута primaryKey в иерархии. Элемент Dimension имеет атрибут ForeignKey, правильно идентифицирующий столбец из таблицы фактов, но элемент Hierarchy не указывает primaryKey из таблицы измерений для выполнения соединения.

Таким образом, все соединения вернут 0 строк. (Я понятия не имел, что Мондриан даже примет такую ​​схему, так как я ожидал, что условие соединения будет искажено при тестировании схемы)

person nsousa    schedule 12.06.2014
comment
Еще одно: когда вы устанавливаете для hasAll значение false в Hierarchy, вы всегда должны также устанавливать defaultMember. В противном случае будет использоваться первый элемент измерения, и первый элемент определяется естественным порядком элементов иерархии. - person nsousa; 12.06.2014
comment
Спасибо, nsousa, я вчера наткнулся на разрешение. Я следил за обучающим видео, сделанным самими Pentaho (youtube.com/watch?v=baC8dQMyp9E), где они не указали это поле, и неожиданно, что оно необходимо (для людей, плохо знакомых с Мондрианом), поскольку можно было бы ожидать объединения по первичному ключу таблицы. Спасибо за подробный ответ. - person BOENDAGGER; 13.06.2014