2016-06-06 3 views
0

Ich habe diese Anfrage:Wählen Hierarchize/Drill-Down Spalten von Analysis Service

SELECT 
    { 
    [Measures].[ContractValue] 
    ,[Measures].[ContractVolumeMWh] 
    ,[Measures].[ContractVolumeMW] 
    } 
    DIMENSION PROPERTIES 
    PARENT_UNIQUE_NAME 
    ,HIERARCHY_UNIQUE_NAME 
    ON COLUMNS 
,NON EMPTY 
    Hierarchize 
    (
     DrillDownMember 
     (
     DrillDownMember 
     (
      DrillDownMember 
      (
      DrillDownMember 
      (
       CrossJoin 
       (
       { 
        [HalfHourEnding].[Year].[All] 
       ,[HalfHourEnding].[Year].[Year].ALLMEMBERS 
       } 
       ,{ 
        (
        [HalfHourEnding].[Quarter].[All] 
        ,[HalfHourEnding].[Month].[All] 
        ,[Book].[Book].[All] 
        ,[InstrumentType].[InstrumentType].[All] 
       ) 
       } 
      ) 
      ,[HalfHourEnding].[Year].[Year].ALLMEMBERS AS year 
      ,[HalfHourEnding].[Quarter] 
      ) 
      ,[HalfHourEnding].[Quarter].[Quarter].ALLMEMBERS 
      ,[HalfHourEnding].[Month] 
     ) 
     ,[HalfHourEnding].[Month].[Month].ALLMEMBERS 
     ,[Book].[Book] 
     ) 
     ,[Book].[Book].[Book].ALLMEMBERS 
     ,[InstrumentType].[InstrumentType] 
    ) 
    ) 
    DIMENSION PROPERTIES 
    PARENT_UNIQUE_NAME 
    ,HIERARCHY_UNIQUE_NAME 
    ON ROWS 
FROM [ContractDetail] 
WHERE 
    (
    [AsAt].[As at Business Date].&[2016-06-04T00:00:00] 
    ,[Region].[Region].&[TTT] 
) 
CELL PROPERTIES 
    VALUE 
,FORMAT_STRING 
,LANGUAGE 
,BACK_COLOR 
,FORE_COLOR 
,FONT_FLAGS; 

, die, wenn ich in Microsoft Analysis Server laufen erhalte ich:

enter image description here

Welche den richtigen Ausgang ist jedoch Ich bekomme keine Header für die ersten fünf Spalten. Dies führt zu dem Problem, dass ich keine dieser Spalten auswählen kann, wenn ich diese Daten mithilfe von openquery aus tsql auswählen möchte.

Dies ist die Abfrage von Tsql, es gibt mir alles in der richtigen Reihenfolge, aber ich bin nicht in der Lage, Jahr Quartal Monat Buch instrumentType zu erhalten.

DECLARE @ContractsTable as TABLE ( 
                             Year varchar(100), 
                             Quarter varchar(100), 
       Month varchar(100), 
                             Book varchar(100),  
      InstrumentType  varchar(100), 
                   Value      decimal(16,2), 
                             Volume_MWH   decimal(16,2), 
                             Volume_MW    decimal(16,2) 


                 ) 


