Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

MDX クエリの概要

この章では、MDX クエリについて説明します。内容は以下のとおりです。

DemoMDX キューブの内容

馴染みのないデータベースで SQL クエリを作成する場合は、テーブルやその列をよく知ることから始めましょう。同様に、MDX クエリを作成する場合は、使用可能なキューブやその内容をよく知ることから始めましょう。

  1. ターミナルを開始します。

  2. SAMPLES ネームスペースに切り替えます。

  3. MDX シェルにアクセスするには、以下のコマンドを入力します。

     Do ##class(%DeepSee.Utils).%Shell()
  4. 使用可能なキューブを確認するには、以下のコマンドを入力します (大文字と小文字は区別されません)。

    CUBE
    

    すると、ターミナルにキューブのリストが表示されます。

  5. キューブの使用可能な内容を確認するには、以下のコマンドを入力します。

    CUBE cubename
    

    例えば、以下のようにします。

    CUBE demomdx
    

    シェルでは、コマンドおよびキューブ名の大文字と小文字は区別されません。

    ターミナルには以下のように表示されます。

    Measures
      %COUNT
      Age
      Avg Age
      Allergy Count
      Avg Allergy Count
      Test Score
      Avg Test Score
    AgeD
        All Patients
      H1
        All Patients
        Age Group
        Age Bucket
    AllerD
      H1
        Allergies
    BirthD
      H1
        Year
        Quarter Year
    BirthQD
      H1
        Quarter
    DiagD
      H1
        Diagnoses
    GenD
      H1
        Gender
    ColorD
      H1
        Favorite Color
    HomeD
      H1
        ZIP
        City
    DocD
      H1
        Doctor
    

DemoMDX キューブは患者を表しています。このキューブの内容は以下のとおりです。

  • Measures セクションには、%COUNTAgeAve AgeAllergy Count などの使用可能なメジャーがリストされています。これらのメジャーは、患者と関連付けられており、患者全体で集約されます。

  • Dimensions セクションには、ディメンジョンが含まれます。このキューブには、AgeDAllerD などのディメンジョンが含まれています。

    ここでは、ディメンジョンは 1 つ以上の階層のコンテナだと説明しておきますが、詳細は “ディメンジョンおよび階層を使用した作業” の章を参照してください。

  • ディメンジョン内の最初の要素は階層です。 規約により、このサンプルでは、各ディメンジョンに H1 という名前の階層が 1 つずつ含まれています。

    ここでは、階層は 1 つ以上のレベルのコンテナだと説明しておきますが、詳細は “ディメンジョンおよび階層を使用した作業” の章を参照してください。

  • 階層内の要素はレベルです。このキューブには、AgeAge GroupGenderZIPCity などのレベルが含まれています。これらのレベルによって、患者のさまざまなグループの選択が可能になります。

多くの MDX アプリケーションでは、ディメンジョン、ディメンジョン内の階層、およびその階層内のレベルに同じ名前が使用されます。この方法は、MDX の学習者に混乱を招く可能性があるため、このサンプル・キューブでは、以下の任意の命名規約を使用します。

  • ディメンジョン名は短くし、末尾の文字を D にする。

  • 各ディメンジョンに H1 という名前の階層を 1 つ含める。

  • レベル名はユーザがわかりやすいものとする (アナライザでは、ディメンジョン名とレベル名の両方が表示されますが、主な作業対象となるのはレベルです)。

後述するように、DeepSee MDX では、識別子の一部を省略できます。このサンプルの命名規約で、どの部分が省略可能かを明確に示します。

Note:

キューブには、計算メンバや名前付きセットも格納できます。これらの要素は、MDX シェルの CUBE コマンドによって表示されることはありませんが、MDX シェルやその他の場所で使用することはできます。

最も単純なクエリ

MDX シェルで、以下の MDX クエリを入力します (大文字と小文字は区別されません)。

SELECT FROM demomdx

