Create Data Extract
- 5 minutes to read
A data extract is a compressed snapshot of data obtained from the existing data source.
Note
Data Extract does not support the OLAP Data Source.
Create a Data Extract with the Data Source Wizard
To create a new data extract from the existing data source, perform the following steps.
Click the New Data Source button in the Data Source ribbon tab.
On the first page of the invoked Data Source Wizard dialog, select Data extract and click Next.
On the next page, select whether to create a new data extract or load data from the extract data file.
- To create a new data extract, select Create a new data extract from the existing data source and specify the Data Source and Data Member. Click Next.
- To establish a connection to an existing data extract, select Load an existing data extract from a file and select the .dat file. Click Finish.
(Conditional) The next page appears if you create the data extract from the Entity Framework Data Source or Object Data Source. The page allows you to select the fields to store in the data file.
On the next page, you can specify the filter applied to data. Review the Filter Data via the Filter Editor article for more information.
You can limit the amount of data to extract. Enable the Limit rows to extract option and specify the number of rows. Click Next.
Note
Use the Preview button to see the data that the resulting data extract contains.
(Conditional) The next page appears if the original data source contains parameters ( the parameterized SQL filter query with dashboard parameters).
On the final page, specify a path to the file that contains the resulting data extract.
Click Finish. This action creates the data extract and displays its fields in the Data Source Browser. You can use this data extract as a regular data source.
Create a Data Extract in Code
Create the DashboardExtractDataSource class instance and specify the following:
- Specify the original data source with the ExtractSourceOptions.DataSource property. To access the ExtractSourceOptions class, use the DashboardExtractDataSource.ExtractSourceOptions property.
- Specify the data member with the ExtractSourceOptions.DataMember property.
Note
Note that the data member should be specified only for the SQL or Entity Framework data sources.
- Specify the path to the extract file with the DashboardExtractDataSource.FileName property and call the DashboardExtractDataSource.UpdateExtractFile method to create that file.
Finally, add the created DashboardExtractDataSource object to the Dashboard.DataSources collection.
Example
This example demonstrates how to create the Extract Data Source, replace existing dashboard data sources with Extract Data Sources and update the Extract data file.
The DashboardViewer loads a dashboard. The dashboard is initially bound to the Microsoft SQL Server database file (.mdf) with the DashboardSqlDataSource.
The CreateExtractAndSave method creates the DashboardExtractDataSource based on the original data source, adds the newly created data source to the dashboard, iterates over dashboard items to change the data source settings, and finally saves the modified dashboard and the Extract data file.
The UpdateExtract method calls the DashboardExtractDataSource.UpdateExtractFile() method for each Extract Data Source in the dashboard.
using DevExpress.DashboardCommon;
using DevExpress.DashboardWin;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace ExtractDataSourceExample {
public partial class Form1 : DevExpress.XtraEditors.XtraForm {
public Form1() {
InitializeComponent();
dashboardViewer1.CustomizeDashboardTitle += DashboardViewer1_CustomizeDashboardTitle;
dashboardViewer1.LoadDashboard("DashboardTest.xml");
}
delegate void SafeUpdate(string file);
private void CreateExtractAndSave() {
DataSourceCollection dsCollection = new DataSourceCollection();
dsCollection.AddRange(dashboardViewer1.Dashboard.DataSources.Where(d => !(d is DashboardExtractDataSource)));
foreach (var ds in dsCollection) {
DashboardExtractDataSource extractDataSource = new DashboardExtractDataSource();
extractDataSource.ExtractSourceOptions.DataSource = ds;
if (ds is DashboardSqlDataSource)
extractDataSource.ExtractSourceOptions.DataMember = ((DashboardSqlDataSource)(ds)).Queries[0].Name;
extractDataSource.FileName = Path.GetFullPath($"Extract_{ds.Name}.dat");
extractDataSource.UpdateExtractFile();
foreach (DataDashboardItem item in dashboardViewer1.Dashboard.Items)
if (item.DataSource == ds)
item.DataSource = extractDataSource;
}
dashboardViewer1.Dashboard.DataSources.RemoveRange(dsCollection);
dashboardViewer1.Dashboard.SaveToXml("Dashboard_Extract.xml");
}
private void UpdateExtract() {
dashboardViewer1.ReloadData();
foreach (var ds in dashboardViewer1.Dashboard.DataSources.Where(d => d is DashboardExtractDataSource)) {
((DashboardExtractDataSource)ds).UpdateExtractFile();
}
}
private async void UpdateExtractAsync() {
await dashboardViewer1.UpdateExtractDataSourcesAsync(
(fileName, result) => {
OnDataReady(fileName);
},
(fileName, result) => {
MessageBox.Show($"File {fileName} updated ");
});
}
void OnDataReady(string fileName) {
dashboardViewer1.Invoke(new SafeUpdate(UpdateViewer), new object[] { fileName });
}
void UpdateViewer(string fileName) {
MessageBox.Show($"Data for the file {fileName} is ready ");
dashboardViewer1.ReloadData();
}
private void DashboardViewer1_CustomizeDashboardTitle(object sender, CustomizeDashboardTitleEventArgs e) {
DashboardToolbarItem itemUpdate = new DashboardToolbarItem((args) => UpdateExtract()) {
Caption = "Update Extract Data Source",
};
e.Items.Add(itemUpdate);
DashboardToolbarItem itemUpdateAsync = new DashboardToolbarItem((args) => UpdateExtractAsync()) {
Caption = "Async Update Extract Data Sources",
};
e.Items.Add(itemUpdateAsync);
DashboardToolbarItem itemSave = new DashboardToolbarItem((args) => CreateExtractAndSave()) {
Caption = "Create Extract Data Source",
};
e.Items.Insert(0,itemSave);
}
}
}