[英]How to use Timestamp from PostgreSQL in Mondrian 4 Schema?
在我的事实表(来自PostgreSQL)中,我有一个像这样的时间戳:
2016-07-01
如何使用此时间戳显示年/月/季/日维度? 一个Mondrian 4模式示例将很有帮助。
我不想使用额外的时间表或类似的东西。 只是时间戳记。
我找到了解决此要求的方法。
该问题包括三个不同的问题
如下所述,我解决了所有三个问题,但是在我看来,这些解决方案都不是完美的,因此,如果您有任何改进建议,请在下面的评论中告诉我。 下面描述的所有内容都是针对元模型版本4.0和PostgreSQL数据库的。
我找不到集成的解决方案,因此我制定了自己的解决方案。 在Mondrian架构中,您可以为表定义计算列。
<Table name="sales" schema="reporting">
<ColumnDefs>
<CalculatedColumnDef name='store2'>
<ExpressionView>
<SQL dialect='generic'>
<Column name='store'/>
</SQL>
</ExpressionView>
</CalculatedColumnDef>
</ColumnDefs>
</Table>
蒙德里安总是以某种方式使用generic
作为方言,因此使用postgres
作为方言不起作用。 通过<Column name='column'/>
您可以使用同一表的列值。 在上面的示例中,它是sales
表的store
列。
我们可以使用相同的方法为时间戳之外的每个子字段添加年,月,...列。
对于季度,它看起来像这样:
<CalculatedColumnDef name='quarter'>
<ExpressionView>
<SQL dialect='generic'>
'Q' || EXTRACT(QUARTER FROM <Column name='date'/>)
</SQL>
</ExpressionView>
</CalculatedColumnDef>
现在,您只需要为所需的每个子字段执行此操作。 PostgreSQL支持的所有子字段: PostgreSQL-日期/时间函数EXTRACT
没有定义表的维在mondrian模式中是不可能的。 有人会认为该架构将假设事实表为默认表,而mondrian架构则不会。
mondrian文档中未说明如何解决此问题。 但这就像为DimensionLinks
使用其他链接一样简单。
使用此链接(其中xy
应该是尺寸名称):
<FactLink dimension="xy"/>
在这一点上,这真让Mondrian感到困惑。 只有1、2和一个层次结构维度,Mondrian崩溃并说:
尺寸'xy'; 省略定义的键,该键仅对具有单个属性的退化尺寸有效。
这对我来说没有任何意义,解决方案也没有任何意义。
只需将一个key
添加到维度和相应的键属性即可。 不知道为什么!
Mondrian文档确实建议使用维类型TIME
和相应的属性levelType
。
在文档之外:
由于与MDX时间相关的功能,在Mondrian模式中对基于年/月/周/日的时间维度进行了不同的编码
对我来说,这根本没有什么区别,但是我仍然将其包括在我的维度中:
<Dimension name='Time' key="Timestamp" type="TIME">
<Attributes>
<Attribute name='Timestamp' table='sales' keyColumn='slice_date' hasHierarchy="false"/>
<Attribute name='Year' table='sales' keyColumn='year' levelType="TimeYears" hasHierarchy='false'/>
<Attribute name='Quarter' table='sales' keyColumn='quarter' levelType="TimeQuarters" hasHierarchy='false'/>
<Attribute name='Month' table='sales' keyColumn='month' levelType="TimeMonths" hasHierarchy='false'/>
<Attribute name='Day' table='sales' keyColumn='day' levelType="TimeWeeks" hasHierarchy='false'/>
<Attribute name='Week' table='sales' keyColumn='week' levelType="TimeDays" hasHierarchy='false'/>
<Attribute name='Day of Week' table='sales' keyColumn='dayOfWeek' levelType="TimeWeeks" hasHierarchy='false'/>
</Attributes>
<Hierarchies>
<Hierarchy name='Monthly'>
<Level attribute='Year'/>
<Level attribute='Quarter'/>
<Level attribute='Month'/>
</Hierarchy>
<Hierarchy name='Weekly'>
<Level attribute='Year'/>
<Level attribute='Week'/>
<Level attribute='Day of Week'/>
</Hierarchy>
</Hierarchies>
</Dimension>
现在,您只需在带有2.中描述的链接的多维数据集中使用此维度:
<Dimensions>
<Dimension source="Time"/>
</Dimensions>
我希望这对其他人有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.