1

我想知道如何过滤 Foundry Functions 中的分组数据。我已经设法对我的数据进行分组和汇总,见下文:

@Function()
    public async grouping(lowerBound : Integer ): Promise<TwoDimensionalAggregation<string>> {
        let grouping = Objects.search()
            .HospitalLosAnalysis()
            .groupBy(val => val['primaryHospitalName'].topValues())
            .count()

        //FILTER SHOULD BE HERE

        return grouping
    }

现在,我想只过滤计数大于参数的行lowerBound。问题是我无法再过滤,因为分组返回 a TwoDimensionalAggregation,我无法再对其进行过滤。

一些上下文:我想在 Workshop 中创建一个图表,用户将只能查看具有大量计数的医院。他将lowerBound在文本框中输入参数,该函数将删除所有小于 的行lowerBound

4

2 回答 2

2

您应该能够遍历该grouping变量。console.log(grouping)您始终可以使用旧的然后预览来检查里面的内容。

它应该看起来像:

let newBuckets = [];
grouping.buckets.forEach(bucket => {
     if (bucket.value > lowerBound) {
         newBuckets = bucket
     }
});

grouping.buckets = newBuckets;

别忘了await在你的let grouping = await Objects.search..etcetc..count()

于 2022-02-15T14:39:22.243 回答
1

假设您在这里寻找的是过滤聚合的结果- 否则,只需在聚合之前先过滤传入的数据。

完成二维聚合后,您将拥有一个打字稿数据结构,它是一个“桶”列表,其中每个桶都有一个key和一个value属性。可以是复杂的key(即,如果您 groupBy 一个数字、日期或时间戳属性并且有一个键范围)或简单的,如在您的情况下,键是primaryHospitalName.

所以你会有类似的东西:

`grouping.buckets[0].key === "hospitalName1"`
`grouping.buckets[0].value === N`

您可以通过多种方式轻松过滤此存储桶列表:一些琐碎的事情,例如:

const filteredGrouping = {
    buckets = grouping.buckets.filter(e => e.value >= lowerBound)
}

然后返回filteredGrouping而不是grouping. 这里有关于如何创建自定义聚合的潜在相关文档:[your Foundry instance]/workspace/documentation/product/functions/create-custom-aggregations.

于 2022-02-15T14:43:03.490 回答