spotfire - 使用 Over 与 Intersect & Previous 的 Spotfire 意外结果
问题描述
我想创建一个新列,其中的值取自前一行。这些行在原始表中由“ID”标记并按“深度”排序。这是我认为应该这样做的自定义表达式,但是我得到了意想不到的结果,其中某些行没有从前一行中获取值。
Max([Value]) over Intersect([ID],Previous([Depth]))
这是一个示例表,其中包含我的预期结果和上面表达式给出的实际结果。
ID Depth Value Expected Actual
Object1 0 0.02
Object1 3033 68.87 0.02
Object1 3349 70.82 68.87
Object1 3538 70.65 70.82
Object1 3791 70.38 70.65 70.65
Object1 4044 69.31 70.38 70.38
Object1 4297 71.13 69.31 69.31
Object1 4549 70.9 71.13
Object1 4802 70.59 70.9
Object1 5055 71.56 70.59
Object1 5307 71.34 71.56 71.56
Object1 5560 71.32 71.34
Object1 6381 71.5 71.32
Object1 6444 71.62 71.5 71.5
Object1 6544 71.86 71.62 71.62
Object2 0 0.02
Object2 962 267.58 0.02 0.02
Object2 1024 276.67 267.58 267.58
Object2 1213 273.11 276.67 276.67
Object2 1529 275.56 273.11 273.11
Object2 1593 275.96 275.56 275.56
Object2 1656 275.15 275.96 275.96
Object2 2854 278.35 275.15 275.15
Object2 3107 276.45 278.35
Object2 3359 270.83 276.45
Object2 4370 272.89 270.83
Object2 4623 271.93 272.89
Object2 4877 269.93 271.93
Object2 5504 270.51 269.93
Object2 5538 270.38 270.51 270.51
Object2 5541 270.37 270.38 270.38
Object2 5688 269.8 270.37
在我看来,这个问题可能与 Depth 列的顺序有关。作为一种解决方法,如果我首先计算一个排名列(称为“RankColumn”),我可以成功获得预期的结果
Rank([Depth],[ID])
然后我使用计算出的排名来计算 over 语句
Max([Value]) over Intersect([ID],Previous([RankColumn]))
第一个问题:为什么 Spotfire 不能识别原始 Depth 列中的顺序?
第二个问题:如果进行中间排名计算是必要的步骤,是否有更优雅的方式来编写表达式(例如在一个表达式中而不是创建中间列)?
解决方案
推荐阅读
- javascript - 如何进入嵌套对象结构中的每个对象?
- php - 更新 woocommerce 产品时使用大量 php 内存
- c# - 从 Xamarin 条目外的物理激光扫描仪捕获输入
- mysql - 如何从 typeorm querybuilder 中的返回列中删除前缀
- java - 当未经授权的用户尝试使用未知用户名和密码登录时,spring-security 项目崩溃
- tensorflow - TensorFlow 中的 np.resize 等价物
- dart - List.removeRange() 方法如何以及为什么会影响其他变量?
- java - 重写@PostConstruct 方法时,是否在创建子项时调用父项中的方法?
- javascript - 正在将我的类组件重构为功能性组件,并且在使用 useEffect 时遇到了一个非常困难的问题
- vue.js - 我可以有一个网站,它也可以作为带有 officejs 的 excel 网络插件