gpt4 book ai didi

mysql - 如何在mysql中配置Saiku的维度

转载 作者:行者123 更新时间:2023-11-29 00:12:08 24 4
gpt4 key购买 nike

最近我在尝试使用 Saiku http://meteorite.bi/saiku .我有一个 mysql 表,它存储每天的统计信息。其架构如下所示:

CREATE TABLE `f_android_active_user_data` (
`event_date` date DEFAULT NULL,
`channel_id` varchar(100) DEFAULT NULL,
`version` varchar(100) DEFAULT NULL,
`active_user_count` int(11) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

现在我想将 event_date 配置为维度,但是,我没有看到如何使用表自己的列作为维度的示例。似乎没有太多关于Saiku的 Material 。有人可以帮助解决这个问题吗?

最佳答案

数据集市不推荐平面设计,但并非不可能。

作为对本书非常严格的人(在实践中表现最好),我不得不建议你在单独的表中创建时间维度。即使将日期作为 time_dimension_table 中的主键,并作为连接也是不错的解决方案。

选项 1 - 最简单也是最差的

在模式 mondarian.xml 中定义维度:

  <Dimension type="TimeDimension" visible="true" highCardinality="false" name="DateDimension">
<Hierarchy visible="true" hasAll="true" primaryKey="event_date">
<Table name="f_android_active_user_data" schema="public">
</Table>
<Level name="DateLevel" visible="true" column="event_date" type="String" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never">
</Level>
</Hierarchy>
</Dimension>

然后,在您的多维数据集内定义维度用法:

<DimensionUsage source="DateDimension" name="DateDimension" visible="true" foreignKey="event_date" highCardinality="false">
</DimensionUsage>

选项 2 - 创建 DateDimension 表并仍然使用自然键进行连接

关注这个tutorial创建日期维度。确保覆盖事实表 (f_android_active_user_data) 中的第一个显示日期。在这种情况下,定义维度将稍微改变一下:

请注意,您可以按月、季度、年等进行过滤和分组

<Dimension type="TimeDimension" visible="true" highCardinality="false" name="DateDimension">
<Hierarchy visible="true" hasAll="true" primaryKey="dt">
<Table name="calendar_table" schema="public">
</Table>
<Level name="YearLevel" visible="true" column="y" type="Numeric" uniqueMembers="false" levelType="TimeYears" hideMemberIf="Never">
</Level>
<Level name="MonthLevel" visible="true" column="m" type="Numeric" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never">
</Level>
<Level name="DateLevel" visible="true" column="dt" type="String" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never">
</Level>
</Hierarchy>
</Dimension>

选项 3 - Kimball 会感到自豪

使用选项 2 中链接的教程,但将 PK INTEGER PRIMARY KEY 添加为 AUTO INCREMENT。一次运行此查询:

ALTER table f_android_active_user_data ADD column DATE_FK INTEGER DEFAULT NULL
UPDATE f_android_active_user_data
SET DATE_FK = calendar_table.PK
FROM calendar_table
WHERE f_android_active_user_data.event_date = calendar_table.dt

现在,只剩下设置触发器了:最好是在 INSERT TRIGER 之后:

 UPDATE f_android_active_user_data
SET DATE_FK = calendar_table.PK
FROM calendar_table
WHERE f_android_active_user_data.event_date = calendar_table.dt AND DATE_FK = NULL

关于mysql - 如何在mysql中配置Saiku的维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24570081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com