シェルによって以下のような結果が表示されます。

Result:              1,000

このクエリは、患者をカウントするだけです。

MDX では、大文字と小文字は区別されませんが、メンバのキーは例外です。これについては、“レベルを使用した作業” で説明します。

メンバ

MDX クエリの主要な構成要素にメンバがあります。各レベルには、1 つ以上のメンバが含まれます。例えば、City レベルには、複数のメンバ (データ内の各市町村に 1 つずつ) が含まれます。レベルによって、レコードの選択が可能になります。具体的には、レベルの各メンバを使用して、レコードのサブセットにアクセスすることができます。

DemoMDX キューブでは、このキューブ内の各レベルの各メンバで、患者のグループを選択できます。

このセクションでは、以下の手順で単純なクエリを実行して、DemoMDX キューブ内のレベルのメンバを確認します。

  1. MDX シェルで、以下の MDX クエリを入力します (大文字と小文字は区別されません)。

    SELECT homed.h1.city.MEMBERS ON ROWS FROM demomdx
    

    シェルによって、City レベルのメンバが以下のように表示されます。

    1 Cedar Falls                           110
    2 Centerville                            99
    3 Cypress                               112
    4 Elm Heights                           118
    5 Juniper                               122
    6 Magnolia                              114
    7 Pine                                  121
    8 Redwood                               111
    9 Spruce                                 93
    

    ここでは、2 番目の列に表示されているメンバ名についてのみ説明します。

City レベルには、Cedar FallsCentervilleCypress などのメンバが含まれています。このレベルの各メンバは、その出身地の患者セットを表します。例えば、Centerville メンバは、出身地が Centerville の患者すべてを表します。

メジャー

MDX クエリの別の主要な構成要素にメジャーがあります。DeepSee クエリはすべて、1 つ以上のメジャーを使用します。メジャーを指定しない場合、DeepSee ではキューブに定義されている既定のメジャーが使用されます。ほとんどのキューブでは、既定のメジャーはレコードの数を示す %COUNT です。サンプル・キューブ内のメジャーをいくつか見てみましょう。

  1. MDX シェルで、以下のサンプル・クエリを入力します。

    SELECT MEASURES.[%COUNT] ON COLUMNS FROM demomdx
    

    このクエリによって、1 列のデータが含まれた結果セットが返されます。この結果セットは、キューブが表すデータ・セット全体にわたる %COUNT メジャーの集約値です。 サンプルのデータによって異なりますが、シェルには以下のように表示されます。

                                        %COUNT
                                          1,000
    
    

    この例では、1,000 人の患者が存在します。

  2. MDX シェルで、以下のクエリを入力します。

    SELECT MEASURES.[avg test score] ON COLUMNS FROM demomdx
    

    このクエリによって、データ・セット全体にわたる Avg Test Score メジャーの集約値を示す結果セットが返されます。

    サンプルのデータによって異なりますが、シェルには以下のように表示されます。

                                Avg Test Score
                                          74.75
    
    

    この数字は、患者全員の平均テスト・スコアです。

メンバとメジャーの参照

これまでのセクションで、DemoMDX キューブの要素 (特にメジャーとレベル) について見てきましたので、キューブに含まれるデータについて感じがつかめてきたことでしょう。また、単純な MDX クエリも記述しました。次の手順では、メンバやメジャーの参照に使用する構文を学習します。

  • メンバを参照するための構文は以下のとおりです。

    [dimension_name].[hierarchy_name].[level_name].[member_name]
    
  • あるレベルのメンバをすべて参照するための構文は以下のとおりです。

    [dimension_name].[hierarchy_name].[level_name].MEMBERS
    

    MEMBERS は、レベルのメンバを返す MDX 関数です。このドキュメントでは、主要な MDX 関数をいくつか紹介します。"DeepSee MDX リファレンス" は、DeepSee でサポートされているすべての MDX 関数のリファレンス情報を提供しています。

  • メジャーを参照するための構文は以下のとおりです。

    [MEASURES].[measure_name]
    

