行值差异
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))“
因此,它是根据两列数据识别重复记录的一行代码。您可以根据需要轻松修改。
我正在尝试在此处为某些值组添加一个计算列,因为它们被标识为重复值,但它比唯一值标识符更棘手。
所以我的数据 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))“
因此,它是根据两列数据识别重复记录的一行代码。您可以根据需要轻松修改。