2016-06-30 8 views
0

Hier ist mein OLAP-Cube-SchemaMDX: Die Top Ten einer Dimension basierend auf dem Maß

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

was ich versuche, Top-Ten-Länder basierend auf Sicht Zahl zu tun ist, herauszufinden, und weiter in den einzelnen Ländern, die Top-Ten Kanäle angesehen. Bitte hilf mir, eine MDX-Abfrage zu erstellen. Ich habe versucht, diese https://msdn.microsoft.com/en-us/library/ms145579 zu folgen, aber endete Fehler beim Betrachten des Würfels.

Antwort

-1

Sie können diese unter Verwendung von Top Count erreichen, generieren und 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

Oo wie ist das anders aus meiner Antwort ?? – mxix

+0

@mxix Ihre Antwort hat nicht funktioniert, Sie haben das Cross-Join nicht verwendet. – user3602022

+0

wenn Sie sql-server SSAS verwenden. Es klappt. Mit oder ohne explizites Crossjoin. Kein Problem. – mxix

1

Mit TopCount und Generate können Sie es so machen.

TopCount wird Ihnen die Top-Mitglieder nach Ihrem Maß Ihrer Wahl bestellen.

Top 10 Länder nach Ansichten:

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

Dann iterieren Sie erzeugen und Currentmember dem ersten Satz von Top Länder und die Top Kanäle gettting die gleiche Logik oben verwenden, aber für Channel.

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]; 

(Sorry, wenn einige Dimension Namen oder Mitglieder nicht korrekt sind) ...

+0

(wenn Sie 'MDXStudio' - es ist kostenlos - es einen Knopf hat' Format', dass es sehr nützlich ist) – whytheq

Verwandte Themen