[英]Calculated column to sum all matching values based on three criteria
给定下表:
洞 | VertFrom | 垂直到 | 伦 | 中心 |
---|---|---|---|---|
一个 | 20.97 | 22.18 | 1.21 | 21.575 |
一个 | 22.18 | 22.57 | 0.39 | 22.375 |
一个 | 22.57 | 24.09 | 1.52 | 23.33 |
一个 | 24.09 | 25.57 | 1.48 | 24.83 |
乙 | 25.57 | 27.08 | 1.51 | 26.325 |
乙 | 27.08 | 28.39 | 1.31 | 27.735 |
乙 | 28.39 | 29.51 | 1.12 | 28.95 |
我需要创建一个计算列,如下所示:
示例结果(vINT = 2):
洞 | VertFrom | 垂直到 | 伦 | 中心 | vINT = 2 |
---|---|---|---|---|---|
一个 | 20.97 | 22.18 | 1.21 | 21.575 | 1.6 |
一个 | 22.18 | 22.57 | 0.39 | 22.375 | 0.39 |
一个 | 22.57 | 24.09 | 1.52 | 23.33 | 1.52 |
一个 | 24.09 | 25.57 | 1.48 | 24.83 | 1.48 |
乙 | 25.57 | 27.08 | 1.51 | 26.325 | 1.51 |
乙 | 27.08 | 28.39 | 1.31 | 27.735 | 1.31 |
乙 | 28.39 | 29.51 | 1.12 | 28.95 | 1.12 |
第 1 行是您应该看到过滤条件有两个匹配项的位置,结果是“1.6”=“1.21 + 0.39”
生成准确结果的 Excel 数组公式如下:
=SUM($D$2:$D$8*($A$2:$A$8=$A2) ($B$2:$B$8>=$E2-F$1/2) ($C$2:$C$8< =$E2+F$1/2))
在哪里
我已经尝试了很多方法来完成这项工作并且我束手无策。 我最近的尝试如下:
=
var vINT = 2
var vHOLE = TEST[Hole]
var vCENTER = TEST[Center]
var vVERTTO = TEST[VertTo]
var vVERTFROM = TEST[VertFrom]
var TESTONE = FILTER(TEST,TEST[VertFrom] >= TEST[Center]-vINT/2 && TEST[VertTo]<=TEST[Center] + vINT/2)
var vTEST = SELECTCOLUMNS(TEST, "HOLE", TEST[Hole], "LENGTH", TEST[Len])
RETURN
SUMX(CALCULATETABLE(TEST,TEST[Hole]=vHOLE,TEST[VertFrom]>=vCENTER-vINT/2,TEST[VertTo]<=vVERTTO+vINT/2),[Len])
感谢所有可以提供帮助的人。
尝试使用 SELECTEDVALUE(基于您想要在此/当前行上比较的值):
xVert 2 =
var vINT = 2
return
CALCULATE( SUM('Sheet1 (2)'[Len]), FILTER(ALL('Sheet1 (2)'),
SELECTEDVALUE('Sheet1 (2)'[Hole]) = 'Sheet1 (2)'[Hole] &&
SELECTEDVALUE( 'Sheet1 (2)'[VertFrom]) >= ('Sheet1 (2)'[Center] -vINT/2) &&
SELECTEDVALUE('Sheet1 (2)'[VertTo]) <= ('Sheet1 (2)'[Center] + vINT/2) ))
根据@msta42a 的反馈,我离我更近了一步。
=
var vINT = 2
var vHOLE = TEST[Hole]
var vCENTER = TEST[Center]
var vVERTTO = TEST[VertTo]
var vVERTFROM = TEST[VertFrom]
RETURN
CALCULATE(
SUM([Len]),
FILTER(
TEST,
vHOLE = TEST[Hole] && vVERTFROM >= TEST[Center] -vINT/2 && vVERTTO <= TEST[Center] + vINT/2)
)
SELECTEDVALUE 在 Excel 的 DAX 中不可用,但使用变量我可以将行上下文应用于 @msta42a 建议的现在改进的过滤器上下文; 但是,仍然存在一个问题。
对于除 2 以外的所有 vINT 值,结果都很好。 然而,对于 vINT = 2,它不是。
达克斯结果
数组公式结果
现在这是一个更糟糕的问题,因为在我看来这应该可行。
我尝试过使用和不使用 ALL(TABLE) 语句 - 没有变化 - 并且更愿意避免使用 ALL 语句,因为该表有 600,000 行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.