我对使用Spotfire中的计算列的行的总和计算有疑问。
例如,原始数据如下,原始表按id排序,对于每种类型,序列为2,3,0。
driver
对于(2,3,0)的每个循环的类型,我想对该值求和,那么结果可能是:
public abstract class AbstractPage {
protected WebDriver driver;
protected AbstractPage(WebDriver driver)
{
this.driver = driver;
}
}
public class ExamplePage extends AbstractPage {
@FindBy(id = "userID")
WebElementFacade txtusername;
public ExamplePage(WebDriver driver) {
super(driver);
}
public void someMethod() {
Actions action = new Actions(driver);
WebElement mainMenu = driver.findElement(By.linkText("MainMenu"));
action.moveToElement(mainMenu).moveToElement(driver.findElement(By.xpath("submenuxpath"))).click().build().perform();
}
}
注意:只有状态为0的行才会有总和值,我认为当我们订购类型时会更容易看到规则:
id type value state
1 1 12 2
2 1 7 3
3 1 10 0
4 2 11 2
5 2 6 3
6 3 9 0
7 3 7 2
8 3 5 3
9 2 9 0
10 1 7 2
11 1 3 3
12 1 2 0
感谢您的时间和帮助!
答案 0 :(得分:1)
这是一个适合您的解决方案。
RowId()
并将其命名为 RowId If(Mod([RowId],3)=0,[RowId] / 3,Ceiling([RowId] / 3))
并将其命名为组 Sum([value]) OVER ([Groups])
并将其命名为运行总和 If([state] = 0,[RunningSum])
并将其命名为OnlyState = 0 这里唯一要解释的是#2。根据您在示例中列出的数据排序,每个组的最后一行(基于RowId)应该可以被3整除。我们必须这样做,因为您的类型字段可以为任何给定类型具有多个组。 RowId 3,6,9,12等都将具有0的模数,因为它们可被3整除。这标志着每组中的最后一行。如果它是最后一行,我们只需将其设置为RowId / 3.这给我们组1,2,3,4等...对于不能被3整除的行,我们将它们四舍五入到最近的除数整数...这将是集合中的最后一行。
最后计算的列是我知道如何获得您关注的值的唯一方法。如果在其他任何地方使用If [state] = 0逻辑,则否定所有其他行。