measures

add-measure

Thêm measure

Loading...
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": "table",
          "dimensions": [],
          "measures": [],
          "whereFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "havingFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "theme": "light",
          "locale": "vi-VN",
          "version": 1,
          "limit": 20
        },
        connectorId: DEMO_CONNECTOR_ID,
      })
      const applyBuilder = (builder: VBIChartBuilder) => {
  builder.measures.add('sales', node => {
    node.setAlias('Doanh số ban đầu')
  })
  const measureId = builder.measures.find(node => node.getField() === 'sales')?.getId()
  if (measureId) {
    builder.measures.update(measureId, node => {
      node.setAlias('Doanh số').setAggregate({ func: 'sum' })
    })
  }
}
      applyBuilder(builder)
      setResult(await builder.buildVSeed())
    }
    run()
  }, [])

  if (!result) return <div>Loading...</div>

  return <VSeedRender vseed={result} />
}

add-measure-encoding

Thêm measure và thiết lập encoding

Loading...
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": "table",
          "dimensions": [],
          "measures": [],
          "whereFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "havingFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "theme": "light",
          "locale": "vi-VN",
          "version": 1,
          "limit": 20
        },
        connectorId: DEMO_CONNECTOR_ID,
      })
      const applyBuilder = (builder: VBIChartBuilder) => {
  builder.measures.add('sales', n => n.setAlias('Doanh số'))
  const measureId = builder.measures.find(node => node.getField() === 'sales')?.getId()
  if (measureId) {
    builder.measures.update(measureId, n => n.setEncoding('yAxis').setAggregate({ func: 'sum' }))
  }
}
      applyBuilder(builder)
      setResult(await builder.buildVSeed())
    }
    run()
  }, [])

  if (!result) return <div>Loading...</div>

  return <VSeedRender vseed={result} />
}

measure-with-custom-and-auto-format

Định dạng measure: doanh số dùng định dạng tùy chỉnh đơn vị 10 nghìn (tiền tố ¥, hai chữ số thập phân), tỷ lệ lợi nhuận dùng tự động, chiết khấu dùng phần trăm

Loading...
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": "table",
          "dimensions": [
            {
              "field": "product_type",
              "alias": "Danh mục"
            }
          ],
          "measures": [],
          "whereFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "havingFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "theme": "light",
          "locale": "vi-VN",
          "version": 1,
          "limit": 20
        },
        connectorId: DEMO_CONNECTOR_ID,
      })
      const applyBuilder = (builder: VBIChartBuilder) => {
  builder.measures
    .add('sales', node => {
      node.setAlias('Doanh số (10K)')
        .setAggregate({ func: 'sum' })
        .setEncoding('column')
        .setFormat({
          type: 'number',
          ratio: 10000,
          symbol: '10K',
          prefix: '¥',
          fractionDigits: 2
        });
    })
    .add('profit', node => {
      node.setAlias('Lợi nhuận')
        .setAggregate({ func: 'sum' })
        .setEncoding('column')
        .setFormat({ autoFormat: true });
    })
    .add('discount', node => {
      node.setAlias('Chiết khấu TB')
        .setAggregate({ func: 'avg' })
        .setEncoding('column')
        .setFormat({
          type: 'percent',
          fractionDigits: 1
        });
    });
}
      applyBuilder(builder)
      setResult(await builder.buildVSeed())
    }
    run()
  }, [])

  if (!result) return <div>Loading...</div>

  return <VSeedRender vseed={result} />
}

remove-measure

Xóa measure

Loading...
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": "table",
          "dimensions": [],
          "measures": [
            {
              "field": "sales",
              "alias": "Doanh số",
              "aggregate": {
                "func": "sum"
              },
              "encoding": "yAxis"
            },
            {
              "field": "profit",
              "alias": "Lợi nhuận",
              "aggregate": {
                "func": "sum"
              },
              "encoding": "yAxis"
            }
          ],
          "whereFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "havingFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "theme": "light",
          "locale": "vi-VN",
          "version": 1,
          "limit": 20
        },
        connectorId: DEMO_CONNECTOR_ID,
      })
      const applyBuilder = (builder: VBIChartBuilder) => {
  const measureId = builder.measures.toJSON().find(item => item.field === 'sales')?.id
  if (measureId) {
    builder.measures.update(measureId, n => n.setAlias('Doanh số cần xóa'))
    builder.measures.remove(measureId)
  }
}
      applyBuilder(builder)
      setResult(await builder.buildVSeed())
    }
    run()
  }, [])

  if (!result) return <div>Loading...</div>

  return <VSeedRender vseed={result} />
}

update-measure

Cập nhật measure

Loading...
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": "table",
          "dimensions": [],
          "measures": [
            {
              "field": "sales",
              "alias": "Doanh số ban đầu",
              "aggregate": {
                "func": "sum"
              },
              "encoding": "yAxis"
            }
          ],
          "whereFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "havingFilter": {
            "id": "root",
            "op": "and",
            "conditions": []
          },
          "theme": "light",
          "locale": "vi-VN",
          "version": 1,
          "limit": 20
        },
        connectorId: DEMO_CONNECTOR_ID,
      })
      const applyBuilder = (builder: VBIChartBuilder) => {
  const measureId = builder.measures.toJSON().find(item => item.field === 'sales')?.id
  if (measureId) {
    const measure = builder.measures.find((node) => node.getId() === measureId)
    if (measure) {
      measure.setAlias('Doanh số cần điều chỉnh').setEncoding('yAxis')
    }
    builder.measures.update(measureId, n => n.setAlias('Doanh số mới').setAggregate({ func: 'avg' }))
  }
}
      applyBuilder(builder)
      setResult(await builder.buildVSeed())
    }
    run()
  }, [])

  if (!result) return <div>Loading...</div>

  return <VSeedRender vseed={result} />
}