处理上下文和参数类型编辑

如果您查看函数文档,您可能会注意到它们都定义了函数接受的内容和返回的内容。此外,每个参数都包含一个类型属性,该属性指定可以使用的数据类型。这两种类型的值实际上是相同的,并且可以用作如何处理管道传输到其他函数以及将子表达式用于参数值的指南。

为了解释这是如何工作的,请考虑上一节中的以下表达式

image dataurl={asset 3cb3ec3a-84d7-48fa-8709-274ad5cc9e0b}

如果您查看文档以了解 image 函数,您将看到它接受 null 数据类型并返回 image 数据类型。接受 null 实际上意味着它根本不使用上下文,因此如果您插入任何内容到 image,则先前生成的值将被忽略。当函数执行时,它将生成一个 image 输出,它只是一个类型为 image 的对象,其中包含渲染图像所需的信息。

该函数本身不呈现图像。

如“获取和操作数据”部分所述,表达式的输出只是数据。因此,这里的 image 类型只是一种特定形状的数据,而不是实际的图像。

接下来,让我们看一下 asset 函数。与 image 一样,它接受 null,但它返回不同的内容,在本例中为 string。因为 asset 将生成一个字符串,所以它的输出可以用作任何接受字符串的函数或参数的输入。

查看文档以了解 dataurl 参数,其类型为 string,这意味着它将接受任何类型的字符串。关于函数本身强制执行的字符串值有一些规则,但就解释器而言,该表达式是有效的,因为参数接受字符串并且 asset 的输出是一个字符串。

解释器还会尝试将某些输入类型转换为其他类型,这允许您即使在函数或参数调用数字时也使用字符串输入。请记住,它不能转换任何字符串值,但如果字符串是一个数字,则可以轻松地将其转换为 number 类型。以以下表达式为例

string "0.4"
| revealImage image={asset asset-06511b39-ec44-408a-a5f3-abe2da44a426}

如果您查看文档以了解 revealImage 函数,您将看到它接受一个 number,但 string 函数返回一个 string 类型。在这种情况下,因为字符串值是一个数字,所以它可以转换为 number 类型并使用,而无需您执行任何其他操作。

如您所料,大多数 primitive 类型都可以自动转换。您刚刚看到 string 可以转换为 number,但您也可以很容易地将内容转换为 boolean,并且可以将任何内容转换为 null

还有其他有用的类型转换选项可用。例如,只需保留数据中的特定列(即 x、y、大小、颜色和文本),就可以将 datatable 类型的内容转换为 pointseries 类型。这允许您通过约定将源数据(通常为 datatable 类型)视为 pointseries 类型。

您可以使用 essql 从 Elasticsearch 中获取数据,这允许您聚合数据,为值提供自定义名称,并将该数据直接插入到另一个仅接受 pointseries 的函数中,即使 essql 将输出 datatable 类型。这使得以下示例表达式有效

essql "SELECT user AS x, sum(cost) AS y FROM index GROUP BY user"
| plot

在文档中,您可以看到 essql 返回一个 datatable 类型,但 plot 需要一个 pointseries 上下文。这是有效的,因为 datatable 输出将包含列 xy,这是在 sql 语句中使用 AS 命名它们的结果。因为数据遵循 pointseries 数据类型的约定,所以可以将其转换为 pointseries,并且可以将其作为结果直接传递给 plot