2017-08-14 2 views
8

Ceci est pour une application qui définit dynamiquement les données et rend les rapports.La requête MDX renvoie la valeur dans le rapport mais pas dans le code Visual Basic

J'ai une requête MDX pour un rapport qui repose sur un paramètre. La requête est:

SELECT NULL ON COLUMNS, strtomember(@DateYear) ON ROWS FROM [MYDATACUBE] 

Lors de l'exécution dans le Concepteur de requêtes de rapport, il renvoie une valeur correctement. Toutefois, lors de l'exécution de ce code visuel de base, il ne renvoie rien. Voici la partie importante de mon code:

Dim cn = New AdomdConnection(adomdparamconnectionstrings(countparamsadomd)) 
    Dim da As AdomdDataAdapter = New AdomdDataAdapter() 
    Dim cmd = New AdomdCommand(paramcommands(countparamsadomd), cn) 
    Dim tbl = New DataTable 

    If (adomdparams) Then 'If there are parameters, adds them to the query 
     For l As Integer = 0 To (countparamsadomd - 1) 
      If (adomdparamconnectionstrings(l) = "NODATASET") Then 
       Dim p As New AdomdParameter(paramvaradomd(l), paramadomd(l)) 
       cmd.Parameters.Add(p) 
      Else 
       Dim p As New AdomdParameter(paramvaradomd(l), adomdqueryvalues(l)) 
       cmd.Parameters.Add(p) 
      End If 
     Next 
    End If 

    da.SelectCommand = cmd 

    cn.Open() 
    da.Fill(tbl) 
    cn.Close() 

Je sais la chaîne de connexion fonctionne parce que tous les autres ensembles de données utilisent le même. Je sais que la commande est correcte en utilisant des points de rupture. Je sais que la valeur du paramètre est correcte également en utilisant des points de rupture. Je sais que le code fonctionne globalement parce qu'il fonctionne avec tous les ensembles de données avec lesquels je l'ai testé sauf celui-ci. En utilisant les points de rupture, tout semble fonctionner comme pour les autres ensembles de données, mais ensuite, il ne renvoie aucune valeur.

La table qui en résulte a une colonne correctement nommée ([Date]. [Année]. [Année]. [MEMBER_CAPTION]) mais ne contient aucune ligne. La valeur renvoyée doit être une seule ligne avec l'année dedans.

+0

Vous ne renvoyaient aucun des données sur l'axe des COLONNES, à savoir, 'SELECT NULL ON COLUMNS'. J'ai fourni un exemple ci-dessous qui renvoie la propriété MEMBER_CAPTION d'un membre paramétré. – jhenninger

Répondre

1

J'ai fait quelque chose de similaire en C#.

Si vous avez accès à la dimension et nom de la hiérarchie, alors vous pouvez avoir une requête générique comme ceci:

WITH 
    MEMBER [Measures].[Member Caption] AS StrToMember(@Hierarchy).HIERARCHY.CURRENTMEMBER.MEMBER_CAPTION 
SELECT 
    [Measures].[Member Caption] ON COLUMNS, 
    StrToMember(@DateYear) ON ROWS 
FROM 
    [MYDATACUBE] 

Notez que vous devrez ajouter le paramètre, @Hierarchy, à la commande avant l'exécution de la requête. Il y a une petite astuce dans l'expression de valeur pour le membre calculé. Lors du passage d'une expression de hiérarchie à StrToMember(), il renvoie le membre par défaut de cette hiérarchie. À partir du membre par défaut, vous pouvez utiliser la fonction HIERARCHY pour revenir en arrière pour obtenir la hiérarchie. De la hiérarchie, vous pouvez obtenir le CURRENTMEMBER et sa propriété MEMBER_CAPTION.

Si vous voulez une requête spécifique de la hiérarchie dans votre exemple, vous pouvez utiliser:

WITH 
    MEMBER [Measures].[Member Caption] AS [Date].[Year].CURRENTMEMBER.MEMBER_CAPTION 
SELECT 
    [Measures].[Member Caption] ON COLUMNS, 
    StrToMember(@DateYear) ON ROWS 
FROM 
    [MYDATACUBE] 
+0

Désolé, je n'ai pas consulté ce site depuis un moment et je n'ai pas vu votre réponse. Merci beaucoup, je vais essayer et revenir plus tard – ShadowShine57