65.9K
CodeProject 正在变化。 阅读更多。
Home

将多个数据源绑定到一个报表工具

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2023年2月1日

CPOL

6分钟阅读

viewsIcon

6954

本文阐述了在报表中合并不同数据源的益处。

报表是几乎所有类型应用程序的基本功能。通常,需要合并多个数据源来整合数据并以信息丰富的方式进行可视化。本文阐述了在报表中合并不同数据源的益处。它还展示了如何使用 combit 的 List & Label 来实现这一点。

将报表绑定到不同数据源的原因

在复杂的项目中,通常需要将来自多个源的数据合并到单个报表中。信息通常以多种不同格式、存储在不同的服务器上,并由不同的技术提供。将所有这些信息整合到一个地方,可以更容易地看到全局,并理解数据的不同方面是如何相互作用的。

例如,假设您正在处理一个涉及以下内容的的项目:

  • 在 SQL 数据库中跟踪客户数据,...
  • ... Excel 表格中的销售数据,...
  • ... 以及来自您代码中业务对象的财务数据。

如果没有能够合并多个数据源的报表工具,您将不得不手动从每个源提取信息,并自己尝试理解它。这既耗时又容易出错。此外,还很难发现数据中的总体趋势和模式。

报表工具如何提供帮助?

合并数据

高级报表工具允许您和您的最终用户将来自各种数据源的数据合并到单个报表中。它们为不同类型的数据源提供适配器,并允许混合使用。通常,对于最终用户来说,不同源之间没有可见的差异。任何类型的数据都可以以相同的方式使用和报告,而无需知道其来源。

整合和可视化数据

除了提供来自不同来源的数据外,报表工具还可以帮助进行数据整合。您可以为不同数据源添加关系,根据业务需求规范化或聚合数据,并格式化值。许多报表工具允许您创建自定义的、甚至交互式的图表和图形,帮助您以直观的方式可视化数据。这样更容易识别原始数据中可能不明显显示的趋势和模式。

报表工具的另一个优点是,它们有助于自动化许多数据分析中繁琐且耗时的任务。例如,您可以使用它们来安排定期生成报表并发送给相关人员,或者在满足特定条件时触发警报。这有助于您和您的最终用户随时了解项目进展,并确保您始终使用最新信息。

自建还是购买?

当向应用程序添加功能(如报表)时,您总是需要做出关键的自建或购买决策。是自己编写功能,还是授权使用商业第三方组件?

使用组件通常可以带来更一致和可靠的结果。该组件经过测试,并在各种场景中已被证明有效。它还极大地减少了内部开发资源的需要。开发人员可以专注于构建自定义功能,而不是重新创建常用功能。

组件还可以使项目更容易扩展和维护,因为它们可以根据需要轻松更新或替换。因此,像 combit 的 List & Label 这样的高级报表工具可以轻松节省数年的开发工作。

如果您对 List & Label 感兴趣,可以查看 在线演示 或查看以下步骤以及 免费且功能齐全的试用版 中的所有内容。

在 List & Label 中设置组合数据源

List & Label 提供了广泛的数据提供程序,涵盖所有流行数据库(例如 Microsoft SQL Server、PostgreSQL、MySql、SQLite...)、文件格式(例如 XML、JSON、XLS)和 Web 源(例如 REST)。甚至还有一个特殊的提供程序,允许混合来自这些源的数据:DataProviderCollection。用法非常直接。

从 SQL Server 提取数据

要访问 SQL Server 数据,您可以使用 SqlConnectionDataProvider 类,它将连接作为构造函数参数

// build the connection srtring
var builder = new SqlConnectionStringBuilder();
builder.DataSource = "dbserver";
builder.InitialCatalog = "CustomerData";
// initialize the connection to the database
var connection = new SqlConnection(builder.ConnectionString);
// establish a matching List & Label data provider
var sqlProvider = new SqlConnectionDataProvider(connection);

连接到 Excel 工作表

Excel 数据可以通过 XlsDataProvider 类添加

// access the Excel sheet data
XlsDataProvider xlsProvider = new XlsDataProvider(<PathToXLS>, true /*firstRowContainsColumnNames*/);

合并数据

要混合这两个源,您可以按以下方式使用 DataProviderCollection 类

// construct a provider collection object
DataProviderCollection collection = new DataProviderCollection();
// add the two data sources
collection.Add(sqlProvider);
collection.Add(xlsProvider);

就这样。现在,List & Label 可以绑定到组合数据源,提供其提供的所有可视化和分析功能。这同样适用于桌面(WinForms/WPF)和云应用程序。桌面应用程序将调用

using (ListLabel LL = new ListLabel())
{
    LL.DataSource = collection;
    LL.Design();
}

以启动带有组合数据源的设计器。对于云应用程序,只有一个控制器需要实现才能打开 Web 报表设计器。这里的代码将读取

public override void OnProvideListLabel(ProvideListLabelContext provideListLabelContext)
{
    ListLabel LL = new ListLabel();
    LL.DataSource = collection;
    provideListLabelContext.NewInstance = LL;
}

动态混合内存中的数据

连接到不同数据源的另一种方法是将它们加载到内存中。这允许许多高级功能,例如对来自不可排序数据源的数据进行闪电般的过滤和排序。在上面的示例中,您只需要将 Excel 数据包装在内存中的数据源中

InMemoryDataProvider inMemoryProvider = new InMemoryDataProvider();
inMemoryProvider.AddTable(xlsProvider, "Orders");

然后使用此 InMemoryDataProvider 实例而不是原始的 Excel 提供程序。List & Label 甚至可以使用 CrossProviderRelation 在 SQL 和包装的 XLS 数据之间建立关系

collection.AddCrossProviderRelation(relationName: "Customers2Orders", parentProvider: sqlProvider, parentTableName: "Customers", parentColumnName: "CustomerID", childProvider: "inMemoryProvider", childTableName: "Orders", childColumnName: "CustomerID");

这为最终用户提供了一种便捷的方式来处理设计器中的数据,将两个数据源融为一体。

交互式组合不同数据源

这是 List & Label 支持的另一种替代方法。企业版提供了一个现成的、基于浏览器的云报表解决方案,即 combit Report Server。它支持交互式处理,并直接支持 List & Label 的大多数数据源。

从 SQL Server 提取数据

配置数据源很简单。要连接到 SQL Server 数据,可以使用以下属性对话框

如何从 SQL Server 拉取数据

连接到 Excel 工作表

接下来,可以将 Excel 工作表添加到组合中。通过选择“内存模式”,可以使用排序和过滤等高级功能

如何将 Excel 工作表添加到数据组合中

组合数据

现在,这两个数据源可以分配给报表模板

组合数据的报表模板

通过单击“添加关系”,可以配置 Excel 和 SQL 数据之间的必需关系

添加关系以组合数据

这就足够了,可以交互地重现第一部分的代码步骤。在设计器中,这两个表可以在两种情况下使用(且相同),为大量不同格式的交互式、关系型报表提供支持。

交互式和关系型报表的示例

延伸阅读

有关 List & Label 数据绑定选项的更多信息,请参阅 combit 的 报表博客 或 combit 知识库

© . All rights reserved.