我想要在使用mdx查询的时候,使用model_name显示,使用model_id作为查询条件限制某个model_id,该如何书写mdx语句?
已经有如下错误的mdx语句了
mdx查询语句1:
mdx语句
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:
mdx语句
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]结果:
无法进行查询2 个回答
一直没有找到好的解决办法,变向实现了需求,来分享下:
首先改写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]2022-10-27 01:39 回答isonlyk
其实根据MDX的语法,是不能将同一纬度的不同level放在多处地方的,如一个在rows中一个在columns中,或者一个在rows中或columns一个放在where子句中,就像提问中的第一个失败的语句
交叉查询的时候,由于使用了统一维度的不同level(更何况这里的两个level其实是一一对应的),并且一个level进行筛选,一个level没进行筛选,
2022-10-27 01:39 回答白露zhang_166
撰写答案今天,你开发时遇到什么问题呢?立即提问PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有