[displayFn] billboardjs

Chart.js 이외에 여러 차트 선택지를 추가하였습니다.

display: billboardjs

  • billboard.js 스크립트를 사용할 수 있습니다.
  • ChatGPT 등을 통해 더 잘 활용할 수 있습니다. (e.g. “billboard.js로 bar 그리는 js 코드를 알려줘”)

displayFn

  • block.id와 displayFn안에 차트를 그릴때 ID가 동일해야합니다.
  • sqlMany 기능이 추가되었습니다. (여러개 쿼리 실행시 rows[0], rows[1] 안에 각각 결과가 담깁니다: 지난주/이번주 데이터 비교 등에 사용 가능)
  • displayFn안에서 쓸수있는 변수: rows, id, openModal, openAction, _ lodash 데이터 처리용

예시 YAML 코드

menus:
- path: pages/8y_rbk-4
  name: billboard
pages:
- path: pages/8y_rbk-4
  # title: 제목
  # subtitle: 내용
  blocks:
  - type: query
    resource: mysql.qa
    sqlType: select
    sql: >
      SELECT DATE(created_at), COUNT(id) FROM TestLog 
      WHERE created_at > '2024-05-15'
      GROUP BY 1
    modals:
      - path: view
        blocks:
          - type: query
            resource: mysql.qa
            sqlType: select
            sql: SELECT :id
            params:
              - key: id
                valueFromRow: id

    display: billboardjs
    id: gaugeChart
    displayFn: |
      var chart = bb.generate({
        data: {
          columns: [
            ["data", 91.4]
          ],
          type: "gauge", // for ESM specify as: gauge()
          onclick: function (d, i) {
            console.log("onclick", d, i);
          },
          onover: function (d, i) {
            console.log("onover", d, i);
          },
          onout: function (d, i) {
            console.log("onout", d, i);
          }
        },
        gauge: {},
        color: {
          pattern: [
            "#FF0000",
            "#F97600",
            "#F6C600",
            "#60B044"
          ],
          threshold: {
            values: [
              30,
              60,
              90,
              100
            ]
          }
        },
        size: {
          height: 180
        },
        bindto: "#gaugeChart"
      });

      setTimeout(function () {
        chart.load({
          columns: [
            ["data", 10]
          ]
        });
      }, 1000);

      setTimeout(function () {
        chart.load({
          columns: [
            ["data", 50]
          ]
        });
      }, 2000);

      setTimeout(function () {
        chart.load({
          columns: [
            ["data", 70]
          ]
        });
      }, 3000);

      setTimeout(function () {
        chart.load({
          columns: [
            ["data", 0]
          ]
        });
      }, 4000);

      setTimeout(function () {
        chart.load({
          columns: [
            ["data", 100]
          ]
        });
      }, 5000);