以下のバリエーションに注意してください。

  • これらの名前のいずれでも、名前を構成するのが英数字のみの場合は角括弧 ([]) を省略できます。

    識別子の詳細は、"DeepSee MDX リファレンス" の “識別子” のセクションを参照してください。

  • レベルまたはメンバを参照する場合は、階層名を省略できます。省略すると、MDX では、このディメンジョン内の定義に従って、指定された名前の最初のレベルが使用されます (このバリエーションは、インターシステムズによる MDX への拡張機能の 1 つです)。

  • メンバを参照する場合は、レベル名を省略できます。省略すると、MDX では、このディメンジョン内の定義に従って、指定された名前の最初のメンバが使用されます (このバリエーションは、インターシステムズによる MDX への拡張機能の 1 つです)。

ディメンジョン名は省略できません。

DeepSee MDX では、以下の例はすべて同等です。

[GenD].[H1].[GENDER].Female
[GenD].Female
GenD.H1.GENDER.Female
GenD.H1.Female
GenD.Female 

%COUNT を使用した単純な MDX クエリ

ここでは、メジャーを参照せず、キューブに定義されている既定のメジャー (通常、%COUNT) を使用する単純な形式の MDX クエリを示します。

  • 特定のレベルのメンバを列として使用するには、以下の形式のクエリを使用します。

    SELECT [dim_name].[hier_name].[lev_name].MEMBERS ON COLUMNS FROM cubename
    
  • あるレベルのメンバを列として使用し、別のレベルのメンバを行として使用するには、以下の形式のクエリを使用します。

    SELECT [dim_name].[hier_name].[lev_name].MEMBERS ON COLUMNS,
    [dim_name].[hier_name].[lev_name].MEMBERS ON ROWS FROM cubename
    
    Note:

    ここに示されるような改行を含めないでください。このドキュメント (特に紙版のドキュメント) では、上記の改行は見やすくするためにのみ使用しています。MDX シェルでは、この改行は許可されていません。

  • 単一メンバを列として使用するには、以下の形式のクエリを使用します。

    SELECT [dim_name].[hier_name].[lev_name].[member_name] ON COLUMNS FROM cubename
    

COLUMNS の代わりに 0 を使用し、ROWS の代わりに 1 を使用することもできます (スペースの都合で、このドキュメントでは、COLUMNSROWS ではなく、0 と 1 を使用します)。

いずれの場合も、SELECT 文によって結果セットが返されます。その結果セットは、MDX シェルによってテーブル形式で表示されます。

これらのバリエーションを使用するクエリを試してみましょう。

  1. 以下の MDX クエリを入力します。

    SELECT gend.h1.gender.MEMBERS ON 0 FROM demomdx
    

    シェルによってクエリが実行され、以下のような結果が表示されます (実際の結果は若干異なります)。

                                  Female                 Male
                                      488                  512
    
    

    これから以下の点がわかります。

    • このクエリではメジャーを指定しなかったため、表示されている数は %COUNT の値、つまり患者数です。

    • 2 つのメンバが列として (または、結果セットの列軸に) 表示されています。Female メンバは女性患者、Male メンバは男性患者を指しています。

  2. 同じクエリの短いバージョンを試してみましょう。

    SELECT gend.gender.MEMBERS ON 0 FROM demomdx
    

    このクエリでは、先ほどのクエリと同じデータが返されます。

  3. ここで、以下のバリエーションを入力します。

    SELECT gend.gender.female ON 0 FROM demomdx
    

    この結果は以下のようになります。

                                        Female
                                            488
    
    

    この例では、クエリによって、このディメンジョンの両方のメンバではなく特定のメンバが選択されました。

  4. 以下のバージョンを試してみましょう (メンバ名の大文字と小文字を変更)。

    SELECT gend.gender.FEMALE ON 0 FROM demomdx
    

    これによって、先ほどのクエリと同じ結果が返されます。

  5. もう少し複雑なクエリを入力してみます。

    SELECT gend.h1.gender.MEMBERS ON 0,homed.h1.zip.MEMBERS ON 1 FROM demomdx
    

    シェルによってクエリが実行され、以下のような結果が表示されます。

                                  Female                 Male
    1 32006                           105                  110
    2 32007                            58                   53
    3 34577                           173                  174
    4 36711                            41                   58
    5 38928                           111                  117
    
    

    この場合は、結果に複数の行 (患者の郵便番号ごとに 1 行ずつ) があります。郵便番号ごとに、男女別の数が表示されています。

    結果に行が複数ある場合、MDX シェルによって、結果の行番号を示す列が表示されます。

