Excel电子表格列可以像普通数据库表列一样编入索引吗?

我有一个客户试图使用一个75MB的Excel电子表格作为数据库。 他们抵制移动到其他任何东西。 我不知道索引Excel电子表格的方法,所以我想我会问。 我做了Google的“索引Excel”,但是我没有find任何东西。 Excel中似乎有一个“索引”function,与数据库索引无关(除非我读错了)。

编辑(附加信息):一个水晶报告已被写入这个电子表格,它有40,是40,子报告,都与相同的多标签电子表格。 这很疯狂,但他们是这么devise的。 处理数据的时间非常荒谬,如果数据被编入索引,它仍然会很慢,但是速度会减慢100倍。

您不能索引Excel电子表格。 Excel中的= INDEX()函数只是一种获取单元格引用的方法,与任何RDBMS的定义特征“索引”无关。 数据库pipe理系统是昂贵而复杂的原因,其中之一是因为它们提供了组织数据以便快速检索和处理的能力。

但是,你真正的问题似乎比技术更具政治性! 我不知道你有什么样的时间和资源,但是我会看看你是否可以将这个电子表格导入到某种免费/便宜的数据库(如SQL Server Express,甚至是Access)中,模拟报告给客户演示。 从你所描述的情况来看,似乎他们真的不知道他们可以看到什么样的performance,现在他们还得面对什么。 如果他们看到一个经常使用的报告比他们通常看到的要快50倍,他们可能会改变他们对Excel的看法。

一种帮助处理数据的方法是使用SSIS任务将电子表格数据每晚(或某个时间间隔)放到SQL表中,然后根据这个表编写报告 – 用户仍然可以更新电子表格,为报告提供一些性能。

在我看来,更大的问题是水晶的使用,有两个方面:

1:子报告将在每个详细信息行中运行一次,以便一个子报告可以运行几十次或几百次。 即使他们处于最高级别(每个页面一个或一个相似),这些子报告的开销也是令人讨厌的。

2:水晶引擎不是整理数据的最快捷的方法(但是对于Excel工作表来说,这是唯一的方法)。

有几件事你可以做,但他们都涉及到一堆返工:

1:假设你可以使用我提出的将数据传输到SQL的build议,编写存储过程来实际生成报表数据(分组,sorting,过滤等),然后使用Crystal来显示它(而不是使用Crystal引擎做任何事)。 这应该会对每个报告的performance产生很大的影响。

2:如果你有很多具有相同格式的报表(即4列数据和类似的图表),你可以把它们组合在1中的存储过程中,这样一个存储过程返回多个报表的数据。 这减less了旅行的次数和渲染的报告数量。 例如你的存储过程可以返回一个数据集,如:

ReportName Col1Name Col1Value Col2Name Col2Value SubReport1 Name Joe Bloggs Orders 12 SubReport1 Name Jane Bloggs Orders 7 SubReport2 Product Trousers StockLevel 10 SubReport2 Product Shirts StockLevel 15 

Crystal报表可以获取此数据集,并通过在ReportName列上进行分组来将其制作为子报表。 这种技术虽然可以使报表特定的格式变得更难,所以需要考虑。

过去我使用这两种方法来生成报告,这些报告的运行速度要比它们所基于的报告快几个数量级。