2017-05-06 1 views
0

J'ai une requête MDX que je veux utiliser pour télécharger des données Cube dans une base de données SQL. Pour ce faire, je veux que toutes les lignes aient un en-tête, quelque chose n'est pas fait par défaut dans MDX.Comment puis-je ajouter des en-têtes de ligne dans MDX?

Est-ce que quelqu'un pourrait modifier la requête MDX suivante pour ajouter les en-têtes pour les deux colonnes les plus à gauche dans la table résultante?

Requête:

SELECT                     
NON EMPTY                     
{                                   
    [Measures].[Internet Order Quantity], 
    [Measures].[Internet Sales Amount]             
} ON COLUMNS,  
NON EMPTY                     
{ (                      
    [Customer].[Education].[Education].ALLMEMBERS * 
    [Customer].[Home Owner].[Home Owner].ALLMEMBERS 
) } ON ROWS                                    
FROM [Adventure Works] 

table résultante:

Query result

Merci

+0

À moins SSMS est votre dernier outil client utilisateur final. Je ne m'inquiéterais pas de la façon dont il restitue les résultats. Quel est votre véritable outil client? Est-ce qu'il présente le même comportement? – GregGalloway

+0

Le but final est d'interroger périodiquement les données du cube et de les insérer dans une base de données SQL. Ne serait-il pas plus facile d'avoir les bons en-têtes? – user2348684

Répondre

1

La lecture de la requête par un SQL Server linked server connected to SSAS serait un choix logique pour votre scénario d'insérer les résultats d'une requête sur le cube dans SQL Server. Cette requête exacte aura des en-têtes de colonne lorsqu'elle sera lue via un serveur lié. Donc, je ne m'inquiéterais pas de la fenêtre de requête SSMS MDX qui rendrait les résultats de la requête sous forme de Cellset plutôt que de Rowset.

0

La réponse de Greg est correcte. Nous avons trouvé des problèmes (re vitesse & blocage) avec des serveurs liés à SSAS et utiliser la solution CLR suivante:

https://olapextensions.codeplex.com/

Vous pouvez alors effectuer les opérations suivantes avec la procédure stockée:

CREATE TABLE #results(
    Education  VARCHAR(250), 
    Owner   VARCHAR(250), 
    OrderQuantity FLOAT, 
    SalesAmount FLOAT 
); 

DECLARE @Server NVARCHAR(30) = 'localhost' 
DECLARE @Database NVARCHAR(50) = 'AdventureWorksDW2012Multidimensional-EE'; 
DECLARE @MDX NVARCHAR(MAX) = 
' 
SELECT                     
NON EMPTY                     
{                                   
    [Measures].[Internet Order Quantity], 
    [Measures].[Internet Sales Amount]             
} ON COLUMNS,  
NON EMPTY                     
{ (                      
    [Customer].[Education].[Education].ALLMEMBERS * 
    [Customer].[Home Owner].[Home Owner].ALLMEMBERS 
) } ON ROWS                                    
FROM [Adventure Works] 
' 

INSERT INTO #results 
EXEC ExecuteOLAP @Server, @Database, @MDX; 

SELECT * 
FROM #results;