軸の省略

MDX の他の実装では、より数字の大きな軸を使用する場合、軸を省略することはできません。つまり、COLUMNS も使用しない限り、ROWS は使用できません。

ただし、DeepSee MDX では、COLUMNS を省略した場合、DeepSee によって以下のように %COUNT が使用されます。

SELECT gend.h1.gender.MEMBERS ON ROWS FROM demomdx
 
1 Female                                488
2 Male                                  512

セット

MDX では、列と行はクエリと結果セットの軸です。例えば、以下の結果セットでは、列軸に性別、行軸に自宅の郵便番号があります。

                              Female                 Male
1 32006                           105                  110
2 32007                            58                   53
3 34577                           173                  174
4 36711                            41                   58
5 38928                           111                  117

軸はセットを使用します。セット式の一般的な構文は以下のとおりです。

{expression1, expression2, ...}

このリストには、項目を任意の数だけ含めることができます。DeepSee MDX では、リスト内の項目が 1 つだけの場合、中括弧を省略できます。また、セットは空でもかまいませんが、その場合はクエリ軸では使用できません。

セット内では、それぞれの式は以下のいずれかにできます。

  • メンバ式。以下のいずれかです。

    • 単一メンバへの名前による明示的な参照。 以下はその例です。

      [PatDim].[GENDERH1].[GENDER].[F]
      
    • 単一メンバを返す MDX 関数を使用する式。以下はその例です。

      [PatDim].[GENDERH1].[GENDER].[F].NEXTMEMBER
      

      (NEXTMEMBER は、レベルの次のメンバを返す MDX 関数です。“レベルを使用した作業” の章では、この関数をはじめとした関数を紹介します。)

  • セットを返す MDX 関数 (MEMBERS など) を使用する式。以下はその例です。

    [dimension_name].[hierarchy_name].[level_name].MEMBERS
    

これ以外にも、他の形式の式や他の種類のセット要素があります。“セットを使用した作業” の章、および "DeepSee MDX リファレンス" を参照してください。

SELECT 文では、NULL 以外の任意のセット式を使用することができます。 一般に SELECT では、1 つの軸を使用するクエリの基本構文は以下のようになります。

SELECT set_expression ON COLUMNS FROM cubename

または

SELECT set_expression ON 0 FROM cubename

以下の形式は、2 つの軸を使用するクエリです。

SELECT set_expression ON COLUMNS,set_expression ON ROWS FROM cubename

または

SELECT set_expression ON 0,set_expression ON 1 FROM cubename

SELECT 文で追加の軸を使用できますが、シェルでは、結果は読み取れる形式で表示されません。

