У меня есть измерение времени, определенное примерно так:
<Dimension name="optin" type="TimeDimension">
<Hierarchy name="optin" hasAll="true" allMemberName="all optin" primaryKey="profile_id">
<Table schema="schema1" name="profiles"/>
<Level name="optin_year" column="optin_year" uniqueMembers="false" type="Numeric" levelType="TimeYears"/>
<Level name="optin_quarter" column="optin_quarter" uniqueMembers="false" type="Numeric" levelType="TimeQuarters"/>
<Level name="optin_month" column="optin_month" uniqueMembers="false" type="Numeric" levelType="TimeMonths"/>
<Level name="optin_day_in_month" column="optin_day_in_month" uniqueMembers="false" type="Numeric" levelType="TimeDays"/>
</Hierarchy>
</Dimension>
Это хорошо работает для сегментации по разным частям даты (год, квартал, месяц, день). Однако я также хочу иметь возможность сообщать о количестве профилей, в которых заполнено поле optin
(не NULL). Для невременных измерений добавление этой иерархии к вышеуказанному измерению работает:
<Hierarchy name="defined" hasAll="true" allMemberName="all optin" primaryKey="profile_id">
<Table schema="schema1" name="profiles"/>
<Level name="defined" uniqueMembers="true" type="Boolean">
<KeyExpression>
<SQL>optin_day_in_month IS NOT NULL</SQL>
</KeyExpression>
</Level>
</Hierarchy>
Однако, когда я добавляю это к измерению времени, я получаю следующее исключение от Мондриана:
Level '[optin.defined].[defined]' belongs to a time hierarchy, so
its level-type must be 'Years', 'Quarters', 'Months', 'Weeks' or
'Days'.
Я могу поместить иерархию defined
в отдельное измерение, но тогда я получу два неортогональных измерения, которые не имеют смысла сегментировать одновременно. На самом деле это являются двумя иерархиями в одном измерении. Я также могу превратить измерение optin
в измерение, не связанное со временем, но тогда я потеряю возможность использовать функции временных рядов (PARALLELPERIOD
, YTD
и т. д.).
Каков наилучший способ добиться того, чего я хочу - иметь возможность сегментировать части поля даты и определить, пусто оно или нет?