计算每个产品的加权平均值 [关闭]
Posted
技术标签:
【中文标题】计算每个产品的加权平均值 [关闭]【英文标题】:Calculate weighted average per product [closed] 【发布时间】:2017-12-27 11:20:43 【问题描述】:我有一个与ms-access 计算相关的问题。为了清楚起见,我上传了 Excel 表,我在其中进行了计算。我对加权平均值感兴趣,基本上是如何进行我在访问中的excel中所做的计算。
我在 excel 中的公式是这样的:=SUMIFS($I:$I;$G:$G;G2;$H:$H;H2;$B:$B;B2;$C:$C;C2)/SUMIFS($F:$F;$G:$G;G2;$H:$H;H2;$B:$B;B2;$C:$C;C2)
我得到了每个代码(产品)、每个组、每个月、每年的正确销售额和销量。
我在 excel 中有相同的数据库,我得到了所有额外的计算字段,其中包含 excel 中的收入、月份和年份值。但是我必须知道如何在 access 中重现我的 excel 公式。
图片上每个产品的加权包含上述公式。我需要找到一种方法将此计算包含在访问中,其中数据相同。
Code Group Price per t Volume MONTH YEAR Revenue Weighted
13753 avangard 12 818,84 108,85 1 2008 1 395 330,73 13 826,51
13755 super 11 488,83 26,76 1 2008 307 441,09 15 726,96
14899 super 11 607,86 64,39 1 2008 747 430,11 15 591,86
13747 super 11 892,57 62,96 1 2008 748 756,21 16 199,30
13753 avangard 18 134,69 94,65 1 2008 1 716 448,41 13 826,51
应该如何计算 =SUMIFS(Revenue;CriteriaRange(1)=Month;Criteria(1)=Row2(Month);CriteriaRange(2)=Year;Criteria(2)=Row2(Year);CriteriaRange(3 )=代码;条件(3)=行2(代码))/SUMIFS(卷;条件范围(1)=月;条件(1)=行2(月);条件范围(2)=年;条件(2)=行2(年);CriteriaRange(3)=代码;Criteria(3)=Row2(代码))
如果我们将自己与表格样本中计算的加权分开,仅根据提供的数据,项目 13753 的加权价格 = (1 395 330,73 + 1 716 448,41)/(108,85 + 94,65) = 15 291,30
@Darren Bartrup-Cook。找到了我需要的解决方案。非常感谢您的帮助。这是我用来镜像 SUMIFS 函数的最终 SQL 代码。
SELECT Data.Code,
Справочник_групп_продукции.Group,
Month([Dated]) AS LMonth,
Year([Dated]) AS LYear,
SUM([Price per t] * [Volume])/SUM([Volume]) AS Wght_Avg
FROM Справочник_групп_продукции INNER JOIN Data ON Справочник_групп_продукции.[Code] = Data.[Code]
GROUP BY Data.Code,
Month([Dated]),
Year([Dated]),
Справочник_групп_продукции.Group;
https://imgur.com/DyMYnEC
【问题讨论】:
您使用 Access 进行了标记,听起来您需要查询帮助。如果是这样,那么您需要以表格形式向我们展示示例输入数据以及预期的输出。 我在最右边的列(加权)中附加了包含 access 和 excel 数据的文件以及 excel 表中的预期结果。我不知道应该如何通过访问公式或查询来完成。我是个新手。 请注意,您应尽可能避免共享文件,尤其是使用会造成延迟并显示广告的可疑文件共享服务。见how to share tables on SO for ms Access。这是一个面向专业和热情的程序员的网站,希望您对您所发布的主题有一些编程知识。 我上传了带有示例数据的图片。访问也是一样的。 你读过我的链接吗?我们无法导入图片。 【参考方案1】:将您的表格设置为示例表格(抱歉,看不到图片)和
表格名称为MyTable
,您只需执行总和(revenue/volume)并按代码、月份和年份分组。
SELECT Code
, Group
, lMonth
, lYear
, ROUND(SUM(Revenue)/SUM(Volume),2) AS Weighted_Avg
FROM MyTable
GROUP BY Code
, Group
, lMonth
, lYear
注意:我已将 Month
和 Year
字段的名称更新为 lMonth
和 lYear
以避免保留字冲突。
不过,我可能会更改我的设计以使用真实日期而不是月份和年份。
NB 2:我还将Group
移动到另一个表,使用Code
作为该表中的主键 和外键 在主表中。这将消除组名称中的任何拼写错误。
新查询将是:
SELECT MyTable.Code
, Group
, lMonth
, lYear
, ROUND(SUM(Revenue)/SUM(Volume),2) AS Weighted_Avg
FROM MyTable LEFT JOIN GroupTable ON MyTable.Code = GroupTable.Code
GROUP BY MyTable.Code
, Group
, lMonth
, lYear
编辑:
查看您发布的 SQL,此更新后的 SQL 应该可以工作:
SELECT Format(Dated,"mmm-yyyy") AS Month_Year
, Group
, Data.Code
, [Price per t]*volume AS Revenue
, ROUND(SUM([Price per t]*[Volume])/SUM(Volume),2) AS Weighted_Avg
FROM Справочник_групп_продукции INNER JOIN Data ON Справочник_групп_продукции.Code = Data.Code
GROUP BY Format(Dated,"mmm-yyyy")
, Group
, Data.Code
, [Price per t]*volume
【讨论】:
感谢您的回答。虽然你能提供一些解释。根据日期(我的表中称为“日期”的字段)处理月/年计算的方法是什么?我有日期。您还可以向我解释一下,我怎样才能使您的代码适应我的查询,因为我使用查询从其他表中查找组。我有以下代码,但是它返回了一个错误。我用代码更新了我的主要帖子。 我认为您的错误来自加权平均值。您的收入计算为[Price per t]*[Volume] AS Revenue
,您不能在加权平均计算中将此称为Revenue
。使用ROUND(SUM([Price per t]*[Volume])/SUM(Volume),2) AS Weighted_Avg
。你的日期可以用Format(dDate,"mmm-yyyy") AS Month_Year
显示——你也需要把它分组。然后,您可以使用 WHERE dDate BETWEEN #2008/01/01# AND #2008/02/01#-1
将时间限制在 2008 年 1 月
此外,您不能在查询中显示 Price per t
或 volume
,因为它会更改 - 代码 13753 的 12 818,84 和 18 134,69 不会组合在一起。同样在您的 SQL 中,您的 FROM 子句末尾有一个分号 (;
) - 如果您使用它,它应该放在查询的末尾。以上是关于计算每个产品的加权平均值 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 Reporting Services 2008 中计算加权平均值