ここで、前のセクションで示したように、異なる種類のセットを使用するクエリのバリエーションをいくつか試してみましょう。

  1. 以下の例では、コンマ区切りのリストによって作成されたセットを使用しています。

    SELECT {gend.h1.gender.MEMBERS,homed.h1.city.MEMBERS} ON 0 FROM demomdx
     
                       Female      Male   Cedar F   Centerv   Cypress   Elm Hei ...
                           488       512       110        99       112       118...
    
    

    ご覧のように、結果には列が多すぎて全体は表示されていません。

  2. では、同じセットを列ではなく行として使用するバリエーションを試してみましょう。

    SELECT {gend.h1.gender.MEMBERS,homed.h1.city.MEMBERS} ON 1 FROM demomdx
     
     1 Female                               488
     2 Male                                 512
     3 Cedar Falls                          110
     4 Centerville                           99
     5 Cypress                              112
     6 Elm Heights                          118
     7 Juniper                              122
     8 Magnolia                             114
     9 Pine                                 121
    10 Redwood                              111
    11 Spruce                                93
    
    
  3. 次に、上記の例を拡張します。性別を列に移動し、自宅の郵便番号を別の行セットとして追加してみましょう。

    SELECT gend.h1.gender.MEMBERS ON 0,{homed.h1.city.MEMBERS,homed.h1.zip.MEMBERS} ON 1 FROM demomdx
     
                                  Female                 Male
     1 Cedar Falls                     58                   52
     2 Centerville                     41                   58
     3 Cypress                         51                   61
     4 Elm Heights                     53                   65
     5 Juniper                         58                   64
     6 Magnolia                        58                   56
     7 Pine                            64                   57
     8 Redwood                         58                   53
     9 Spruce                          47                   46
    10 32006                          105                  110
    11 32007                           58                   53
    12 34577                          173                  174
    13 36711                           41                   58
    14 38928                          111                  117
    
    
  4. 1 つのメンバをセット内で複数回使用してみます。

    SELECT gend.h1.gender.MEMBERS ON 0,{homed.h1.[36711],homed.h1.[36711]} ON 1 FROM demomdx
     
                                  Female                 Male
    1 36711                            41                   58
    2 36711                            41                   58
    
    

メジャーの表示

どのような MDX クエリでも、1 つ以上のメジャーを使用します。使用するメジャーを指定しない場合、DeepSee ではキューブに定義されている既定のメジャー (通常、レコードの数を示す %COUNT) が使用されます。 他のメジャーを表示する方法は複数あります。ここでは、その一部を紹介します。

クエリでメジャーを使用するには、以下の操作を実行します。

  • メジャーを列として表示できます。また、必要に応じてセットを行として表示できます。以下はその例です。

    SELECT MEASURES.[avg allergy count] ON 0,colord.MEMBERS ON 1 FROM demomdx
    
                             Avg Allergy Count
    1 None                                 1.08
    2 Blue                                    1
    3 Green                                1.05
    4 Orange                               1.16
    5 Purple                               1.22
    6 Red                                  1.06
    7 Yellow                               0.94
    
    
  • メジャーを行として表示できます。また、必要に応じてセットを列として表示できます。これは、前の例とは逆です。以下はその例です。

    SELECT gend.h1.gender.MEMBERS ON 0, MEASURES.[avg test score] ON 1 FROM demomdx
     
                                  Female                 Male
    Avg Test Score                  73.49                74.42
    
    
  • 複数のメジャーから成るセットを作成し、そのセットを行または列として使用できます。以下はその例です。

    SELECT {MEASURES.[%COUNT],MEASURES.[avg test score]} ON 0,colord.MEMBERS ON 1 FROM demomdx
    
                                  %COUNT       Avg Test Score
    1 None                            239                72.68
    2 Blue                            124                76.94
    3 Green                           106                   72
    4 Orange                          148                72.89
    5 Purple                          135                74.87
    6 Red                             121                74.92
    7 Yellow                          127                74.41
    
    
  • 以下のように、CROSSJOIN 関数を使用できます。

    SELECT CROSSJOIN(MEASURES.[%COUNT],gend.h1.gender.MEMBERS) ON 0, diagd.h1.diagnoses.MEMBERS ON 1 FROM demomdx
     
                                  Female                 Male
    1 None                            399                  429
    2 asthma                           46                   44
    3 CHD                              14                   23
    4 diabetes                         23                   22
    5 osteoporosis                     21                    1
    
    

    (この関数のより一般的な情報は、このドキュメントで後述する “セットの組み合わせ” を参照してください。)

  • 以下のように、MEMBERS 関数を使用してメジャーをすべて表示できます (%COUNT を除く)。

    SELECT gend.MEMBERS ON 0, MEASURES.MEMBERS ON 1 FROM demomdx
     
                                  Female                 Male
    1 Age                          18,413               17,491
    2 Avg Age                       37.73                34.16
    3 Allergy Count                   326                  332
    4 Avg Allergy Count              1.08                 1.07
    5 Test Score                   29,542               31,108
    6 Avg Test Score                73.49                74.42
    
    

