recherche

Maison  >  Questions et réponses  >  le corps du texte

java - Mondrian的schema中,如何做到同一纬度的不同level数据作为查询条件来用?

如下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中文网2803 Il y a quelques jours528

répondre à tous(2)je répondrai

  • 大家讲道理

    大家讲道理2017-04-18 10:53:49

    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é,

    répondre
    0
  • 迷茫

    迷茫2017-04-18 10:53:49

    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]

    répondre
    0
  • Annulerrépondre