1.什么是星座模型?html
2.哪些地方能够用到星座模型?git
3.Mondrian怎么构建星座模型,构建过程又涉及到哪些理论概念。github
答1:这里描述了维度模型经常使用的 星型、雪花、星座模型,简而言之就是多事实表模型。ide
答2:例若有个场景,经过资产负债及损益表计算应收款周转天数。其中资产负债表和损益表都有对应单独的数据视图编码
计算公式以下:spa
应收款周转天数 = 360/(([Total 本期发生数],[营业收入])/(([Total 年初数],[应收帐款])+([Total 期末数],[应收帐款]))/2)
=360/损益表中项目为[营业收入]的本期发生数合计 /(资产负债表中项目为[应收帐款]的年初数合计+年底数合计)/23d
=360/损益表中项目为[营业收入]的本期发生数合计 /(资产负债表中项目为[应收帐款]的年平均数code
为了实现上述统计,若是使用传统物理模型去串表则容易产生数据冗余的状况。具体如何冗余本身脑补一下吧。为了解决上述问题则经过创建逻辑模型进行计算处理。htm
答3:blog
Mondrian实现理论上的星座模型过程涉及到哪些概念呢?见下图
1.退化维度的概念参考这里
组织这里为何会被称为退化维度?由于在资产负债视图中,已经包含了组织编码和组织名称字段,不须要另外串表来实现,因此叫退化维度。基本一个资产负债视图事实表就替代了N个维度表。
见SQL查询资产负债视图
select * from 资产负债视图
2.共享维度的概念参考这里:
模型中创建了年度的共享维度,并在资产负债视图、损益视图都调用了年度共享维度。
实现方法就是在须要使用共享维度的Cube外面建一个维度,而后在各个Cube须要引用共享维度的使用添加对共享维度的引用。
为了模拟方便,手工创建了年度、月度的维度表
1 create Table 年表 2 ( 3 id int, 4 年度 int 5 ) 6 7 create Table 月表 8 ( 9 id int, 10 FYEARID int, 11 月份 int 12 ) 13 14 insert into 年表(id,年度) 15 select 1,2018 16 union all 17 select 2,2019 18 19 20 insert into 月表(id,FYEARID,月份) 21 select 1,1,1 22 union all 23 select 2,1,2 24 union all 25 select 3,1,3 26 union all 27 select 4,1,4 28 union all 29 select 5,1,5 30 union all 31 select 6,1,6 32 union all 33 select 7,1,7 34 union all 35 select 8,1,8 36 union all 37 select 9,1,9 38 union all 39 select 10,1,10 40 union all 41 select 11,1,11 42 union all 43 select 12,1,12 44 45 46 47 48 select * from 年表 49 select * from 月表 50 51 52 53 54 55 insert into 月表(id,FYEARID,月份) 56 select 21,2,1 57 union all 58 select 22,2,2 59 union all 60 select 23,2,3 61 union all 62 select 24,2,4 63 union all 64 select 25,2,5 65 union all 66 select 26,2,6 67 union all 68 select 27,2,7 69 union all 70 select 28,2,8 71 union all 72 select 29,2,9 73 union all 74 select 30,2,10 75 union all 76 select 31,2,11 77 union all 78 select 32,2,12
3.重点就是创建虚拟立方体了,
其实这里虚拟立方体就是星座模型的载体。
Mondrain官方给了虚拟立方体的解释(Virtual OLAP Cubes) https://help.pentaho.com/Documentation/7.1/0N0/020/040/000
另一个老外那里给了虚拟立方体的定义案例能够参考 https://diethardsteiner.github.io/mondrian/2017/03/20/Mondrian-Multivalued-Dimension-Attribute.html
其实前面的准备工做作好了,后面创建虚拟立方体的工做就很简单了。
首先,命名
而后加入共享维度,注意共享维度不须要填写 cubeName。
最后是调用资产负债Cube和损益Cube的度量值
例如:调用资产负债Cube的年初数度量值,cubeName选择资产负债Cube的名称【BalanceCube】。
而name这里写法,[注意]、[注意]、[注意],必须先填写前缀 [Mesures]. 再加上各个Cube的度量值名称,外面加上中括号[]。
资产负债的年初数度量值写法应该是
[Mesures].[NCS]
损益的本期发生数写法则应该是
[Mesures].[BQFSS]
保存,上传到Saiku,预览一下模型。
至此,经过Mondrian构建星座模型的工做已成功完成,具体本身调整能够继续。
附上Schema文件
<Schema name="FinSchema" description="财务模式" measuresCaption="财务模式"> <Dimension type="StandardDimension" visible="true" name="年度"> <Hierarchy visible="true" hasAll="true" allMemberName="所有年度" allMemberCaption="所有年度" primaryKey="年度"> <Table name="年表" schema="dbo" alias=""> </Table> <Level name="年度" visible="true" column="年度" nameColumn="年度" type="Integer" uniqueMembers="false"> </Level> </Hierarchy> </Dimension> <Cube name="BalanceCube" caption="资产负债Cube" visible="true" description="资产负债Cube" cache="true" enabled="true"> <Table name="资产负债视图" schema="dbo"> </Table> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="组织" caption="组织编码"> <Hierarchy visible="true" hasAll="true" allMemberName="所有组织" allMemberCaption="所有组织"> <Level name="组织编码" visible="true" column="组织编码" nameColumn="组织名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> <Level name="组织名称" visible="true" column="组织名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="账簿"> <Hierarchy name="BookHierarchy" visible="true" hasAll="true" allMemberName="所有账簿" allMemberCaption="所有账簿"> <Level name="账簿名称" visible="true" column="账簿名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="项目分类"> <Hierarchy name="ItemTypeHierarchy" visible="true" hasAll="true" allMemberName="所有分类" allMemberCaption="所有分类"> <Level name="项目分类" visible="true" column="项目分类" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="项目名称"> <Hierarchy name="ItemHierarchy" visible="true" hasAll="true" allMemberName="所有项目" allMemberCaption="所有项目"> <Level name="项目名称" visible="true" column="项目名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <DimensionUsage source="年度" name="年度" visible="true" foreignKey="年"> </DimensionUsage> <Measure name="NCS" column="年初数" aggregator="sum" visible="true"> </Measure> <Measure name="QMS" column="期末数" aggregator="sum" visible="true"> </Measure> </Cube> <Cube name="ProfitCube" caption="利润Cube" visible="true" description="利润Cube" cache="true" enabled="true"> <Table name="损益视图" schema="dbo"> </Table> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="组织"> <Hierarchy visible="true" hasAll="true" allMemberName="所有组织" allMemberCaption="所有组织"> <Level name="组织编码" visible="true" column="组织编码" nameColumn="组织编码" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> <Level name="组织名称" visible="true" column="组织名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="账簿"> <Hierarchy visible="true" hasAll="true" allMemberName="所有账簿" allMemberCaption="所有账簿"> <Level name="账簿名称" visible="true" column="账簿名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <Dimension type="StandardDimension" visible="true" highCardinality="false" name="项目名称"> <Hierarchy visible="true" hasAll="true" allMemberName="所有项目名称" allMemberCaption="所有项目名称"> <Level name="项目名称" visible="true" column="项目名称" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"> </Level> </Hierarchy> </Dimension> <DimensionUsage source="年度" name="年度" visible="true" foreignKey="年"> </DimensionUsage> <Measure name="BQFSS" column="本期发生数" datatype="Numeric" aggregator="sum" visible="true"> </Measure> </Cube> <VirtualCube enabled="true" name="BPCube" description="财务资产负债损益模型"> <VirtualCubeDimension name="年度"> </VirtualCubeDimension> <VirtualCubeMeasure cubeName="BalanceCube" name="[Measures].[NCS]" visible="true"> </VirtualCubeMeasure> <VirtualCubeMeasure cubeName="ProfitCube" name="[Measures].[BQFSS]" visible="true"> </VirtualCubeMeasure> </VirtualCube> </Schema>