Declare @ContractsQuery as nvarchar(max) 
SET @ContractsQuery =  
' 
SELECT 
"[Measures].[ContractValue]" as value, 
"[Measures].[ContractVolumeMWh]" as MWH, 
"[Measures].[ContractVolumeMW]" as MW 
from OpenQuery(CONTRACT_IMDB,  
    ''SELECT 
    { 
    [Measures].[ContractValue] 
    ,[Measures].[ContractVolumeMWh] 
    ,[Measures].[ContractVolumeMW] 
    } 
    DIMENSION PROPERTIES 
    PARENT_UNIQUE_NAME 
    ,HIERARCHY_UNIQUE_NAME 
    ON COLUMNS 
,NON EMPTY 
    Hierarchize 
    (
     DrillDownMember 
     (
     DrillDownMember 
     (
      DrillDownMember 
      (
      DrillDownMember 
      (
       CrossJoin 
       (
       { 
        [HalfHourEnding].[Year].[All] 
       ,[HalfHourEnding].[Year].[Year].ALLMEMBERS 
       } 
       ,{ 
        (
        [HalfHourEnding].[Quarter].[All] 
        ,[HalfHourEnding].[Month].[All] 
        ,[Book].[Book].[All] 
        ,[InstrumentType].[InstrumentType].[All] 
       ) 
       } 
      ) 
      ,[HalfHourEnding].[Year].[Year].ALLMEMBERS AS year 
      ,[HalfHourEnding].[Quarter] 
      ) 
      ,[HalfHourEnding].[Quarter].[Quarter].ALLMEMBERS 
      ,[HalfHourEnding].[Month] 
     ) 
     ,[HalfHourEnding].[Month].[Month].ALLMEMBERS 
     ,[Book].[Book] 
     ) 
     ,[Book].[Book].[Book].ALLMEMBERS 
     ,[InstrumentType].[InstrumentType] 
    ) 
    ) 
    DIMENSION PROPERTIES 
    PARENT_UNIQUE_NAME 
    ,HIERARCHY_UNIQUE_NAME 
    ON ROWS 
FROM [ContractDetail] 
WHERE 
    (
    [AsAt].[As at Business Date].&[2016-06-04T00:00:00] 
    ,[Region].[Region].&[TTT] 
) 
CELL PROPERTIES 
    VALUE 
,FORMAT_STRING 
,LANGUAGE 
,BACK_COLOR 
,FORE_COLOR 
,FONT_FLAGS; '' 

) 
' 


INSERT INTO @ContractsTable(Value,Volume_MWH,Volume_MW) 
EXEC sp_executesql @ContractsQuery 

Select * From @ContractsTable 

Der Ausgang ist

enter image description here

Jetzt habe ich will einfach nur die Ausgabe von Analysen zu extrahieren, aber ich bin nicht in der Lage, alle Spalten auswählen. Und ich bin nicht in der Lage herauszufinden, wie ich diese Spalten definiere, wo ich in den Dimensionen bohre.

+0

ersetzen Sie zunächst Ihre aktuelle Select-Klausel mit Select * .... Sie werden dann wissen, was die Spaltennamen sind - normalerweise erhalten Sie bei der Verwendung von openquery mehr Spalten als in der mdx angegeben. Von der Ausgabe von Select * können Sie die Spaltenüberschriften sehen – whytheq

Antwort

0

Sie können microsofts OPENQUERY wie folgt verwenden:

SELECT * FROM OPENQUERY(olap_server, 
    'SELECT [unit sales] FROM myCubeName') 

wo olap_server ist der Name des verknüpften olap Server

oder

Sie die execute olap Funktion verwenden können, die hier zur Verfügung: https://olapextensions.codeplex.com/

Zunächst verwendeten wir openquery aber wir verwenden jetzt olapextensions, da es einfacher und effizienter scheint.


bearbeiten

Zunächst folgendes zu finden, die Header aller Spalten laufen zur Verfügung:

Declare @ContractsQuery as nvarchar(max) 
SET @ContractsQuery =  
' 
SELECT 
* 
from OpenQuery(CONTRACT_IMDB,  
    ''SELECT 
    { 
    [Measures].[ContractValue] 
    ,[Measures].[ContractVolumeMWh] 
    ,[Measures].[ContractVolumeMW] 
    } 
    DIMENSION PROPERTIES 
    PARENT_UNIQUE_NAME 
    ,HIERARCHY_UNIQUE_NAME 
    ON COLUMNS 
,NON EMPTY 
    Hierarchize 
    (
     DrillDownMember 
     (
     DrillDownMember 
     (
      DrillDownMem 
... 
... 

Dann wird die * mit bestimmten Namen ersetzen.

+0

Wenn Sie meinen Code lesen, was ich getan habe: SELECT "[Messungen]. [ContractValue]" als Wert, "[Maßnahmen]. [ContractVolumeMWh]" als MWH, "[Measures]. [ContractVolumeMW]" als MW von OpenQuery (CONTRACT_IMDB, jedoch .. jetzt kann ich die Spalten mit Jahr, Quartal, Monat, Hedgebook usw. nicht auswählen – ALEXANDER

+0

@ALEXANDER wenn diese Spalten zurückgegeben werden die mdx dann können sie in der sql ausgewählt werden! Nur 'Select *' zuerst, so dass Sie die Namen der Spalten wissen - dann fügen Sie die Spaltennamen in Ihre sql ..... oder bin ich etwas fehlt. – whytheq

Verwandte Themen