SQL 到 Excel - 每个最大值 sheet

SQL to Excel - Max each sheet

我有一个 SQL Table 接近 200 万行,我正在尝试将这些数据导出到一个 Excel 文件中,以便利益相关者可以操纵数据,请参阅图表,等等...

问题是,当我点击刷新时,在获取所有数据表明行数超过 Excel 中的最大行数限制后,它失败了。 table 每天都在增长。

我在这里寻找的是一种刷新数据的方法,然后将行添加到 Sheet1 直到达到最大行数限制。一旦达到最大值,我希望行开始插入 Sheet 2。一旦达到最大值,移动到第 3 sheet,全部来自单个 SQL table,来自单次刷新。

这不必在 Excel 中发生(数据 -> 刷新选项),我可以将其作为我已经用来填充 [=29= 中的行的 SSIS 包的一部分] table.

我也愿意接受任何其他方式将 SQL table 导出为不同的格式,上述利益相关者可以使用这些格式来创建图表、分析数据以及他们喜欢的任何其他内容。

虽然听起来不太好笑,但您提出的是一种非常低效的方法。

实现此方法的最佳方式是完全不使用 .xlsx 文件进行数据存储。

假设您的目标利益相关者没有 SQL 服务器的读取权限,将数据导出到 .csv,然后在某种 'Dashbaord.xlsx' 类型的文件中使用 Power Query 加载 . csv 到可以处理数亿行而不是仅仅 1.05m 的数据模型。

这将允许使用 Power Pivot 和 DAX 进行分析,如果用户确实需要原始行(或者他们可以参考 csv 文件),数据也将在数据模型 table 视图中可见..).

如果他们有 SQL 读取权限,那么您可以直接查询服务器,这样您就不需要存储任何行,因为它会直接读取。

如果所有这些都失败了,你决定按照自己的方式去做,我建议如下。

将您的 table 读入 Pandas df 并迭代数据帧的每一行和单元格,使用 openpyxl 写入您的 xlsx[sheet1] 然后一旦行号达到 1,048,560 只需迭代到 xlsx[sheet2].

简而言之:openpyxl 允许您创建工作簿、工作表并直接写入单元格。

但根据您拥有的列数,这可能需要非常长的时间。

Product Limitations

Excel 2007+ 1,048,576 rows by 16,384 columns

您建议用最大行数填充工作表然后拆分的挑战是“他们将如何处理这些数据?”和“您是否拆分了本应放在一起的数据以做出明智的选择?”

如果 Excel 是用户想要使用的工具并且他们必须能够访问所有数据,那么您将需要将数据放入 Power Pivot 数据模型(是的,这将影响某些数据可视化的可用性)。 Power Pivot 模型是一个 in-memory 表格数据集。这意味着数据引擎 xVelocity 将使用大量内存,但可以超过 100 万行限制。根据需要多少内存,您可能需要从默认的 32 位 Office 安装切换到 64 位安装(而且我看到客户必须在旧的低端台式机上使用最大内存,因为它们便宜企业用户)。

Power Pivot 将连接到您的 SQL 服务器(或其他提供商)。当它刷新数据时,它会触发查询并确定列中的唯一值,然后创建一个唯一值字典。这允许它很好地压缩低基数的数据——销售日期可能会在您的集合中大量重复,因此压缩效果很好。假设您的客户通常是 not-repeat 客户,客户代理键将具有高基数,因此不能很好地压缩,因为几乎没有重复。刷新将取决于您的用例和环境。也许用户必须手动启动它,也许你安装了带有 Excel 服务的 SharePoint,然后你可以让它在不同的时间间隔刷新数据。

如果他们是优秀的分析师,您可以尝试让他们使用 Power BI。 Same-ish 幕后引擎,但从头开始构建为响应报告工具。如果他们只是在浏览数据表,那么他们还没有为 PBI 做好准备。如果他们从数据中制作视觉效果,PBI 可能更合适。