java - Mondrian的schema中,如何做到同一纬度的不同level数据作为查询条件来用?
PHP中文网
PHP中文网 2017-04-18 10:51:49
0
2
485

如下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:

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]

结果:
无法进行查询

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(2)
大家讲道理
  1. En fait, selon la syntaxe de MDX, vous ne pouvez pas placer différents niveaux de même latitude à plusieurs endroits, comme un en lignes et un en colonnes, ou un en lignes ou colonnes et un dans le où clause , tout comme la première déclaration échouée dans la question

  2. Lors d'une requête croisée, puisque différents niveaux de la même dimension sont utilisés (sans oublier que les deux niveaux ici sont en fait une correspondance biunivoque), et qu'un niveau est filtré, l'autre niveau ne l'est pas filtré,

迷茫

Je n'ai pas encore trouvé de bonne solution, alors j'ai changé de direction pour répondre à la demande. Laissez-moi la partager :

Réécrivez d'abord le fichier de schéma et divisez le nom_modèle et l'id_modèle en deux dimensions :

<?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>

Vous pouvez interroger les données en utilisant la requête suivante :

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]
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!