【问题标题】:Row value Difference行值差异
【发布时间】:2019-12-23 09:50:12
【问题描述】:

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

所以我的数据表如下所示: 原样

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=接收到库存的材料和 102=(由于错误而退回)。然后通常很快就会101 = 收到正确值的库存通常是数量或正确的订单号)。因此,以前的 两个 项目是重复的,必须被忽略,我正在尝试添加一个计算列,该列将显示“重复”且需要删除的行。

我尝试添加仅显示所有 mvt 类型 = 102 的列(类似:If([MvtType]=102, "delete", "ok")),因为无论如何它们最终应该被忽略,但努力编写一个包含最后一行的表达式具有相同的材料代码,日期等于或早于 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→Date→Quantity 的排序顺序进行更改,因此表中的行顺序与源数据不同。

任何想法如何添加计算列?

【问题讨论】:

    标签: spotfire


    【解决方案1】:

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

    If(Count([RowID]) OVER (Intersect([Material],[Order No.],[AbsQuantity]))=2,"delete","OK")

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

    【讨论】:

      【解决方案2】:

      您可以使用表达式识别重复的行,并使用尽可能多或尽可能少的列进行检查。这是一个很棒的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")
      

      【讨论】:

        【解决方案3】:

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

        “话虽如此,这是一个非常简单的脚本,我将在整个帖子中引用它。这一行 R 代码将使用定义表粒度的两个标识符检查数据集中的重复项。输出是一个称为重复的列。 重复

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-05
          • 2011-02-05
          • 1970-01-01
          • 2013-02-09
          • 2018-05-15
          相关资源
          最近更新 更多