【问题标题】:SQL/pivot Calculated fields, is this possibleSQL/pivot 计算字段,这可能吗
【发布时间】:2016-12-13 19:56:09
【问题描述】:

我正在使用 Microsoft SQL Server 和 Excel。我有一个问题,我在如何计算某些字段以使其运行得更快时遇到问题。我有一个大型数据集,它被放入 excel 并卡在数据透视表中。

最简单的表格将包含许多类似于下面的字段。

日期用户 WorkType Count TotalTime

我的问题是我需要以特定方式计算平均值。每个用户在任何一天都可能有几种工作类型。我的公式是为每个 Date&User Sum(TotalTime)/Sum(Count) 获取以下信息

日期用户平均

目前我将一个选择查询转储到 excel 中,将公式应用于列以获取我的平均值,然后使用个人详细信息和平均值构建数据透视表。

然而,超过 20,000 行的计算大约需要 5-7 分钟。

所以我的问题是可以在 SQL 或数据透视表中进行这种类型的计算以减少处理时间。我对 Pivot 表不是很有信心,与这里相比,我被认为在 SQL 方面相当缺乏经验。我可以管理其中的一些部分,但是现在将它们与匹配日期和用户的条件结合在一起已经超出了我的范围。

我可以在将记录集写入电子表格之前将其解析为一个数组来进行计算,但我只是觉得应该有更好的方法来达到同样的目的。

【问题讨论】:

  • 欢迎来到 StackOverflow!查看How to Ask,了解如何充分利用您在此处提出的问题的提示。例如,在这种情况下,最好先尝试一些东西,然后在遇到更具体的问题时再回来。对于您的特定问题,SQL 很有可能会更快地完成您尝试做的事情,但您可能会从学习如何自己编写它中受益更多,以便了解它在做什么。您可能不应该使用您不理解的代码。搜索如何使用聚合函数和分组依据。
  • 谢谢你,我更愿意得到帮助,为我指明正确的方向,而不是“在这里使用这个”。我将继续深入研究,因为我认为 Group 可能是我错过的部分。当我之前试图弄清楚这一点时。

标签: sql-server excel vba


【解决方案1】:

SQL 中预先计算的聚合在 Excel 数据透视表中可能会出错。

首先,您可能会不小心取平均值。

其次,一旦用户开始重新排列轴心,您会得到非常奇怪的小计和总计。

尽量确保您在一个地方完成所有聚合。 如果可能尝试将 SQL 与 SSRS 一起使用,您可以基于参数化存储过程生成报告。因此,您将所有繁重的工作都推到 SQL 框上,并限制用户不正确地进行旋转。

【讨论】:

    【解决方案2】:

    SELECT Raw_Data.ID, Raw_Data.fldDate, CONVERT(datetime, DATEADD(second, SUM(DATEDIFF(second, 0, Raw_Data.TotalHandle)) / SUM(Raw_Data.[Call Count]), 0), 108) AS平均处理 FROM 原始数据 WHERE (Raw_Data.fldDate BETWEEN '05-12-2016' AND '07-12-2016') GROUP BY Raw_Data.fldDate, Raw_Data.ID

    对于任何对此感兴趣的人来说,这是我搜索的结果。感谢您为我指明正确方向的帮助。由于时间数据类型,转换似乎很笨拙,但它正在工作。

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多