クエリへの単純なフィルタの組み込み

MDX クエリには、フィルタを含めることもできます。フィルタを使用すると、クエリが使用する可能性のあるファクト・テーブルの行の数を減らせます。クエリにフィルタを追加するには、SELECT 文の末尾に以下のような節を追加します。

WHERE filter_details

filter_details の最も簡単な形式は以下のとおりです。

[dim_name].[hier_name].[level_name].[member_name]

ここでは、この章で前述した “メンバとメジャーの参照” と同じバリエーションを使用できます。

この式ではクエリがフィルタ処理されるため、DeepSee はこのメンバに関連付けられたレコードにのみアクセスします。例えば、以下のクエリでは、骨粗しょう症の患者のみを使用しています。

SELECT MEASURES.[%COUNT] ON 0,aged.[age bucket].MEMBERS ON 1 FROM demomdx WHERE diagd.osteoporosis

                                    %COUNT
1 0 to 9                                  *
2 10 to 19                                *
3 20 to 29                                *
4 30 to 39                                *
5 40 to 49                                *
6 50 to 59                                *
7 60 to 69                                7
8 70 to 79                                7
9 80+                                     8

MDX シェルでは、値が NULL であることを示すためにアスタリスク (*) が使用されます。

クエリのフィルタ処理” の章では、WHERE について詳しく説明します。

MDX 結果の内容の理解

ここまで、さまざまな MDX クエリとその結果を確認してきました。ここでは、それらの結果をより形式的に検討してみましょう。MDX シェルでは、MDX クエリの結果が、以下の一般的な形式で示されます。

generated description: result format

結果は以下の規則によって決まります。

  • 出力に結果の行が複数含まれる場合は、参照しやすいように、最初の列には行番号 (nnn (最初の行が 1)) が表示されます。結果の行が 1 つのみの場合は、この列は含まれません。

    この番号列は、MDX シェルにのみ表示され、結果セットには含まれません。

  • 出力には、列軸で使用するセットのメンバごとに、データ・セル列が 1 つ含まれます。

  • 一般に、それぞれの列ラベルは対応するメンバの名前と一致します。このメンバはメジャーである場合も、“通常の” メンバである場合もあります。

  • 行にセットを指定しない場合、出力にはラベルのない行が 1 つ含まれます。

  • 行にセットを指定した場合、出力にはそのセットのメンバごとに行が 1 つ含まれます。指定された行のラベルは、対応するメンバの名前です。このメンバはメジャーである場合も、“通常の” メンバ (つまり、メジャーでないメンバ) である場合もあります。

  • 指定されたデータ・セルには、出力に値またはアスタリスク (*) のいずれかが表示されます。アスタリスクは、その値が NULL であることを示します。

    使用する値を決定するために、DeepSee は列に使用されるメンバおよび行のメンバ (使用される場合) の交差部分を検索します。

    • 1 つのメンバがメジャーで、もう 1 つのメンバがメジャーでない場合、DeepSee は前者のメンバのそのメジャーの値を検索します。 例えば、1 つのメンバが Ave Age メジャーで、もう 1 つのメンバが郵便番号 34577 である場合、対応するデータ・セルには、郵便番号が 34577 の患者の平均年齢が含まれます。

    • どちらのメンバもメジャーでない場合、DeepSee では既定のメジャー (通常、%COUNT) が使用されます。例えば、1 つのメンバが性別 F で、もう 1 つのメンバが郵便番号 34577 である場合、対応するデータ・セルには、郵便番号が 34577 の全女性患者数が含まれます。

    • 両方のメンバがメジャーである場合、DeepSee では列軸のメジャーが使用されます。

      (両方のメンバが計算メジャーである場合は、SOLVE_ORDER も考慮されることに注意してください。詳細は、"DeepSee MDX リファレンス" の “SOLVE_ORDER 節” を参照してください。)

