我有一个数据集(简化),如下例所示
分数 | 第一语言 | FLPecentage | FLScore | 第二语言 | SL百分比 | SLScore | 年 | 四分之一 |
---|---|---|---|---|---|---|---|---|
120 | Java | 90 | 108 | C# | 10 | 12 | 2024 | 4 |
200 | C# | 75 | 150 | C++ | 二十五 | 50 | 2025 | 1 |
50 | F# | 二十五 | 12,5 | Java | 75 | 37,5 | 2024 | 3 |
100 | 科博尔 | 100 | 100 | - | 0 | 0 | 2024 | 4 |
80 | C# | 50 | 40 | VB.NET | 50 | 40 | 2024 | 2 |
我必须为该表创建一个数据透视表,但数据透视表应包含“第一语言”和“第二语言”列中的唯一值以及 FLScore 和 SLScore 列的总分数。
在此示例中,结果将如下所示:
我用过:
=UNIQUE(VSTACK(dtScore[First Language];dtScore[Second Language]))
结果在范围 M10:M16 内(第二幅图)
=SUMIFS(dtScore[FLScore];dtScore[First Language];M10)+SUMIFS(dtScore[SLScore];dtScore[Second Language];M10)
得到每种语言的总和。
但我必须以这样的方式转换数据,以便可以在数据透视表中使用它,并且能够按年份和季度进行过滤。
我一直在考虑使用 GROUPBY、FILTER、HSTACK、VSTACK 和 lambda 函数来转换数据,但我不知道从哪里开始以及如何将结果放入满足所述标准的数据透视表中。
我不喜欢使用 VBA,只喜欢使用 Excel 函数
有人能指明方向吗?
更新:虽然我使用了 PQ 解决方案,因为它最适合我的需求,但我并没有停止尝试。我能够使用 PIVOTBY 创建一个按语言、分数和年份作为列的矩阵。
公式如下
=PIVOTBY(VSTACK(dtScore[First Language];dtScore[Second Language]);VSTACK(dtScore[Year];dtScore[Year]);VSTACK(dtScore[FLScore];dtScore[SLScore]);SUM)
需要注意的是,我打算将 VSTACK 也用于 columns 参数。虽然列是相同的 (dtScore[Year])。但如果我只输入 dtScore[Year],公式会抛出 #Value 错误,提示行数不一致。
PIVOTBY 的结果