时间维度内的非时间级别

时间:2013-12-17 23:17:22

标签: mondrian

我的时间维度定义如下:

<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 维度进入非时间维度,但后来我失去了能力 使用时间序列函数(PARALLELPERIODYTD等)。

实现我想要的最好方法是什么 - 能够分段 日期字段部分以及它是否为空?

1 个答案:

答案 0 :(得分:0)

  

级别'[optin.defined]。[已定义]'属于时间层次结构,所以   它的等级类型必须是'年','宿舍','月','周'或   '天'。

错误告诉您,在时间维度(Regular)内不可能有“非基于时间”(TimeDimension)级别:

<Dimension name="optin" type="TimeDimension">
   ...
   <Level name="defined" uniqueMembers="true" type="Boolean">

常规类型的级别只能与StandardDimension一起使用。

  

实现我想要的最好方法是什么 - 能够分段   日期字段部分以及它是否为空?

我认为你没有正确使用时间维度。标准方式是时间维度如下:

  • DWH:在您的数据仓库中预加载时间数据(每天的记录,比如1900-01-01到2099-12-31) - 表dim_time和{ {1}}(例如date_key
  • OLAP架构:适当的时间维度20150123,其中包含<Dimension name="Time" type="TimeDimension">“年/季/月/周/天”。与你拥有的相似,但这样它包含了所有的日子。 levels属性指向primary_key

下一步是调整date_key(个人资料):

  • DWH: optin行数据+ optin_date_key(可以为null或有值)
  • OLAP架构:为optin创建多维数据集,使用之前创建的时间维度profile指向foreign_key。并测量将所有配置文件与非空optin_date_key值相加。

配置文件多维数据集的示例OLAP代码:

optin_date_key

通过这种方式,您应该能够报告填写了<DimensionUsage source="Time" name="Time" caption="Profile Date" visible="true" foreignKey="optin_date_key" highCardinality="false"> </DimensionUsage> <Measure name="#Profiles" aggregator="sum" visible="true"> <MeasureExpression> <SQL dialect="generic"> <![CDATA[optin_date_key]]> </SQL> </MeasureExpression> </Measure> 字段的配置文件数(非空)。

您还可以做的是在虚拟多维数据集中使用此多维数据集以加入其他度量。