クエリの軸の独立性に関するメモ

DeepSee では、各クエリ軸を他から独立して考慮します。 場合によっては、結果が直観的でないこともあります。ここでは、2 つの例を挙げます。

クエリ内の他のセットから影響を受けないセット順序

どのような場合でも、返されるセットの順序は、クエリ内で使用される他のあらゆるセットから独立しており、結果が直観的でない場合があることを覚えておくことが重要です。例えば、以下のクエリを考えてみます。

SELECT MEASURES.[%COUNT] ON 0, 
TOPCOUNT(homed.city.MEMBERS,100,MEASURES.[%COUNT]) ON 1 FROM demomdx
 
                                    %COUNT
1 Juniper                               122
2 Pine                                  121
3 Elm Heights                           118
4 Magnolia                              114
5 Cypress                               112
6 Redwood                               111
7 Cedar Falls                           110
8 Centerville                            99
9 Spruce                                 93

このクエリは、市町村を患者数に基づいて並べ替えた場合に取得する並べ替え順序を示しています (この例では、選択するメンバの数が 100 に指定されています。これは、実際のメンバの数よりも多いため、すべてのメンバが表示されています)。

上記のクエリを、上位 3 つのメンバが返されるように変更すると、以下のようになります。

SELECT MEASURES.[%COUNT] ON 0, TOPCOUNT(homed.city.MEMBERS,3,MEASURES.[%COUNT]) ON 1 FROM demomdx
 
                                    %COUNT
1 Juniper                               122
2 Pine                                  121
3 Elm Heights                           118

ここで、患者数を性別に基づいて分類した場合の結果について考えてみます。

SELECT CROSSJOIN(MEASURES.[%COUNT],gend.gender.MEMBERS) ON 0,
TOPCOUNT(homed.city.MEMBERS,3,Measures.[%COUNT]) ON 1 FROM demomdx

                              Female                 Male
1 Juniper                          58                   64
2 Pine                             64                   57
3 Elm Heights                      53                   65

このクエリでリストされている市町村の順序は、列の分類を指定しなかった前のクエリの順序と同じです。 この例では、Juniper が患者数の合計に基づく最上位の市町村であるため、最初に表示されています。つまり、並べ替えは、表示される値のいずれでもなく、市町村の患者数の合計で制御されています。

クエリ内の他のセットから影響を受けないセット・メンバシップ

返されるセットのメンバは、クエリ内で使用されるあらゆるセットから独立しており、結果が直観的でない場合があることを覚えておくことも重要です。例えば、以下のクエリを考えてみます。

SELECT MEASURES.[%COUNT] ON 0, TAIL(birthd.year.MEMBERS,10) ON 1 FROM demomdx

                                    %COUNT
 1 1912                                   3
 2 1918                                   1
 3 1919                                   1
 4 1920                                   4
 5 1921                                   2
 6 1922                                   1
 7 1923                                   2
 8 1924                                   1
 9 1925                                   2
10 1927                                   5

ここで、1 つの性別のみを表示した場合の結果について考えてみます。

