Foundry-workshop:在显示参数演变的图表上添加平均值

Foundry-workshop : add average value on a chart displaying parameter evolution

我正在寻找一种方法来在专用于该参数演变的图表中显示一条线,该线显示该参数的平均值。

我有一个数据集,我们以下面的结构为例:

Product |  Month  | Price
P1        2021-01   13.00
P1        2021-02   13.50
P1        2021-03   15.00
P1        2021-04   14.50
P2        2021-01   3.00
P2        2021-02   3.50
P2        2021-03   5.00
P2        2021-04   4.50

在图表中,我显示了每个 selected 产品的价格演变(多个 select 过滤器上游),我想为每个产品添加一条显示平均值的线对于显示的时间段。

到目前为止我尝试了两种不同的方法:

Product |  Latest Month  | Avg Price | Max Price | Min Price
P1           2021-04        14.00        15.00       13.00
P2           2021-04         4.0          5.00        3.00

但我无法叠加这些值,因为没有时间序列来定义相同的 X 轴。

我考虑过第三种解决方案,但对我来说看起来很脏:在第一个数据集中添加聚合值。每行将包含一段时间内的 avg/max/min 值,这样我就可以像显示任何其他 属性.

一样显示这些值

最后,写这个 post 让我想知道我是否很好地理解这个工具是如何工作的,因为我觉得我实现的应该导致显示我正在寻找的平均值,但它是我发现显示“简单”属性 进化的唯一方法。

在此先感谢您的帮助。

这里有一些关于构建图表的注意事项,在决定如何表示数据时会导致不同的方法。

关于在 Workshop 中绘制图表的一个要点是,正如您所观察到的,图表希望您聚合每个对象的细粒度数据以创建可视化的每个数据点。如果您想为每个对象绘制图表的某些特征(点或条),则需要 select 适当缩小存储桶大小。在这种情况下,如果每个产品每个月有一个对象,那么选择每月或更小的粒度应该会导致每个对象有一个数据点。

至于与求平均值相关的选项,让我们看一下三种方法:

  1. 时间指标架构

使用主要对象(即“产品”)创建一个 ontology,然后创建一个链接对象类型来存储关于该对象的指标值(即“产品指标”)可能是一种灵活的方法这与 Workshop 和 Quiver 图表期望配合得很好。

考虑像这样修改您的原始粒度模式:

Product |  Timestamp  | Value | Metric Type
P1          2021-01     13.00    Monthly Price
P1          2021-02     13.50    Monthly Price
P1          2021-03     15.00    Monthly Price
P1          2021-04     14.50    Monthly Price
P2          2021-01     3.00     Monthly Price
P2          2021-02     3.50     Monthly Price
P2          2021-03     5.00     Monthly Price
P2          2021-04     4.50     Monthly Price
P1          2021-03     14.00    Quarterly Average
P2          2021-03     4.00     Quarterly Average
...

这个模式非常灵活和健壮;您可以稍后轻松添加新指标,甚至可以使用像 Taurus 这样的工具让用户定义自己的规则以生成适合此模式的指标。它的优点是可以将指标类型 存储为数据本身 ,这意味着在您的 Workshop 应用程序中,例如,您可以让用户使用过滤器列表小部件选择哪些指标在图表上显示。

此模式还确保向用户显示日期“含义”的一致性。例如,预先计算季度平均值意味着每个用户都将从查看图表中获得相同的信息,无论他们过滤到什么时间段,而基于用户 selection 的动态平均值可能会导致两个不同的用户根据他们选择如何过滤数据得出完全不同的结论。

最后,对于这种模式,显示图表本身变得非常容易,因为您只需选择绘制过滤后的指标对象集并选择“指标类型”作为系列 属性,按小粒度(例如“天”)存储桶,并让图表插入任何间隙。这意味着即使是非周期性指标以及在不同时期记录的指标也可以全部呈现在同一个图表上。

这种模式在某种程度上被 Foundry Ontology 的新生时间相关 属性 特征正式化了。如果 Time-Dependent 属性 功能在您的 Foundry 实例上可用,您可以在“如何创建 Time-Dependent 属性”部分的 Ontology 产品文档中阅读更多相关信息.

  1. 带函数的动态图表

假设您出于某种原因不想预先计算指标,而是希望您的图表根据对象集中的平均价格值准确呈现一条线。实现此目的的一种方法是使用一个函数支持的图表和一个简单的 Typescript 函数,该函数将作为价格信息对象集的参数和 returns 表示两个数据点的 2DimensionAggregation 类型:第一个和最后一个时间戳由输入对象集表示的周期的每一个都与价格值或 3DimensionalAggregation 计算的平均值配对,因为您可能希望每个产品类别都有这两个数据点。

您可以在 Workshop 和 Functions 产品文档中找到用于生成函数支持的图表的清晰步骤,以及在您的 Foundry 实例上的 Foundry 培训和资源项目中的各种 Typescript 函数实现示例。

  1. 使用 Quiver 的动态图表

Workshop XY Chart 仍在积极开发中,许多可能有用的功能尚不可用。在某些情况下,在 Quiver 中创建图表并使用 Quiver Canvas 小部件将其嵌入您的 Workshop 应用程序可以让您灵活地构建具有“派生”值的图表,而您目前无法使用 Workshop 图表直接完成这些任务。

我添加这个是为了完整性;我实际上并不认为在这种特定情况下它是最好的解决方案。这种模式的力量来自于在 Quiver 中采用对象支持的条形图或折线图,并使用“转换为时间序列”功能来解锁 Quiver 的时间序列绘图和转换功能。您可以查看 Quiver 文档以获取有关如何创建对象派生时间序列以及如何将 Quiver canvas 转换为要嵌入到其他地方的对象模板的更多指导。

据我了解,根据@Logan 的回答、文档、我的测试,该解决方案基于我之前并不真正理解的一个关键特性:图表始终显示聚合值属性.
这是我在我的问题中注意到和提到的事情,我只是了解 如何 执行此聚合:没有参数来定义任何类型的间隔,但是当您的 X-axis是一个日期,需要select一个bucket,那其实就是聚合区间。如果您的日期是每天,并且您决定显示每周级别的值,则聚合将基于 7 天。

因此,我找到的解决方案只是添加与我的月值完全相同的层,我只是将第二个中的桶更改为显示年值(这实际上是我正在寻找的,我的样本数据只是四分之一,因为我没有看到它会产生影响)。

但是如果我需要可视化季度平均值(@Logan 的回答让我问),我应该如何进行?
我想我会有几种方法:@Logan 描述的方法,即使我仍然对第一种方法持怀疑态度。至少,我看起来像 function-backed 图表可以工作,但我根本不知道打字稿来实现这些功能。否则,在同一个数据集中或另一个数据集中准备以相同比例显示的数据也可能有效。

如何处理滚动平均值? 好吧,我不确定这是否可能,我看到的唯一解决方案是 function-backed 图表但是,再一次,我不知道打字稿......我可能会使用 Slate,我确定我'一定能实现的。

当然,欢迎在这里发表任何评论,因为我仍处于此工具的发现阶段。