2016-06-30 11 views
0

はここに私のOLAPキューブのスキーマですMDX:測定に基づいて、ディメンションのトップ10は

<?xml version="1.0"?> 
<Schema name="mySchema"> 
    <Cube name="myCube"> 
     <Table name="fact_access_logs_views"/> 
     <Dimension name="Countries" foreignKey="country_code_id"> 
      <Hierarchy hasAll="true" primaryKey="country_code_id"> 
       <Table name="dim_country_code"/> 
       <Level name="CountryCodes" column="CountryCode" uniqueMembers="false"/> 
      </Hierarchy> 
     </Dimension> 
     <Dimension name="Channels" foreignKey="channel_id"> 
      <Hierarchy hasAll="true" primaryKey="channel_id"> 
       <Table name="dim_channel"/> 
       <Level name="Channels" column="shortname_chn" uniqueMembers="false"/> 
      </Hierarchy> 
     </Dimension> 
     <Dimension name="Time" foreignKey="access_time_id"> 
      <Hierarchy hasAll="true" primaryKey="access_time_id"> 
       <Table name="dim_time_access"/> 
       <Level name="Year" column="Year" uniqueMembers="false"/> 
       <Level name="Month" column="Month" uniqueMembers="false"/> 
       <Level name="Date" column="Date" uniqueMembers="false"/> 
       <Level name="Hour" column="Hour" uniqueMembers="false"/> 
      </Hierarchy> 
     </Dimension> 
     <Measure name="View Count" column="id" aggregator="count" formatString="#,###"/> 
    </Cube> 
</Schema> 

私は、トップ10のビューのカウントにし、さらに、それぞれの国の中に基づいて上位10カ国を見つけるれるやろうとしていますチャネルを表示します。私はMDXクエリを構築するのを手伝ってください。私はこれに従うことを試みたhttps://msdn.microsoft.com/en-us/library/ms145579 しかしキューブを見ている間エラーを得ることを終えた。

答えて

-1

あなたは、数生成し、CROSSJOINこの使用してトップを達成することができます。

WITH 
    SET TEMP AS 
     'Generate(TopCount([Countries].[CountryCodes].Members, 
     10, 
     [Measures].[View Count]), 
     Crossjoin(
      {[CountryCodes].CurrentMember}, 
      TopCount(
       [Channels].[Channels].Members, 
       10, [Measures].[View Count]) 
      ) 
     )' 

select {[Measures].[View Count]} ON COLUMNS, 
[TEMP] ON ROWS 
from [myCube] 
+0

あぁ?? – mxix

+0

@mxixあなたの答えはうまくいかず、あなたはクロスジョインを使用しませんでした。 – user3602022

+0

SQL Server SSASを使用している場合。できます。明示的な交差結合の有無にかかわらず。問題ない。 – mxix

1

TopCountとGenerateを使用すると、このようにすることができます。

TopCountはあなたの尺度で注文されたトップメンバーを提供します。ビューによって

トップ10国:

TopCount([Countries].[CountryCode].[CountryCode],10 ,[Measures].[View Count] ) 

が次にあなたが反復されて生成し、上位国 の最初のセットをCURRENTMEMBERそしてチャンネルを超えるがために同じロジックを使用してトップチャンネルをgettting。

WITH 
    SET TOPCHANNELSperTOPCOUNTRY AS 
    Generate 
    (
     TopCount 
     (
     [Countries].[CountryCode].[CountryCode] 
     ,10 
     ,[Measures].[View Count] 
    ) 
    ,TopCount 
     (
     (
      [Countries].[CountryCode].CurrentMember 
     ,[Channels].[Channels].[Channels] 
     ) 
     ,10 
     ,[Measures].[View Count] 
    ) 
    ) 
SELECT 
    [Measures].[View Count] ON 0 
,TOPCHANNELSperTOPCOUNTRY ON 1 
FROM [myCube]; 

(申し訳ありませんが、いくつかの次元名またはメンバーが正しくない場合)...

+0

(あなたが 'MDXStudio'を使用する場合 - それは自由である - それは非常に便利であるボタン' Format'を持っている)、これは私の答えから、何が違うのですか – whytheq

関連する問題