SELECT CROSSJOIN(gend.male,MEASURES.[%COUNT]) ON 0, HEAD(birthd.year.MEMBERS,10) ON 1 FROM demomdx
 
                                    %COUNT
 1 1912                                   *
 2 1918                                   *
 3 1919                                   *
 4 1920                                   1
 5 1921                                   *
 6 1922                                   *
 7 1923                                   2
 8 1924                                   *
 9 1925                                   1
10 1927                                   1

誕生年は、性別全体で集約されたデータを示す前のクエリの場合と同じです。

DeepSee における名前解決

場合によっては、同じタイプの複数のエンティティが同じ名前を持つことも可能です。例えば、MDX キューブで、階層が異なれば (あるいはディメンジョンが異なれば)、同じ名前で 2 つのレベルを設定できます。キューブ・コマンドで、キューブの内容が以下のように示されたとします。

...
Dimensions
  Geography
    ShipToHierarchy
      State
      City
    OrderByHierarchy
      State
      City

DeepSee では、レベルを参照する場合は、階層名を省略できます。ディメンジョンに同名のレベルが複数含まれている場合、DeepSee では、指定した名前を持つ最初のレベルが使用されます。レベルを明確に参照するには、階層名も指定するようにします。

別の例として、レベルでは、同じ名前のメンバを複数設定することができます。異なる都道府県に同じ名前を持つ市町村がある場合がありますが、それらの市町村は別々のメンバです。また、医師名などきめ細かなレベルを含むキューブの場合は、そのレベルに、名前が同じメンバが複数含まれる場合もあります。DeepSee では、名前を指定してメンバを参照すると、レベル内でその名前を持つ最初のメンバにアクセスします。明確にメンバを参照するには、メンバのキーを使用します。次の章の “メンバのキー” を参照してください。

存在しないメンバ

ほとんどの場合、DeepSee では、存在しないメンバに対して NULL が返されます。これは、シェルではアスタリスク (*) として表されます。 例えば、以下のクエリを考えてみます。

SELECT colord.h1.color.pink ON 0 FROM demomdx
 
                                 No Member
                                          *

ただし、メジャーについては例外です。メジャーは MEASURES ディメンジョンのメンバです。存在しないメジャーに対しては、エラーが返されます。 以下はその例です。

SELECT MEASURES.[pat count] ON 0 FROM demomdx
 
ERROR #5001: Measure not found: pat count

入力エラー

ほとんどの状況で、DeepSee では、入力エラーは、存在しないメンバの場合と同じように扱われます。以下はその例です。

SELECT colord.h1.color.MEMBERSSS ON 0 FROM demomdx
 
                                 No Member
                                          *

別の例を示します。

SELECT colord.MEMBERSSS ON 0 FROM demomdx
 
                                 No Member
                                          *

ただし、ディメンジョンまたはディメンジョン内の要素を参照する場合は、ディメンジョン名が必要です。ディメンジョン名を誤入力すると、DeepSee ではエラーとして扱われます。

SELECT colorddd.h1.color.MEMBERS ON 0 FROM demomdx
 
ERROR #5001: Dimension not found: colorddd

キューブまたはサブジェクト領域の名前を誤入力すると、DeepSee ではエラーとして扱われます。

SELECT colord.h1.color.MEMBERS ON 0 FROM demo

ERROR #5001: Cannot find Subject Area: 'DEMO'

このドキュメントの残りの部分で使用する規約

スペースの都合で、このドキュメントの残りの部分では以下の規約を使用します。

  • COLUMNSROWS ではなく、0 と 1 を使用します。

  • ディメンジョン、階層、レベル、およびメンバの名前では、可能な限り角括弧を省略します ("DeepSee MDX リファレンス" の “識別子” のセクションを参照してください)。

  • 必要な場合を除き、階層名を省略します (これは、DeepSee MDX で許可されています)。

また、クエリ例を素早く確認できるように、以下の規約を使用します。

  • MDX の文、キーワード、および関数は、大文字で示します。

  • キューブ要素などのユーザ指定の詳細は、本文を除き小文字で示します。

FeedbackOpens in a new tab