使用Spotfire中的计算列计算每个组的总值

时间:2016-09-06 12:37:32

标签: cycle calculated-columns spotfire

我对使用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

感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:1)

这是一个适合您的解决方案。

  1. 插入计算列RowId()并将其命名为 RowId
  2. 插入计算列If(Mod([RowId],3)=0,[RowId] / 3,Ceiling([RowId] / 3))并将其命名为
  3. 插入计算列Sum([value]) OVER ([Groups])并将其命名为运行总和
  4. 插入计算列If([state] = 0,[RunningSum])并将其命名为OnlyState = 0
  5. 这里唯一要解释的是#2。根据您在示例中列出的数据排序,每个组的最后一行(基于RowId)应该可以被3整除。我们必须这样做,因为您的类型字段可以为任何给定类型具有多个组。 RowId 3,6,9,12等都将具有0的模数,因为它们可被3整除。这标志着每组中的最后一行。如果它是最后一行,我们只需将其设置为RowId / 3.这给我们组1,2,3,4等...对于不能被3整除的行,我们将它们四舍五入到最近的除数整数...这将是集合中的最后一行。

    最后计算的列是我知道如何获得您关注的值的唯一方法。如果在其他任何地方使用If [state] = 0逻辑,则否定所有其他行。

    enter image description here