Créer un LocalReport avec une requête MDX
Bonjour,
Je cherche un moyen de créer un rapport dans une WebForm en utilisant le contrôl ReportViewer et un LocalReport (.rdlc) avec une source de donnée issus d'une requête MDX.
adomd permet de récupérer un DataTable ou un CellSet mais après je sèche... après quelque recherches doc et forum on sent bien que tout est fait pour que ce ne soit pas possible à moins d'utiliser Reporting Services...
Si quelqu'un pouvait m'aider ? ;)
Merci
Stéphane
le 19/11/2007.
voilà la solution : Forum Microsoft : OLAP Data Sources
en utilisant par exemple quelques lignes de codes assez simples pour récupérer un DataSet du résultat de la requête MDX :
Code:
1 2 3 4 5 6 7 8 9
| public DataSet getDataset(string mdxQuery)
{
DataSet ds = new DataSet();
AdomdCommand cmd = new AdomdCommand(mdxQuery, _mdConn);
AdomdDataAdapter adpt = new AdomdDataAdapter(cmd);
int nbOfRows = adpt.Fill(ds);
return ds;
} |
ensuite il faut ajouter une source de donnée au ReportViewer comme ceci :
Code:
1 2 3 4
| /* Display Report */
DataSet dataset = this.getDataset(C_MDXQUERY);
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("ReportingYes", dataset.Tables[0]));
ReportViewer1.DataBind(); |
d'après l'url que j'ai cité plus haut, il faut reproduire excactement le nom des colonnes de Table[0] dans le rapport local comme ceci :
(il faut editer le rapport local en XML)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <DataSets>
<DataSet Name="ReportingYes">
<Query>
<CommandText>SELECT * FROM Table</CommandText>
<DataSourceName>DummyDataSource</DataSourceName>
</Query>
<Fields>
<Field Name="Year">
<rd:TypeName>System.Int32</rd:TypeName>
<DataField>[Time].[Month].[Year].[MEMBER_CAPTION]</DataField>
</Field>
<Field Name="Ca">
<rd:TypeName>System.Decimal</rd:TypeName>
<DataField>[Measures].[CA]</DataField>
</Field>
<Field Name="OrderNb">
<rd:TypeName>System.Int32</rd:TypeName>
<DataField>[Measures].[OrderNb]</DataField>
</Field>
</Fields>
</DataSet>
</DataSets> |
Voilà ! :yaisse2: (enfin...)
je ne me suis pas trop étendu sur les explications, mais n'hésitez pas à me poser des questions sur ce post ;)