Lighting@刘迎光
相信了,才有可能遇见,不相信,也许只会是擦肩而过!
Toggle navigation
Lighting@刘迎光
首页
IT技术
微服务(IT)
技术问答
OpenBI
读书笔记
公众号【今日脑图】
关于我
自媒体
归档
标签
Mondrian 4 测试的简单demo
OpenBI
Mondrian
MDX
Saiku
2017-03-26 22:03:46
917
lightingfire
OpenBI
Mondrian
MDX
Saiku
# 简述 整理此文章方便大家做测试(手写Mondrian Schema自测),不必每次都向saiku上传文件了 # 关键文件 * foodmart4.xml 测试对应的schema文件 * foodmart-sql.zip 测试对应的数据库脚本 # maven项目: ## pom文件 ``` <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.firewarm</groupId> <artifactId>testMondrian</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>testMondrian Maven Webapp</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>mine</id> <name>public Releases</name> <layout>default</layout> <url>http://nexus.liuyingguang.cn:8081/nexus/content/groups/public/</url> </repository> <repository> <id>mine-meteorite-bi-release</id> <name>public Releases</name> <layout>default</layout> <url>http://nexus.liuyingguang.cn:8081/nexus/content/repositories/meteorite-bi-release/</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.pentaho</groupId> <artifactId>mondrian</artifactId> <version>4.5.0.2-208</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> </dependencies> <build> <finalName>testMondrian</finalName> </build> </project> ``` ## foodmart4.xml文件 ``` <?xml version='1.0'?> <Schema name='FoodMart' metamodelVersion='4.0'> <!-- == This software is subject to the terms of the Eclipse Public License v1.0 == Agreement, available at the following URL: == http://www.eclipse.org/legal/epl-v10.html. == You must accept the terms of that agreement to use this software. == == Copyright (C) 2000-2005 Julian Hyde == Copyright (C) 2005-2013 Pentaho and others == All Rights Reserved. --> <PhysicalSchema> <Table name='salary'/> <Table name='salary' alias='salary2'/> <Table name='department'> <Key> <Column name='department_id'/> </Key> </Table> <Table name='employee'> <Key> <Column name='employee_id'/> </Key> </Table> <Table name='employee_closure'> <Key> <Column name='employee_id'/> </Key> </Table> <Link source='employee' target='employee_closure'> <ForeignKey> <Column name='employee_id'/> </ForeignKey> </Link> <Table name='position'> <Key> <Column name='position_id'/> </Key> </Table> <Link source='position' target='employee'> <ForeignKey> <Column name='position_id'/> </ForeignKey> </Link> <Table name='promotion'> <Key> <Column name='promotion_id'/> </Key> </Table> <Table name='store'> <Key> <Column name='store_id'/> </Key> </Table> <Link source='store' target='employee'> <ForeignKey> <Column name='store_id'/> </ForeignKey> </Link> <Table name='product' keyColumn='product_id'/> <Table name='product_class' keyColumn='product_class_id'/> <Link target='product' source='product_class'> <ForeignKey> <Column name='product_class_id'/> </ForeignKey> </Link> <Table name='time_by_day'> <Key> <Column name='time_id'/> </Key> </Table> <Table name='customer'> <Key> <Column name='customer_id'/> </Key> <ColumnDefs> <CalculatedColumnDef name='full_name' type='String'> <ExpressionView> <SQL dialect='oracle'> <Column name='fname'/> || ' ' || <Column name='lname'/> </SQL> <SQL dialect='access'> <Column name='fname'/> + ' ' + <Column name='lname'/> </SQL> <SQL dialect='postgres'> <Column name='fname'/> || ' ' || <Column name='lname'/> </SQL> <SQL dialect='mysql'> CONCAT(<Column name='fname'/>, ' ', <Column name='lname'/>) </SQL> <SQL dialect='mssql'> <Column name='fname'/> + ' ' + <Column name='lname'/> </SQL> <SQL dialect='derby'> <Column name='fullname'/> </SQL> <SQL dialect='db2'> CONCAT(CONCAT(<Column name='fname'/>, ' '), <Column name='lname'/>) </SQL> <SQL dialect='luciddb'> <Column name='fname'/> || ' ' || <Column name='lname'/> </SQL> <SQL dialect='generic'> <Column name='fullname'/> </SQL> </ExpressionView> </CalculatedColumnDef> </ColumnDefs> </Table> <Table name='sales_fact_1997'> <ColumnDefs> <CalculatedColumnDef name='promotion_sales'> <ExpressionView> <SQL dialect='access'> Iif(<Column table='sales_fact_1997' name='promotion_id'/> = 0, 0, <Column table='sales_fact_1997' name='store_sales'/>) </SQL> <SQL dialect='generic'> case when <Column table='sales_fact_1997' name='promotion_id'/> = 0 then 0 else <Column table='sales_fact_1997' name='store_sales'/> end </SQL> </ExpressionView> </CalculatedColumnDef> </ColumnDefs> </Table> <Table name='inventory_fact_1997'> <ColumnDefs> <CalculatedColumnDef name='warehouse_profit'> <ExpressionView> <SQL dialect='generic'> <Column table='inventory_fact_1997' name='warehouse_sales'/> - <Column name='warehouse_cost'/> </SQL> </ExpressionView> </CalculatedColumnDef> </ColumnDefs> </Table> <Table name='warehouse'> <Key> <Column name='warehouse_id'/> </Key> </Table> <Table name='agg_c_special_sales_fact_1997'/> <Table name='agg_pl_01_sales_fact_1997'/> <Table name='agg_l_05_sales_fact_1997'/> <Table name='agg_g_ms_pcat_sales_fact_1997'/> <Table name='agg_c_14_sales_fact_1997'/> </PhysicalSchema> <Dimension name='Store' table='store' key='Store Id'> <Attributes> <Attribute name='Store Country' hasHierarchy='false'> <Key> <Column name='store_country'/> </Key> </Attribute> <Attribute name='Store State' keyColumn='store_state' hasHierarchy='false'/> <Attribute name='Store City' hasHierarchy='false'> <Key> <Column name='store_state'/> <Column name='store_city'/> </Key> <Name> <Column name='store_city'/> </Name> </Attribute> <Attribute name='Store Id' keyColumn='store_id' hasHierarchy='false'/> <Attribute name='Store Name' keyColumn='store_name' hasHierarchy='false'> <Property attribute='Store Type'/> <Property attribute='Store Manager'/> <Property attribute='Store Sqft'/> <Property attribute='Grocery Sqft'/> <Property attribute='Frozen Sqft'/> <Property attribute='Meat Sqft'/> <Property attribute='Has coffee bar'/> <Property attribute='Street address'/> </Attribute> <Attribute name='Store Type' keyColumn='store_type' hierarchyAllMemberName='All Store Types'/> <Attribute name='Store Manager' keyColumn='store_manager' hasHierarchy='false'/> <Attribute name='Store Sqft' keyColumn='store_sqft' hasHierarchy='false'/> <Attribute name='Grocery Sqft' keyColumn='grocery_sqft' hasHierarchy='false'/> <Attribute name='Frozen Sqft' keyColumn='frozen_sqft' hasHierarchy='false'/> <Attribute name='Meat Sqft' keyColumn='meat_sqft' hasHierarchy='false'/> <Attribute name='Has coffee bar' keyColumn='coffee_bar' hasHierarchy='false'/> <Attribute name='Street address' keyColumn='store_street_address' hasHierarchy='false'/> </Attributes> <Hierarchies> <Hierarchy name='Stores' allMemberName='All Stores'> <Level attribute='Store Country'/> <Level attribute='Store State'/> <Level attribute='Store City'/> <Level attribute='Store Name'/> </Hierarchy> <Hierarchy name='Store Size in SQFT'> <Level attribute='Store Sqft'/> </Hierarchy> </Hierarchies> </Dimension> <Dimension name='Store2' key='Store Id'> <Attributes> <Attribute name='Store Id' table='store' keyColumn='store_id' hasHierarchy='false'/> <Attribute name='Store Type' table='store' keyColumn='store_type' hierarchyAllMemberName='false'/> <Attribute name='Store Manager' table='store' keyColumn='store_manager' hasHierarchy='false'/> <Attribute name='Store Sqft' table='store' keyColumn='store_sqft' hasHierarchy='false'/> <Attribute name='Grocery Sqft' table='store' keyColumn='grocery_sqft' hasHierarchy='false'/> <Attribute name='Frozen Sqft' table='store' keyColumn='frozen_sqft' hasHierarchy='false'/> <Attribute name='Meat Sqft' table='store' keyColumn='meat_sqft' hasHierarchy='false'/> <Attribute name='Has coffee bar' table='store' keyColumn='coffee_bar' hasHierarchy='false'/> <Attribute name='Street address' table='store' keyColumn='store_street_address' hasHierarchy='false'/> </Attributes> <Hierarchies> <Hierarchy name='Store' allMemberName='All Path'> <Level attribute='Store Type'/> <Level attribute='Has coffee bar'/> </Hierarchy> </Hierarchies> </Dimension> <Dimension name='Store3' table='store' key='Store Id'> <Attributes> <Attribute name='Store Id' keyColumn='store_id' hasHierarchy='false'/> <Attribute name='Store Manager' keyColumn='store_manager' hasHierarchy='false'/> </Attributes> <Hierarchies> <Hierarchy name='Store' allMemberName='All Path'> <Level attribute='Store Id'/> <Level attribute='Store Manager'/> </Hierarchy> </Hierarchies> </Dimension> <Dimension name='Time' table='time_by_day' type='TIME' key='Time Id'> <Attributes> <Attribute name='Year' caption='Year' keyColumn='the_year' levelType='TimeYears' hasHierarchy='false'> </Attribute> <Attribute name='Quarter' levelType='TimeQuarters' hasHierarchy='false'> <Key> <Column name='the_year'/> <Column name='quarter'/> </Key> <Name> <Column name='quarter'/> </Name> </Attribute> <Attribute name='Month' levelType='TimeMonths' hasHierarchy='false'> <Key> <Column name='the_year'/> <Column name='month_of_year'/> </Key> <Name> <Column name='month_of_year'/> </Name> </Attribute> <Attribute name='Week' levelType='TimeWeeks' hasHierarchy='false'> <Key> <Column name='the_year'/> <Column name='week_of_year'/> </Key> <Name> <Column name='week_of_year'/> </Name> </Attribute> <Attribute name='Day' levelType='TimeDays' hasHierarchy='false'> <Key> <Column name='time_id'/> </Key> <Name> <Column name='day_of_month'/> </Name> <OrderBy> <Column name='time_id'/> </OrderBy> </Attribute> <Attribute name='Month Name' hasHierarchy='false'> <Key> <Column name='the_year'/> <Column name='month_of_year'/> </Key> <Name> <Column name='the_month'/> </Name> </Attribute> <Attribute name='Date' keyColumn='the_date' hasHierarchy='false'/> <Attribute name='Date String' keyColumn='the_date' hasHierarchy='false'/> <Attribute name='Time Id' keyColumn='time_id' hasHierarchy='false'/> </Attributes> <Hierarchies> <Hierarchy name='Time' hasAll='false'> <Level attribute='Year'> <Annotations><Annotation name="AnalyzerDateFormat">[yyyy]</Annotation></Annotations> </Level> <Level attribute='Quarter'> <Annotations><Annotation name="AnalyzerDateFormat">[yyyy].[Qq]</Annotation></Annotations> </Level> <Level attribute='Month'> <Annotations><Annotation name="AnalyzerDateFormat">[yyyy].[Qq].[mm]</Annotation></Annotations> </Level> </Hierarchy> <Hierarchy name='Weekly' hasAll='true'> <Level attribute='Year'> <Annotations><Annotation name="AnalyzerDateFormat">[yyyy]</Annotation></Annotations> </Level> <Level attribute='Week'> <Annotations><Annotation name="AnalyzerDateFormat">[yyyy].[ww]</Annotation></Annotations> </Level> <Level attribute='Day'> <Annotations><Annotation name="AnalyzerDateFormat">[yyyy].[ww].[dd]</Annotation></Annotations> </Level> </Hierarchy> <Hierarchy name='Date Only' hasAll='true'> <Level attribute='Date String'> <Annotations><Annotation name="SaikuDayFormatString">yyyy/mm/dd</Annotation></Annotations> </Level> </Hierarchy> </Hierarchies> </Dimension> <Dimension name='Product' key='Product Id'> <Attributes> <Attribute name='Product Family' table='product_class' keyColumn='product_family' hasHierarchy='false'/> <Attribute name='Product Department' table='product_class' hasHierarchy='false'> <Key> <Column name='product_family'/> <Column name='product_department'/> </Key> <Name> <Column name='product_department'/> </Name> </Attribute> <Attribute name='Product Category' table='product_class' hasHierarchy='false'> <Key> <Column name='product_family'/> <Column name='product_department'/> <Column name='product_category'/> </Key> <Name> <Column name='product_category'/> </Name> </Attribute> <Attribute name='Product Subcategory' table='product_class' hasHierarchy='false'> <Key> <Column name='product_family'/> <Column name='product_department'/> <Column name='product_category'/> <Column name='product_subcategory'/> </Key> <Name> <Column name='product_subcategory'/> </Name> </Attribute> <Attribute name='Brand Name' table='product' hasHierarchy='false'> <Key> <Column table='product_class' name='product_family'/> <Column table='product_class' name='product_department'/> <Column table='product_class' name='product_category'/> <Column table='product_class' name='product_subcategory'/> <Column name='brand_name'/> </Key> <Name> <Column name='brand_name'/> </Name> </Attribute> <Attribute name='Product Name' table='product' hasHierarchy='false' keyColumn='product_id' nameColumn='product_name'/> <Attribute name='Product Id' table='product' keyColumn='product_id' hasHierarchy='false'/> </Attributes> <Hierarchies> <Hierarchy name='Products' allMemberName='All Products'> <Level attribute='Product Family'/> <Level attribute='Product Department'/> <Level attribute='Product Category'/> <Level attribute='Product Subcategory'/> <Level attribute='Brand Name'/> <Level attribute='Product Name'/> </Hierarchy> </Hierarchies> </Dimension> <Dimension name='Warehouse' table='warehouse' key='Warehouse Id'> <Attributes> <Attribute name='Country' keyColumn='warehouse_country' hasHierarchy='false'/> <Attribute name='State Province' keyColumn='warehouse_state_province' hasHierarchy='false'/> <Attribute name='City' hasHierarchy='false'> <Key> <Column name='warehouse_state_province'/> <Column name='warehouse_city'/> </Key> <Name> <Column name='warehouse_city'/> </Name> </Attribute> <Attribute name='Warehouse Name' keyColumn='warehouse_name' hasHierarchy='false'/> <Attribute name='Warehouse Id' keyColumn='warehouse_id' hasHierarchy='false'/> </Attributes> <Hierarchies> <Hierarchy name='Warehouses' allMemberName='All Warehouses'> <Level attribute='Country'/> <Level attribute='State Province'/> <Level attribute='City'/> <Level attribute='Warehouse Name'/> </Hierarchy> </Hierarchies> </Dimension> <Cube name='Sales' defaultMeasure='Unit Sales'> <!-- Use annotations to provide translations of this cube's caption and description into German and French. Use of annotations in this manner is experimental and unsupported; just for testing right now. --> <Annotations> <Annotation name='caption.de_DE'>Verkaufen</Annotation> <Annotation name='caption.fr_FR'>Ventes</Annotation> <Annotation name='caption+fr_FR'>Ventes</Annotation> <Annotation name='description.fr_FR'>Cube des ventes</Annotation> <Annotation name='description.de'>Cube Verkaufen</Annotation> <Annotation name='description.de_AT'>Cube den Verkaufen</Annotation> </Annotations> <Dimensions> <Dimension source='Store'/> <Dimension source='Time'/> <Dimension source='Product'/> <Dimension name='Promotion' table='promotion' key='Promotion Id'> <Attributes> <Attribute name='Promotion Id' keyColumn='promotion_id' hasHierarchy='false'/> <Attribute name='Promotion Name' keyColumn='promotion_name' hasHierarchy='false'/> <Attribute name='Media Type' keyColumn='media_type' hierarchyAllMemberName='All Media' hasHierarchy='false'/> </Attributes> <Hierarchies> <Hierarchy name='Media Type' allMemberName='All Media'> <Level attribute='Media Type'/> </Hierarchy> <Hierarchy name='Promotions' allMemberName='All Promotions'> <Level attribute='Promotion Name'/> </Hierarchy> </Hierarchies> </Dimension> <Dimension name='Customer' table='customer' key='Name'> <Attributes> <Attribute name='Country' keyColumn='country' hasHierarchy='false'/> <Attribute name='State Province' hasHierarchy='false'> <Key> <Column name='country'/> <Column name='state_province'/> </Key> <Name> <Column name='state_province'/> </Name> </Attribute> <Attribute name='City' hasHierarchy='false'> <Key> <Column name='country'/> <Column name='state_province'/> <Column name='city'/> </Key> <Name> <Column name='city'/> </Name> </Attribute> <Attribute name='Name' keyColumn='customer_id' nameColumn='full_name' orderByColumn='full_name' hasHierarchy='false'/> <Attribute name='Gender' keyColumn='gender' datatype="Boolean"/> <Attribute name='Marital Status' keyColumn='marital_status' approxRowCount='111'/> <Attribute name='Education' keyColumn='education' hasHierarchy='false'/> <Attribute name='Yearly Income' keyColumn='yearly_income' hierarchyAllMemberName='All Yearly Incomes'/> </Attributes> <Hierarchies> <Hierarchy name='Customers' allMemberName='All Customers'> <Level attribute='Country'/> <Level attribute='State Province'/> <Level attribute='City'/> <Level attribute='Name'/> </Hierarchy> <Hierarchy name='Education Level'> <Level attribute='Education' name='Education Level'/> </Hierarchy> </Hierarchies> </Dimension> </Dimensions> <MeasureGroups> <MeasureGroup name='Sales' table='sales_fact_1997'> <Measures> <Measure name='Unit Sales' column='unit_sales' aggregator='sum' formatString='Standard'/> <Measure name='Store Cost' column='store_cost' aggregator='sum' formatString='#,###.00'/> <Measure name='Store Sales' column='store_sales' aggregator='sum' formatString='#,###.00'/> <Measure name='Sales Count' column='product_id' aggregator='count' formatString='#,###'/> <Measure name='Customer Count' column='customer_id' aggregator='distinct-count' formatString='#,###'/> <Measure name='Promotion Sales' column='promotion_sales' aggregator='sum' formatString='#,###.00' datatype='Numeric'/> </Measures> <DimensionLinks> <ForeignKeyLink dimension='Store' foreignKeyColumn='store_id'/> <ForeignKeyLink dimension='Time' foreignKeyColumn='time_id'/> <ForeignKeyLink dimension='Product' foreignKeyColumn='product_id'/> <ForeignKeyLink dimension='Promotion' foreignKeyColumn='promotion_id'/> <ForeignKeyLink dimension='Customer' foreignKeyColumn='customer_id'/> </DimensionLinks> </MeasureGroup> <MeasureGroup table='agg_c_special_sales_fact_1997' type='aggregate'> <Measures> <MeasureRef name='Fact Count' aggColumn='fact_count'/> <MeasureRef name='Unit Sales' aggColumn='unit_sales_sum'/> <MeasureRef name='Store Cost' aggColumn='store_cost_sum'/> <MeasureRef name='Store Sales' aggColumn='store_sales_sum'/> </Measures> <DimensionLinks> <ForeignKeyLink dimension='Store' foreignKeyColumn='store_id'/> <ForeignKeyLink dimension='Product' foreignKeyColumn='product_id'/> <ForeignKeyLink dimension='Promotion' foreignKeyColumn='promotion_id'/> <ForeignKeyLink dimension='Customer' foreignKeyColumn='customer_id'/> <CopyLink dimension='Time' attribute='Month'> <Column aggColumn='time_year' table='time_by_day' name='the_year'/> <Column aggColumn='time_quarter' table='time_by_day' name='quarter'/> <Column aggColumn='time_month' table='time_by_day' name='month_of_year'/> </CopyLink> </DimensionLinks> </MeasureGroup> <MeasureGroup table='agg_l_05_sales_fact_1997' type='aggregate'> <Measures> <MeasureRef name='Fact Count' aggColumn='fact_count'/> <MeasureRef name='Unit Sales' aggColumn='unit_sales'/> <MeasureRef name='Store Cost' aggColumn='store_cost'/> <MeasureRef name='Store Sales' aggColumn='store_sales'/> </Measures> <DimensionLinks> <ForeignKeyLink dimension='Store' foreignKeyColumn='store_id'/> <ForeignKeyLink dimension='Product' foreignKeyColumn='product_id'/> <ForeignKeyLink dimension='Promotion' foreignKeyColumn='promotion_id'/> <ForeignKeyLink dimension='Customer' foreignKeyColumn='customer_id'/> <NoLink dimension='Time'/> </DimensionLinks> </MeasureGroup> <MeasureGroup table='agg_c_14_sales_fact_1997' type='aggregate'> <Measures> <MeasureRef name='Fact Count' aggColumn='fact_count'/> <MeasureRef name='Unit Sales' aggColumn='unit_sales'/> <MeasureRef name='Store Cost' aggColumn='store_cost'/> <MeasureRef name='Store Sales' aggColumn='store_sales'/> </Measures> <DimensionLinks> <ForeignKeyLink dimension='Store' foreignKeyColumn='store_id'/> <ForeignKeyLink dimension='Product' foreignKeyColumn='product_id'/> <ForeignKeyLink dimension='Promotion' foreignKeyColumn='promotion_id'/> <ForeignKeyLink dimension='Customer' foreignKeyColumn='customer_id'/> <CopyLink dimension='Time' attribute='Month'> <Column aggColumn='the_year' table='time_by_day' name='the_year'/> <Column aggColumn='quarter' table='time_by_day' name='quarter'/> <Column aggColumn='month_of_year' table='time_by_day' name='month_of_year'/> </CopyLink> </DimensionLinks> </MeasureGroup> <MeasureGroup table='agg_g_ms_pcat_sales_fact_1997' type='aggregate'> <Measures> <MeasureRef name='Fact Count' aggColumn='fact_count'/> <MeasureRef name='Unit Sales' aggColumn='unit_sales'/> <MeasureRef name='Store Cost' aggColumn='store_cost'/> <MeasureRef name='Store Sales' aggColumn='store_sales'/> <MeasureRef name='Customer Count' aggColumn='customer_count'/> </Measures> <DimensionLinks> <NoLink dimension='Store'/> <CopyLink dimension='Product'> <Column aggColumn='product_family' table='product_class' name='product_family'/> <Column aggColumn='product_department' table='product_class' name='product_department'/> <Column aggColumn='product_category' table='product_class' name='product_category'/> </CopyLink> <NoLink dimension='Promotion'/> <CopyLink dimension='Customer'> <Column aggColumn='gender' table='customer' name='gender'/> <Column aggColumn='marital_status' table='customer' name='marital_status'/> </CopyLink> <CopyLink dimension='Time' attribute='Month'> <Column aggColumn='the_year' table='time_by_day' name='the_year'/> <Column aggColumn='quarter' table='time_by_day' name='quarter'/> <Column aggColumn='month_of_year' table='time_by_day' name='month_of_year'/> </CopyLink> </DimensionLinks> </MeasureGroup> </MeasureGroups> <CalculatedMembers> <CalculatedMember name='Profit' dimension='Measures'> <Formula>[Measures].[Store Sales] - [Measures].[Store Cost]</Formula> <CalculatedMemberProperty name="FORMAT_STRING" expression="Iif(([Measures].[Store Sales]) < 10000, '|(#,##0.00 €)|style=red', '|#,##0.00 €|style=green')"/> </CalculatedMember> <CalculatedMember name='Profit last Period' dimension='Measures' formula='COALESCEEMPTY((Measures.[Profit], [Time].[Time].PREVMEMBER), Measures.[Profit])' visible='false'> <CalculatedMemberProperty name='FORMAT_STRING' value='$#,##0.00'/> </CalculatedMember> <CalculatedMember name='Profit Growth' dimension='Measures' formula='([Measures].[Profit] - [Measures].[Profit last Period]) / [Measures].[Profit last Period]' visible='true' caption='Gewinn-Wachstum'> <CalculatedMemberProperty name='FORMAT_STRING' value='0.0%'/> </CalculatedMember> </CalculatedMembers> </Cube> <!-- a simpler version of 'Sales' (with MEMBER_ORDINAL-properties) --> <Cube name='Sales 2'> <Dimensions> <Dimension source='Time'/> <Dimension source='Product'/> <Dimension name='Gender' table='customer' key='Id'> <Attributes> <Attribute name='Gender' keyColumn='gender'/> <Attribute name='Id' keyColumn='customer_id'/> </Attributes> </Dimension> </Dimensions> <MeasureGroups> <MeasureGroup name='Sales' table='sales_fact_1997'> <Measures> <Measure name='Sales Count' column='product_id' aggregator='count' formatString='#,###'> <CalculatedMemberProperty name='MEMBER_ORDINAL' value='1'/> </Measure> <Measure name='Unit Sales' column='unit_sales' aggregator='sum' formatString='Standard'> <CalculatedMemberProperty name='MEMBER_ORDINAL' value='2'/> </Measure> <Measure name='Store Sales' column='store_sales' aggregator='sum' formatString='#,###.00'> <CalculatedMemberProperty name='MEMBER_ORDINAL' value='3'/> </Measure> <Measure name='Store Cost' column='store_cost' aggregator='sum' formatString='#,###.00'> <CalculatedMemberProperty name='MEMBER_ORDINAL' value='6'/> </Measure> <Measure name='Customer Count' column='customer_id' aggregator='distinct-count' formatString='#,###'> <CalculatedMemberProperty name='MEMBER_ORDINAL' value='7'/> </Measure> </Measures> <DimensionLinks> <ForeignKeyLink dimension='Time' foreignKeyColumn='time_id'/> <ForeignKeyLink dimension='Product' foreignKeyColumn='product_id'/> <ForeignKeyLink dimension='Gender' foreignKeyColumn='customer_id'/> </DimensionLinks> </MeasureGroup> </MeasureGroups> <CalculatedMembers> <CalculatedMember name='Profit' dimension='Measures'> <Formula>[Measures].[Store Sales] - [Measures].[Store Cost]</Formula> <CalculatedMemberProperty name='FORMAT_STRING' value='$#,##0.00'/> <CalculatedMemberProperty name='MEMBER_ORDINAL' value='4'/> </CalculatedMember> <CalculatedMember name='Profit last Period' dimension='Measures' formula='COALESCEEMPTY((Measures.[Profit], [Time].[Time].PREVMEMBER), Measures.[Profit])' visible='false'> <CalculatedMemberProperty name='MEMBER_ORDINAL' value='5'/> </CalculatedMember> </CalculatedMembers> </Cube> <Cube name='Warehouse and Sales' > <Dimensions> <Dimension source='Store2'/> <Dimension source='Store3'/> </Dimensions> <MeasureGroups> <MeasureGroup table='sales_fact_1997'> <Measures> <Measure name='Sales Count' column='product_id' aggregator='count'/> </Measures> <DimensionLinks> <ForeignKeyLink dimension='Store2' foreignKeyColumn='store_id'/> <ForeignKeyLink dimension='Store3' foreignKeyColumn='product_id'/> </DimensionLinks> </MeasureGroup> </MeasureGroups> </Cube> <Cube name='HR'> <Dimensions> <Dimension name='Employee' key='Employee Id'> <Attributes> <Attribute name='Manager Id' table='employee' keyColumn='supervisor_id'/> <Attribute name='Employee Id' table='employee' keyColumn='employee_id' nameColumn='full_name' orderByColumn='employee_id'/> <Attribute name='Store Id' table='employee' keyColumn='store_id'/> <Attribute name='Store Type' table='store' keyColumn='store_type' hierarchyAllMemberName='All Store Types'/> <Attribute name='Pay Type' table='position' keyColumn='pay_type' hierarchyAllMemberName='All Pay Types'/> <Attribute name='Management Role' table='position' keyColumn='management_role'/> <Attribute name='Position Title' table='position'> <Key> <Column name='management_role'/> <Column name='position_title'/> </Key> <Name> <Column name='position_title'/> </Name> <OrderBy> <Column name='position_id'/> </OrderBy> </Attribute> <Attribute name='Marital Status' table='employee' keyColumn='marital_status'/> <Attribute name='Gender' table='employee' keyColumn='gender'/> <Attribute name='Salary' table='employee' keyColumn='salary'/> <Attribute name='Education Level' table='employee' keyColumn='education_level'/> </Attributes> <Hierarchies> <Hierarchy name='Employees' allMemberName='All Employees'> <Level attribute='Employee Id' parentAttribute='Manager Id' nullParentValue='0'> <Closure table='employee_closure' parentColumn='supervisor_id' childColumn='employee_id'/> </Level> </Hierarchy> <Hierarchy name='Position' allMemberName='All Position'> <Level attribute='Management Role'/> <Level attribute='Position Title'/> </Hierarchy> </Hierarchies> </Dimension> <Dimension name="Actual VS Budget" hanger="true"> <Attributes> <Attribute name="Type"/> </Attributes> </Dimension> <Dimension name='Department' table='department' key='Department Description'> <Attributes> <Attribute name='Department Description' keyColumn='department_id'/> </Attributes> <Hierarchies> <Hierarchy name='Department'> <Level attribute='Department Description'/> </Hierarchy> </Hierarchies> </Dimension> <!-- Use private "Time" dimension because key is different than public "Time" dimension. --> <Dimension name='Time' table='time_by_day' type='TIME' key='Time Id'> <Attributes> <Attribute name='Year' keyColumn='the_year' levelType='TimeYears' hasHierarchy='false'/> <Attribute name='Quarter' levelType='TimeQuarters' hasHierarchy='false'> <Key> <Column name='the_year'/> <Column name='quarter'/> </Key> <Name> <Column name='quarter'/> </Name> </Attribute> <!-- Use the_month as source for the name, so members look like [Time].[1997].[Q1].[Jan] rather than [Time].[1997].[Q1].[1]. --> <Attribute name='Month' hasHierarchy='false'> <Key> <Column name='the_year'/> <Column name='month_of_year'/> </Key> <Name> <Column name='the_month'/> </Name> </Attribute> <Attribute name='Date' keyColumn='the_date' hasHierarchy='false'/> <Attribute name='Time Id' keyColumn='time_id' hasHierarchy='false'/> </Attributes> <Hierarchies> <Hierarchy name='Time' hasAll='false'> <Level attribute='Year'/> <Level attribute='Quarter'/> <Level attribute='Month'/> </Hierarchy> </Hierarchies> </Dimension> <Dimension source='Store'/> </Dimensions> <MeasureGroups> <MeasureGroup name='HR' table='salary'> <Measures> <Measure name='Org Salary' column='salary_paid' aggregator='sum' formatString='Currency'/> <Measure name='Count' column='employee_id' aggregator='count' formatString='#,#'/> <Measure name='Number of Employees' column='employee_id' aggregator='distinct-count' formatString='#,#'/> </Measures> <DimensionLinks> <ForeignKeyLink dimension='Time' foreignKeyColumn='pay_date' attribute='Date'/> <ForeignKeyLink dimension='Department' foreignKeyColumn='department_id'/> <ForeignKeyLink dimension='Employee' foreignKeyColumn='employee_id'/> <ReferenceLink dimension='Store' viaDimension='Employee' viaAttribute='Store Id'/> </DimensionLinks> </MeasureGroup> </MeasureGroups> <CalculatedMembers> <CalculatedMember name='Employee Salary' dimension='Measures' formatString='Currency' formula='([Employees].currentmember.datamember, [Measures].[Org Salary])'/> <CalculatedMember name='Avg Salary' dimension='Measures' formatString='Currency' formula='[Measures].[Org Salary]/[Measures].[Number of Employees]'/> <CalculatedMember name="Test" hierarchy="[Store].[Stores]" formula="[Store].[Stores].[All Stores]"/> </CalculatedMembers> <CalculatedMember hierarchy="[Actual VS Budget].[Type]" name="Actual"> <Formula> [Store].[Stores].[All Stores] </Formula> </CalculatedMember> </Cube> <!-- Cubes for compatibility with old FoodMart. Will put them in a new schema at some point. --> <Cube name='Warehouse'> <Dimensions> <Dimension source='Store'/> <Dimension source='Time'/> <Dimension source='Product'/> <Dimension source='Warehouse'/> </Dimensions> <MeasureGroups> <MeasureGroup name='Warehouse' table='inventory_fact_1997'> <Measures> <Measure name='Store Invoice' column='store_invoice' aggregator='sum'/> <Measure name='Supply Time' column='supply_time' aggregator='sum'/> <Measure name='Warehouse Cost' column='warehouse_cost' aggregator='sum'/> <Measure name='Warehouse Sales' column='warehouse_sales' aggregator='sum'/> <Measure name='Units Shipped' column='units_shipped' aggregator='sum' formatString='#.0'/> <Measure name='Units Ordered' column='units_ordered' aggregator='sum' formatString='#.0'/> <Measure name='Warehouse Profit' column='warehouse_profit' aggregator='sum' datatype='Numeric'/> </Measures> <DimensionLinks> <ForeignKeyLink dimension='Store' foreignKeyColumn='store_id'/> <ForeignKeyLink dimension='Time' foreignKeyColumn='time_id'/> <ForeignKeyLink dimension='Product' foreignKeyColumn='product_id'/> <ForeignKeyLink dimension='Warehouse' foreignKeyColumn=''> <ForeignKey> <Column name='warehouse_id'/> </ForeignKey> </ForeignKeyLink> </DimensionLinks> </MeasureGroup> </MeasureGroups> <NamedSets> <NamedSet name='Top Sellers'> <Formula>TopCount([Warehouse].[Warehouse Name].MEMBERS, 5, [Measures].[Warehouse Sales])</Formula> </NamedSet> </NamedSets> </Cube> <!-- A cube based on a single table. --> <Cube name='Store'> <Dimensions> <!-- We could have used the shared dimension 'Store Type', but we want to test private dimensions without primary key. --> <Dimension name='Store Type' key='Store Type'> <Attributes> <Attribute name='Store Type' table='store' keyColumn='store_type' hasHierarchy='true'/> </Attributes> </Dimension> <Dimension source='Store'/> <Dimension name='Has coffee bar'> <Attributes> <Attribute name='Has coffee bar' table='store' datatype='Boolean' keyColumn='coffee_bar' hasHierarchy='true'/> </Attributes> </Dimension> </Dimensions> <MeasureGroups> <MeasureGroup name='Store' table='store'> <Measures> <Measure name='Store Sqft' column='store_sqft' aggregator='sum' formatString='#,###'/> <Measure name='Grocery Sqft' column='grocery_sqft' aggregator='sum' formatString='#,###'/> </Measures> <DimensionLinks> <FactLink dimension='Store'/> <FactLink dimension='Store Type'/> <FactLink dimension='Has coffee bar'/> </DimensionLinks> </MeasureGroup> </MeasureGroups> </Cube> <!--<Cube name='HR'>--> <!--<Dimensions>--> <!--<Dimension source='Time'/>--> <!--</Dimensions>--> <!--<MeasureGroups>--> <!--<MeasureGroup name='HR' table='salary'>--> <!--<Measures>--> <!--<Measure name='Org Salary' aggregator='sum' column='salary_paid'/>--> <!--</Measures>--> <!--<DimensionLinks>--> <!--<ForeignKeyLink dimension='Time' foreignKeyColumn='pay_date' attribute='Date'/>--> <!--</DimensionLinks>--> <!--</MeasureGroup>--> <!--</MeasureGroups>--> <!--</Cube>--> <Role name='California manager'> <SchemaGrant access='none'> <CubeGrant cube='Sales' access='all'> <HierarchyGrant hierarchy='[Store].[Stores]' access='custom' topLevel='[Store].[Stores].[Store Country]'> <MemberGrant member='[Store].[Stores].[USA].[CA]' access='all'/> <MemberGrant member='[Store].[Stores].[USA].[CA].[Los Angeles]' access='none'/> </HierarchyGrant> <HierarchyGrant hierarchy='[Customer].[Customers]' access='custom' topLevel='[Customer].[Customers].[State Province]' bottomLevel='[Customer].[Customers].[City]'> <MemberGrant member='[Customer].[Customers].[USA].[CA]' access='all'/> <MemberGrant member='[Customer].[Customers].[USA].[CA].[Los Angeles]' access='none'/> </HierarchyGrant> <HierarchyGrant hierarchy='[Gender]' access='none'/> </CubeGrant> </SchemaGrant> </Role> <Role name='No HR Cube'> <SchemaGrant access='all'> <CubeGrant cube='HR' access='none'/> </SchemaGrant> </Role> <Role name='No Cubes'> <SchemaGrant access='none'/> </Role> </Schema> ``` ## 简单java代码测试: ``` import java.io.PrintWriter; import mondrian.olap.Connection; import mondrian.olap.DriverManager; import mondrian.olap.Query; import mondrian.olap.Result; /** * * @author Liuyg * @mail lyg210@msn.cn * @version * @time May 18, 2015 * */ public class Test { @SuppressWarnings("deprecation") public static void main(String[] args) { Connection connection = DriverManager .getConnection( "Provider=mondrian;Jdbc=jdbc:mysql://192.168.100.216:3306/foodmart?user=root&password=111111;Catalog=res:foodmart4.xml;", null); Query query = connection .parseQuery("SELECT NON EMPTY {Hierarchize({[Measures].[Store Sqft]})} ON COLUMNS,NON EMPTY {Hierarchize({[Store Type].Members})} ON ROWS FROM [Store]"); Result result = connection.execute(query); PrintWriter pw = new PrintWriter(System.out); result.print(pw); pw.flush(); } } ``` ## 返回结果示例: ``` Axis #0: {} Axis #1: {[Measures].[Store Sqft]} Axis #2: {[Store Type].[Store Type].[All Store Type]} {[Store Type].[Store Type].[Deluxe Supermarket]} {[Store Type].[Store Type].[Gourmet Supermarket]} {[Store Type].[Store Type].[Mid-Size Grocery]} {[Store Type].[Store Type].[Small Grocery]} {[Store Type].[Store Type].[Supermarket]} Row #0: 571,596 Row #1: 146,045 Row #2: 47,447 Row #3: 109,343 Row #4: 75,281 Row #5: 193,480 ``` > by 刘迎光@萤火虫工作室 > OpenBI交流群:495266201 > MicroService 微服务交流群:217722918 > mail: liuyg#liuyingguang.cn > 博主首页(==防止爬虫==):http://blog.liuyingguang.cn
Pre:
sublime text 3 打造舒适黑色主题
Next:
将saiku3.8 自带的H2嵌入式用户角色数据库迁移到mysql数据库
Table of content