Skip to content

JimmieMax/pivot-table

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PivotTable Algorithm 数据透视表算法

Analyze the statistics by different dimensions.

Ability

Support row dimensions; Support column dimensions; Support sorting; Support column dimensions; Support statistic dimensions; Support statistic calculate mode; Support reset default value;

Config/Options

dimensionRows

dimensionRows: [{
  id: "productId", // 字段唯一值
  key: "productName", // 展示值
  display: "商品", // 维度展示值
}]

dimensionColumns

dimensionColumns: [
  {
    id: "productId", // 字段唯一值
    key: "productName", // 展示字段值
    display: "商品", // 维度展示值
  },
]

statisticKeys

statisticKeys: [
  {
    key: "quantity", // 展示字段值
    display: "数量", // 维度展示值
    calclate: 'sum' // 计算方式:累加
  },
  {
    key: "price",
    display: "价格",
    calclate: 'mean' // 计算方式:平均
  }
]

headerFieldNames

headerFieldNames: {
  display: 'title', // 维度展示值
  dataKey: 'dataIndex' // 展示字段值
}

defaultStatisticValue

defaultStatisticValue: '-' // 空值默认值

needSort

needSort: true // row dimension 列默认不排序,为true时会为row dimension排序

Demo

If your business involves some shows and you want to analyze the sale statistics by different dimensions. you can try the following call:

  const simpleData = [
    {
      productId: "2",
      productName: "商品2",
      colorNumber: "a",
      colorName: "颜色-a",
      orderDate: "2022-4-1",
      quantity: 160,
      price: 1000,
    },
    {
      productId: "1",
      productName: "商品1",
      colorNumber: "b",
      colorName: "颜色-b",
      orderDate: "2022-4-1",
      quantity: 110,
      price: 800,
    },
    {
      productId: "1",
      productName: "商品1",
      colorNumber: "a",
      colorName: "颜色-a",
      orderDate: "2022-4-2",
      quantity: 100,
      price: 900,
    },
    {
      productId: "2",
      productName: "商品2",
      colorNumber: "a",
      colorName: "颜色-a",
      orderDate: "2022-4-1",
      quantity: 200,
      price: 2000,
    },
    {
      productId: "0",
      productName: "商品",
      colorNumber: "c",
      colorName: "颜色-c",
      orderDate: "2022-4-2",
      quantity: 222,
      price: 888,
    },
  ];
  const statistic = new PivotTable(simpleData, {
    dimensionRows: [
      {
        id: "productId",
        key: "productName",
        display: "商品",
      },
      {
        id: "colorNumber",
        key: "colorName",
        display: "颜色",
      },
    ],
    dimensionColumns: [
      {
        id: "orderDate",
        key: "orderDate",
        display: "日期",
      },
    ],
    statisticKeys: [
      {
        key: "quantity",
        display: "数量",
        calculate: "mean",
      },
      {
        key: "price",
        display: "价格",
      },
    ],
    headerFieldNames: {
      display: "title",
      dataKey: "dataIndex",
    },
    defaultStatisticValue: "-",
    needSort: true,
  });

The output dataset like bottom.

{
    header: [
      {
        dataIndex: "productName",
        key: "productName",
        title: "商品",
      },
      {
        dataIndex: "colorName",
        key: "colorName",
        title: "颜色",
      },
      {
        children: [
          {
            dataIndex: "[orderDate][2022-4-1][quantity]",
            key: "[orderDate][2022-4-1][quantity]",
            title: "数量",
          },
          {
            dataIndex: "[orderDate][2022-4-1][price]",
            key: "[orderDate][2022-4-1][price]",
            title: "价格",
          },
        ],
        key: "[orderDate][2022-4-1]",
        title: "2022-4-1",
      },
      {
        children: [
          {
            dataIndex: "[orderDate][2022-4-2][quantity]",
            key: "[orderDate][2022-4-2][quantity]",
            title: "数量",
          },
          {
            dataIndex: "[orderDate][2022-4-2][price]",
            key: "[orderDate][2022-4-2][price]",
            title: "价格",
          },
        ],
        key: "[orderDate][2022-4-2]",
        title: "2022-4-2",
      },
    ],
    data: [
      {
        "[orderDate][2022-4-1][quantity]": "-",
        "[orderDate][2022-4-1][price]": "-",
        "[orderDate][2022-4-2][quantity]": 222,
        "[orderDate][2022-4-2][price]": 888,
        colorNumber: "c",
        colorName: "颜色-c",
        productId: "0",
        productName: "商品",
      },
      {
        "[orderDate][2022-4-1][quantity]": "-",
        "[orderDate][2022-4-1][price]": "-",
        "[orderDate][2022-4-2][quantity]": 100,
        "[orderDate][2022-4-2][price]": 900,
        colorNumber: "a",
        colorName: "颜色-a",
        productId: "1",
        productName: "商品1",
      },
      {
        "[orderDate][2022-4-1][quantity]": 110,
        "[orderDate][2022-4-1][price]": 800,
        "[orderDate][2022-4-2][quantity]": "-",
        "[orderDate][2022-4-2][price]": "-",
        colorNumber: "b",
        colorName: "颜色-b",
        productId: "1",
        productName: "商品1",
      },
      {
        "[orderDate][2022-4-1][quantity]-count": 2,
        "[orderDate][2022-4-1][quantity]": 180,
        "[orderDate][2022-4-1][price]": 3000,
        "[orderDate][2022-4-2][quantity]": "-",
        "[orderDate][2022-4-2][price]": "-",
        colorNumber: "a",
        colorName: "颜色-a",
        productId: "2",
        productName: "商品2",
      },
    ]
}

About

PivotTable Algorithm 数据透视表

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published