行值差异

Row value Difference

我正在尝试在此处为某些值组添加一个计算列,因为它们被标识为重复值,但它比唯一值标识符更棘手。

所以我的数据 table 看起来像这样: 现状

Material   MvtType   Date      Order No. Quantity    RowID
10000001   101        01/01/19  123452    1.0            1
10000001   101        03/01/19  123456    5.0            5
10000001   102        04/01/19  123456   -5.0            7
10000001   101        07/01/19  123456    7.0            8
10000001   101        01/02/19  123453    10.0           9
10000002   101        10/01/19  222221    100.0         44
10000002   101        11/01/19  222221    150.0         43
10000002   102        11/01/19  222221   -100.0         41 
10000002   102        13/01/19  222221   -150.0         42 
10000002   101        03/02/19  222221    200.0         50
10000002   101        06/02/19  222221    300.0         51 

有两种移动类型:101=收到 Material 库存和 102=(因错误返回)。然后通常很快 material 是 101 = 收到具有更正值 的库存( 通常是数量或正确的订单号 )。因此,之前的 two 项目是重复的,必须被忽略,我正在尝试添加一个计算列,该列将显示 "duplicated" 并且需要删除的行。

我试图添加仅显示所有 mvt type = 102 的列(类似于:If([MvtType]=102, "delete", "ok")),因为无论如何它们最终都应该被忽略,但是很难编写一个包含的表达式具有相同 Material 代码的最后一行,等于或早于 102 行的日期,相同的订单号。和相同的数量(不同的符号 [+]),但具有不同的运动类型,即 101 运动类型。

未来:

    Material   MvtType   Date      Order No. Quantity   RowID   Calculated Column
    10000001   101        01/01/19  123452    1.0           1   OK
    10000001   101        03/01/19  123456    5.0           5   delete
    10000001   102        04/01/19  123456   -5.0           7   delete
    10000001   101        07/01/19  123456    7.0           8   OK
    10000001   101        01/02/19  123453    10.0          9   OK
    10000002   101        10/01/19  222221    100.0        44   delete 
    10000002   101        11/01/19  222221    150.0        43   delete
    10000002   102        11/01/19  222221   -100.0        41   delete
    10000002   102        13/01/19  222221   -150.0        42   delete
    10000002   101        03/02/19  222221    200.0        50   OK
    10000002   101        06/02/19  222221    300.0        51   OK

P.S.: RowID 是我从源数据中获得的行的顺序,我相信如果应用自定义排序,它可以更改,因为数据在 Excel 中。示例数据中的数据顺序根据 Spotfire 中 Material→日期→数量的排序顺序进行更改,因此 table 中的行顺序与源数据不同。

知道如何添加计算列吗?

不确定此逻辑是否无懈可击,但代价是首先将名为 AbsQuantity 的列计算为 Abs([Quantity]) 然后您可以将标志定义为

If(Count([RowID]) OVER (相交([Material],[订单号],[AbsQuantity]))=2,"delete","OK" )

假设如果有两行Material, Order No. 和 Quantity 的绝对值相同,则表示它们相互抵消。计算AbsQuantity列的原因是OVER不支持表达式

您可以使用表达式识别重复的行,并使用尽可能多或尽可能少的列来检查。这是一个很棒的 Article

If(Rank(Baserowid(),"asc",[myGroup1])=1,"First row of group","Duplicate")

If(Rank(Baserowid(),"asc",[myGroup1],[myGroup2],[myGroup3])=1,"First row of group","Duplicate")

您可以使用数据函数来完成此操作。这篇博客 post -- https://datashoptalk.com/data-function-properties-part5/ -- 解释了 TERR 数据函数的基础知识。为此,它使用识别重复记录的数据函数。向下滚动到它说的地方...

“话虽如此,这是一个非常简单的脚本,我将在 post 中引用它。这一行 R 代码将使用两个标识符检查数据集中的重复项,这两个标识符定义了table 的粒度。输出是一个名为 duplicate 的列。 重复 <- 重复(data.frame(key1,key2))“

因此,它是根据两列数据识别重复记录的一行代码。您可以根据需要轻松修改。