2009-02-25 18 views
1

私はMDXを初めて使いました。これは簡単な質問でなければならないが、私は答えを見つけることができませんでした。シンプルなMDX質問

質問と回答を持つアンケートをモデリングしています。私が達成しようとしているのは、質問に具体的な回答をした人の数を調べることです。男性の数は、私が個別に正しい結果が

SELECT 
     [Measures].[Fact Demographics Count] ON Columns 
FROM 
     [Dsv All]    
WHERE 
     [Answer].[Dim Answer].&[1] 

[Measures].[Fact Demographics Count]を返された質問については、以下のクエリを実行すると

20〜25歳の

[Answer].[Dim Answer].&[1]がある主キー列のカウントです男性の答えの鍵

男性の人数の結果は150です 20-25 = 12の間の人数の結果12

しかし、次のクエリを実行すると、男性で20-25歳の人が増えるわけではありません。男性である人の数と20-25人の人の数の和を得ます。

SELECT 
     [Measures].[Fact Demographics Count] ON Columns 
FROM 
     [Dsv All]    
WHERE 
     {[Answer].[Dim Answer].&[1],[Answer].[Dim Answer].&[9]} 

結果= 162

ファクトテーブルの構造である

FactDemographicsKey、

RespodentKey、

QuestionKey、

AnswerKey

は、すべてのヘルプは非常にあなたがMSSQLを使用している場合は、あなたが欲しい情報を持つことになり、いくつかの余分な行を取得するには、「ROLLUP WITH」を使用することができます

おかげ

答えて

0

まずはお返事いただきありがとうございます。これは、MDXの初心者でSQLを使用している人にとって、簡単に解決できる興味深いものでした。

ここで興味のある方は、ソリューションの概要をご覧ください。

私は3つのテーブル

  1. factDemographicsを持っています(何を答えた人)の回答者とその回答を保持している

  2. dimAnswer:答え

  3. dimRespondent:回答

cのデータソースビューでube私は名前付きクエリを使ってfactDemographicsを5回複製し、これらのfact1、fact2、...、fact5という名前を付けました。 VS Studioの作成キューブウィザードを使用して

(これは5つのメジャーグループを作成します)私は、次のファクトテーブル

  • dimRespondentファクトテーブルファクトテーブルとして

    1. fact1、fact2、...を設定します。この表を使用して回答者の数を取得します。
    2. 元のfactDemographicsテーブルを削除しました。

    キューブが、私はそれらをフィルタ1の命名、dimAnswer寸法を5回重複作成された後は

    を次のように、フィルタ2は、...

    は最後にキューブ構造の寸法用法]タブでは、私は一緒にこれらのリンク多くのdimRespondent

    に多くの多くのdimRespondent

    filter3に多くのdimRespondent

    フィルタ2の多くに多くのフィルタ多くdimRespondent

    フィルタ1の正規関係fact1

    フィルタ2の正規関係fact2

    filter3定期的関係fact3

    filter4定期的関係fact4

    に多くの多くのdimRespondent

    filter5に多くの

    filter4

    filter5定期的関係fact5

    これは今私のクエリがこれまでに5つの質問によってフィルタリングすることができ

    SELECT 
        [Measures].[Dim Respondent Count] On 0 
    FROM 
        [DemographicsCube] 
    WHERE 
        (
         [Filter1].[Answer].&[Male], 
         [Filter2].[Answer].&[20-25] 
        ) 
    

    として、私は私のオリジナルのポストで使用したクエリを書き直すために私を可能にします。

    これは機能しますが、より洗練されたソリューションがあると確信していますが、誰かがそれが何であるか知っていれば、私はそれを聞くのが大好きです。

    ありがとうございました

  • -1

    をいただければ幸いです。また、あなたが必要とする "GROUP BY"を使用していません。

    GROUP BYを使用してセットをグループに分割し、集計関数を使用してカウントやその他の統計を取得します。

    例:

    select AGE, GENDER, count(1) 
    from MY_TABLE 
    group by AGE, GENDER 
    with rollup 
    

    これは、各年齢群で、あなたのテーブルにいる人の男女それぞれの数を与え、「ロールアップ」でしょう、あなたのテーブルの人々の総数を与えるだろう、性別にかかわらず各年齢層の数字、および年齢に関係なく各性別の数を示します。何かのように

    AGE GENDER COUNT 
    --- ------ ----- 
    20  M 1245 
    21  M 1012 
    20  F 942 
    21  F 838 
         M 2257 
         F 1780 
    20   2187 
    21   1850 
          4037 
    
    +0

    なぜこれが投票されましたか?それは簡単な方法です!複雑なMDXコードを扱うのは、必要なときに単純なグループ記述ですか? – Jasmine

    1

    これは、あなたが必要なものを与えるかもしれないMDX関数を見てください。 IDに対してフィルタリングするためにFILTERとMember Propertiesを組み合わせて使用​​することもできます。 AgeとGenderが同じディメンション(Answers)のメンバーであるため、OLAPキューブがどのように構造化されているのか(私の経験から)、あなたがしようとしていることは少し問題です彼らはそれぞれ集約のために自分の細胞を取得しますが、AgeとGenderがそれぞれ独自の次元にある場合とは異なり、一緒に追加される場合を除いて、互いに関連して集計されません。OLAPキューブでは、各ディメンションの各メンバと他のディメンションの各メンバとの各組み合わせが、そのメジャーの値を持つ「セル」を取得します。これは必要なものですが、同じディメンションのメンバ(Answersなど)は、そのようにしてクロス計算されません。

    可能であれば、個別のディメンション(個々のディメンションに固有のディメンションを持つAge and Gender)に個別の回答を分けておきたい場合は、自然にキューブから流出します。さもなければ、私はMDXのfiddelryがたくさんあると思います。 (私はMDXエキスパートではありませんが、私はこの問題を完全に解決できませんでしたが、それは私の理解です)

    また、上記のMDXソリューションは、あなたはあなたが書く必要があると思う。 MDXと多次元分析ははありません。はSQLと似ており、OLAPデータベースとMDXの構造をしっかりと理解していなければなりません。その本は非常に素晴らしい仕事です部門。

    0

    基準やスライスに関する問題を見つけようとするとき、測定値ではなく次元にスライスしているアイテムを分類すると便利です。

    select 
         [Measures].[Fact Demographics Count] on Columns 
    from [Dsv All]    
    where 
    { 
        [Answer].[Dim Answer].&[1], 
        [Dim Age Band].[20-25] 
    } 
    

    あなたは本当にMDXのパワーを使用していませんが、あなたはただ一つの価値を得ています。

    select 
         [Dim Answer].Members on Columns, 
         [Dim Age Band].Members on Rows 
    from [Dsv All] 
    where ([Measures].[Fact Demographics Count]) 
    

    は(行の)年齢バンドによって(カラム上)性別を破壊するあなたのピボットテーブル(またはクロスタブ)を提供します。

    BTW - あなたはこの本を学んでいます:MDX Solutionsは私が見つけた最高の出発点です。

    +0

    MDXソリューションを購入して読んでください。優れたリソース。 – Nathan

    関連する問題