<?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语句
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语句
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]
结果:
无法进行查询
実際、MDX の構文によれば、同じ緯度の異なるレベルを複数の場所に配置することはできません。たとえば、行に 1 つと列に 1 つ、または行または列に 1 つと where 句に 1 つなどです。質問内の最初の失敗したステートメント
クロスクエリ中は、同じディメンションの異なるレベルが使用されるため(ここでの 2 つのレベルが実際には 1 対 1 対応であることは言うまでもありません)、一方のレベルはフィルタリングされ、もう一方のレベルはフィルタリングされません。
まだ良い解決策が見つかっていないので、方向を変えて、その要望を共有させてください:
まずスキーマ ファイルを書き換えて、model_name と model_id を 2 つの次元に分割します。
リーリー次のクエリを使用してデータをクエリします:
リーリー