node.js - 如何为 cube.js 动态生成模式?
问题描述
我一直在做一个项目来生成可配置的仪表板。所以我必须根据 api 请求动态生成模式。有什么办法吗?
如果有任何工作示例将非常有帮助!
解决方案
这个场景有一个asyncModule
函数。您可以查看以下示例:
const fetch = require('node-fetch');
const Funnels = require('Funnels');
asyncModule(async () => {
const funnels = await (await fetch('http://your-api-endpoint/funnels')).json();
class Funnel {
constructor({ title, steps }) {
this.title = title;
this.steps = steps;
}
get transformedSteps() {
return Object.keys(this.steps).map((key, index) => {
const value = this.steps[key];
let where = null
if (value[0] === PAGE_VIEW_EVENT) {
if (value.length === 1) {
where = `event = '${value[0]}'`
} else {
where = `event = '${value[0]}' AND page_title = '${value[1]}'`
}
} else {
where = `event = 'se' AND se_category = '${value[0]}' AND se_action = '${value[1]}'`
}
return {
name: key,
eventsView: {
sql: () => `select * from (${eventsSQl}) WHERE ${where}`
},
timeToConvert: index > 0 ? '30 day' : null
}
});
}
get config() {
return {
userId: {
sql: () => `user_id`
},
time: {
sql: () => `time`
},
steps: this.transformedSteps
}
}
}
funnels.forEach((funnel) => {
const funnelObject = new Funnel(funnel);
cube(funnelObject.title, {
extends: Funnels.eventFunnel(funnelObject.config),
preAggregations: {
main: {
type: `originalSql`,
}
}
});
});
})
更多信息:https ://cube.dev/docs/schema-execution-environment#async-module
推荐阅读
- unity3d - GetAxis("Mouse X/Y") 不适用于虚拟鼠标
- python - 计数累加器有关返回正奇数计数的问题
- components - 我希望能够重用使用 Svelte 制作的芯片组件
- jenkins - 从 Jenkins Mail Watcher Plugin 获取邮件地址
- mysql - Raspberry Pi4,mariadb install,mysql comand not found 问题
- javascript - 从 api 获取数组总数而不是数据
- apache-kafka - 卡夫卡经纪人可能不可用
- ssh - Ansible 上用于处理连接重置的 Aync shell 脚本
- html - Safari 14.1 CSS 列数导致容器不必要地扩展
- wso2 - WSO2 产品 - 安全咨询指南