Mondrian的schema中,如何做到同一纬度的不同level数据作为查询条件来用?
2017-03-22 22:43
976 查看
如下schema代码片段:
<?xml version="1.0" encoding="UTF-8" ?> <Schema name="报表"> <cube name="cube_qc_pass_item" caption="报表1" encoding="UTF-8"> <table name="fact_qc_pass_record_item_join"> <Dimension name="models" foreignKey="model_id" caption="模板"> <Hierarchy hasAll="true" allMemberName="model_name" primaryKey="id" primaryKeyTable="dim_qc_model"> <Table name="dim_qc_model" /> <Level name="model_name" column="name" caption="模板"/> <Level name="model_id" column="id" caption="model_id"/> </Hierarchy> </Dimension> <Measure name="times" column="id" aggregator="count" formatString="#,###0" datatype="Numeric" caption="总量"/> </cube> </Schema>
我想要在使用mdx查询的时候,使用model_name显示,使用model_id作为查询条件限制某个model_id,该如何书写mdx语句?
已经有如下错误的mdx语句了
mdx查询语句1:
SELECT NON EMPTY {Hierarchize({{[Measures].[times], [Measures].[notPass], [Measures].[pass]}})} ON COLUMNS, NON EMPTY {Hierarchize([models].[model_name].Members)} ON ROWS FROM [cube_qc_pass_model] where [models].[model_id].[5cda6afa-f837-4603-af27-0915cfb812fd]
如下查询报错:
MondrianException: Mondrian Error:Hierarchy '[models]' appears in more than one independent axis.
mdx查询语句2:
SELECT NON EMPTY {Hierarchize({{[Measures].[times], [Measures].[notPass], [Measures].[pass]}})} ON COLUMNS, NON EMPTY Hierarchize(Union(CrossJoin([models].[model_name].Members, CrossJoin([times].[minute].Members, [agent_nos].[agent_no].Members)), CrossJoin([models].[model_id].[5cda6afa-f837-4603-af27-0915cfb812fd], CrossJoin([times].[minute].Members, [agent_nos].[agent_no].Members)))) ON ROWS FROM [cube_qc_pass_model]
结果: 无效过滤
一直没有找到好的解决办法,变向实现了需求,来分享下:
首先改写schema文件,将model_name和model_id拆分成两个维度:<?xml version="1.0" encoding="UTF-8" ?> <Schema name="报表"> <cube name="cube_qc_pass_item" caption="报表" encoding="UTF-8"> <table name="fact_qc_pass_record_item_join"> <Dimension name="models" foreignKey="model_id" caption="模板"> <Hierarchy hasAll="true" allMemberName="model_name" primaryKey="id" primaryKeyTable="dim_qc_model"> <Table name="dim_qc_model" /> <Level name="model_name" column="name" caption="模板"/> </Hierarchy> </Dimension> <Dimension name="model_ids" foreignKey="model_id" caption="模板id"> <Hierarchy hasAll="true" allMemberName="model_id" primaryKey="id" primaryKeyTable="dim_qc_model"> <Table name="dim_qc_model" /> <Level name="model_id" column="id" caption="model_id"/> </Hierarchy> </Dimension> <Measure name="times" column="id" aggregator="count" formatString="#,###0" datatype="Numeric" caption="总量"/> </cube> </Schema>
使用如下语句查询,是可以查询到数据并实现了过滤的:
SELECT NON EMPTY {Hierarchize({{[Measures].[times], [Measures].[notPass], [Measures].[pass]}})} ON COLUMNS, NON EMPTY CrossJoin([models].[model_name].Members, CrossJoin([times].[minute].Members, [agent_nos].[agent_no].Members)) ON ROWS FROM [cube_qc_pass_model] where [model_ids].[model_id].[5cda6afa-f837-4603-af27-0915cfb812fd]
by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(==防止爬虫==):http://blog.csdn.net/gsying1474
相关文章推荐
- 和SQL内连接不同,SQL外连接返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行,下面就为您详细介绍SQL外连接,
- 在同一个sql语句中写不同条件的count数量,和查询半年的数据
- 把一张表中的数据即一个List作为查询另一张表的条件参数
- datagridview1表一列作为別一个datagridview2表查询条件,单击datagridview1单元格显示datagridview2表数据
- 在SQL Server中如何将两个日期之间的工作日作为查询条件
- 超长查询,不同的查询条件,不同的参数,查出来的数据放在一个临时表中的方法
- C#如何将Access中以时间段条件查询的数据添加到ListView中
- 用SQL语言进行复杂查询:对各表中的数据进行不同条件的连接查询和嵌套查询: 1)查询每个学生及其选课情况; 2)查询每门课的间接先修课
- 以下是C++的不同数据类型值的比较语句,请问这些判断语句中作为条件部分的语句编写有问题的有:
- 如何使满足条件的数据显示不同的颜色
- 数据库已知一条数据的ID,如何查询下条数据且ID不同
- 根据一个表中的字段属性名称作为查询条件来批量修改该表中数据
- EF联合查询,如何设置条件过滤从表数据
- C# 如何将 不同的数据(多个查询结果集 dataset)导出到一个excel的不同sheet中
- 查询数据时,根据不同查询条件的情况,重载方法的一种写法(不知道怎么描述了!!!!)
- 在不同数据库如何查询前几条数据
- 两个不同数据库之间的两个表如何关联起来查询数据
- 普元 EOS Platform 7.5 如何把DataObject数组元素的值赋值给Criteria作为查询条件
- mysql在把子查询结果作为删除表中数据的条件,mysql不允许在子查询的同时删除原表数据
- C# Linq 集合作为查询条件获取数据