#whereFilter
#between-sales-range-analysis
Umsatzbereichsanalyse: mit between einzelne Bestellungen von 1000 bis 10000 filtern und den Gewinn nach Kategorie zusammenfassen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "product_type",
"alias": "Kategorie"
}
],
"measures": [
{
"field": "profit",
"alias": "Gewinn",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.add('sales', node => {
node.setOperator('between').setValue({ min: 1000, max: 10000 });
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#clear-and-rebuild-filters
Filter leeren und neu aufbauen: alte einfache Filter entfernen und komplexe gruppierte Bedingungen neu erstellen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "province",
"alias": "Bundesland"
}
],
"measures": [
{
"field": "profit",
"alias": "Gewinn",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": [
{
"id": "f-old1",
"field": "product_type",
"op": "eq",
"value": "办公用品"
},
{
"id": "f-old2",
"field": "area",
"op": "eq",
"value": "华东"
}
]
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter
.clear()
.add('profit', node => node.setOperator('>').setValue(0))
.addGroup('or', group => {
group
.add('area', n => n.setOperator('eq').setValue('华东'))
.add('area', n => n.setOperator('eq').setValue('华北'));
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#date-filter-period-and-range-combo
Datumsbereich kombiniert filtern: mit period Daten aus Q1 2024 filtern, zugleich mit range das Gewinnintervall begrenzen und nach Kategorie sowie Liefermethode kreuzanalysieren
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "bar",
"dimensions": [
{
"field": "product_type",
"alias": "Kategorie"
},
{
"field": "delivery_method",
"alias": "Liefermethode"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
},
{
"field": "profit",
"alias": "Gewinnrate",
"encoding": "yAxis",
"aggregate": {
"func": "avg"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 50
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter
.add('order_date', node => {
node.setDate({ type: 'period', unit: 'quarter', year: 2024, quarter: 1 });
})
.add('profit', node => {
node.setOperator('between').setValue({ min: 0, max: 5000, leftOp: '<=', rightOp: '<' });
})
.add('sales', node => node.setOperator('>=').setValue(100));
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#date-filter-relative-with-nested-conditions
Datumsfilter mit verschachtelten Bedingungen: hochwertige Bestellungen von Verbraucher- oder Unternehmenskunden der letzten 30 Tage filtern und Umsatz sowie Gewinn nach Bundesland zusammenfassen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "province",
"alias": "Bundesland"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
},
{
"field": "profit",
"alias": "Gewinn",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter
.add('order_date', node => {
node.setDate({ type: 'relative', mode: 'last', amount: 30, unit: 'day' });
})
.add('sales', node => node.setOperator('>').setValue(500))
.addGroup('or', group => {
group
.add('customer_type', n => n.setOperator('eq').setValue('消费者'))
.add('customer_type', n => n.setOperator('in').setValue(['公司', '小型企业']));
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#deeply-nested-or-and-groups
Mehrstufig verschachtelte Gruppen: hochwertige Same-Day-Bestellungen von Verbraucherkunden oder First-Class-Bestellungen von Unternehmenskunden, mit drei Ebenen AND/OR
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "province",
"alias": "Bundesland"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter
.add('sales', node => node.setOperator('>').setValue(500))
.addGroup('or', outerGroup => {
outerGroup
.addGroup('and', g1 => {
g1.add('customer_type', n => n.setOperator('eq').setValue('消费者'))
.add('delivery_method', n => n.setOperator('eq').setValue('当日'));
})
.addGroup('and', g2 => {
g2.add('customer_type', n => n.setOperator('in').setValue(['公司', '小型企业']))
.add('delivery_method', n => n.setOperator('eq').setValue('一级'));
});
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#high-discount-tech-profit-analysis
Gewinnanalyse für stark rabattierte Technologieprodukte: Bestellungen der Kategorie Technologie mit Rabatt größer als 0.5 filtern und Gewinn nach Region vergleichen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "area",
"alias": "Region"
}
],
"measures": [
{
"field": "profit",
"alias": "Gewinn",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter
.add('product_type', node => node.setOperator('eq').setValue('技术'))
.add('discount', node => node.setOperator('>').setValue(0.5));
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#in-operator-multi-area-delivery
Vergleich der Liefereffizienz mehrerer Regionen: mit in Ostchina, Nordchina und Zentral-Südchina filtern und Bestellungen nach Liefermethode zählen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "bar",
"dimensions": [
{
"field": "delivery_method",
"alias": "Liefermethode"
}
],
"measures": [
{
"field": "amount",
"alias": "Bestellanzahl",
"encoding": "xAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.add('area', node => {
node.setOperator('in').setValue(['华东', '华北', '中南']);
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#nested-group-region-product-filter
Umsatz mit Bürobedarf oder Möbeln in Ostchina: verschachtelte Gruppe mit AND für die Regionsbedingung und OR für Kategoriebedingungen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "city",
"alias": "Stadt"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 10
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter
.add('area', node => node.setOperator('eq').setValue('华东'))
.addGroup('or', group => {
group
.add('product_type', node => node.setOperator('eq').setValue('办公用品'))
.add('product_type', node => node.setOperator('eq').setValue('家具'));
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#not-between-sales-range
not between-Filter: Umsatz zwischen 1000 und 10000 ausschließen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "product_type",
"alias": "Kategorie"
}
],
"measures": [
{
"field": "profit",
"alias": "Gewinn",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.add('sales', node => {
node.setOperator('not between').setValue({ min: 1000, max: 10000 });
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#not-between-with-explicit-operators
not between-Filter mit explizitem leftOp/rightOp zum Testen der invert-Funktionen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "product_type",
"alias": "Kategorie"
}
],
"measures": [
{
"field": "profit",
"alias": "Gewinn",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.add('sales', node => {
node.setOperator('not between').setValue({ min: 1000, max: 10000, leftOp: '<', rightOp: '<' });
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#office-supplies-sales-by-province
Umsatzranking für Bürobedarf nach Bundesland: Kategorie Bürobedarf filtern und Umsatz nach Bundesland zusammenfassen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "bar",
"dimensions": [
{
"field": "province",
"alias": "Bundesland"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "xAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.add('product_type', node => {
node.setOperator('eq').setValue('办公用品');
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#or-group-product-category-comparison
Bürobedarf und Technologie vergleichen: zwei Kategorien per OR-Gruppe filtern und Umsatz nach Region vergleichen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "area",
"alias": "Region"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.addGroup('or', group => {
group
.add('product_type', node => node.setOperator('eq').setValue('办公用品'))
.add('product_type', node => node.setOperator('eq').setValue('技术'));
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#remove-condition-from-group
Bedingung aus Gruppe entfernen: voreingestellte OR-Gruppe mit drei Kategorien, per updateGroup eine davon entfernen
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "area",
"alias": "Region"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": [
{
"id": "g-products",
"op": "or",
"conditions": [
{
"id": "f-office",
"field": "product_type",
"op": "eq",
"value": "办公用品"
},
{
"id": "f-tech",
"field": "product_type",
"op": "eq",
"value": "技术"
},
{
"id": "f-furniture",
"field": "product_type",
"op": "eq",
"value": "家具"
}
]
}
]
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.updateGroup('g-products', group => {
group.remove('f-furniture');
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#remove-filter-by-index
Filter per index entfernen: ersten Kategoriefilter entfernen und nur die Regionsbedingung behalten
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "province",
"alias": "Bundesland"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": [
{
"id": "f-product",
"field": "product_type",
"op": "eq",
"value": "办公用品"
},
{
"id": "f-area",
"field": "area",
"op": "in",
"value": [
"华东",
"华北",
"中南"
]
}
]
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.remove(0);
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#update-filter-switch-province
Filter dynamisch ändern: Bundeslandfilter von Zhejiang auf Guangdong aktualisieren und Umsatzänderung beobachten
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "bar",
"dimensions": [
{
"field": "city",
"alias": "Stadt"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "xAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": [
{
"id": "f-province",
"field": "province",
"op": "eq",
"value": "浙江"
},
{
"id": "f-product",
"field": "product_type",
"op": "eq",
"value": "技术"
}
]
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.update('f-province', node => {
node.setValue('广东');
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#update-group-or-to-and
Gruppenlogik ändern: voreingestellte OR-Kategoriegruppe auf AND umstellen und den Filterumfang verkleinern
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "area",
"alias": "Region"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": [
{
"id": "g-customer",
"op": "or",
"conditions": [
{
"id": "f-ct1",
"field": "customer_type",
"op": "eq",
"value": "公司"
},
{
"id": "f-ct2",
"field": "customer_type",
"op": "eq",
"value": "消费者"
}
]
}
]
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.updateGroup('g-customer', group => {
group.setOperator('and');
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#where-filter-array-value-converts-to-in
where-Filter mit Array-Wert und Operator '=' wird zu 'in' konvertiert
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "area",
"alias": "Region"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.add('area', node => {
node.setOperator('=').setValue(['华东', '华北']);
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}#where-filter-array-value-converts-to-not-in
where-Filter mit Array-Wert und Operator '!=' wird zu 'not in' konvertiert
import { VBI, VBIChartBuilder } from '@visactor/vbi'
import { DEMO_CONNECTOR_ID, VSeedRender } from '@components'
import { useEffect, useState } from 'react'
export default () => {
const [result, setResult] = useState<any>(null)
useEffect(() => {
const run = async () => {
const builder = VBI.chart.create({
...{
"connectorId": "demoSupermarket",
"chartType": "column",
"dimensions": [
{
"field": "area",
"alias": "Region"
}
],
"measures": [
{
"field": "sales",
"alias": "Umsatz",
"encoding": "yAxis",
"aggregate": {
"func": "sum"
}
}
],
"whereFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"havingFilter": {
"id": "root",
"op": "and",
"conditions": []
},
"theme": "light",
"locale": "de-DE",
"version": 1,
"limit": 20
},
connectorId: DEMO_CONNECTOR_ID,
})
const applyBuilder = (builder: VBIChartBuilder) => {
builder.whereFilter.add('area', node => {
node.setOperator('!=').setValue(['华东', '华北']);
});
}
applyBuilder(builder)
setResult(await builder.buildVSeed())
}
run()
}, [])
if (!result) return <div>Loading...</div>
return <VSeedRender vseed={result} />
}