order: 4 title: 交叉表 group: title: 案例展示

order: 2

基本用法

  • 表格渲染上,维度作为 左表头,指标作为 顶表头
  1. /**
  2. * transform: true
  3. * defaultShowCode: true
  4. */
  5. import React from 'react';
  6. import { PivotTable } from 'chart-render';
  7. export default () => (
  8. <PivotTable
  9. style={{ maxHeight: 400, overflow: 'auto' }}
  10. meta={[
  11. { id: 'subs', name: '子公司', isDim: true, isRate: false },
  12. { id: 'shop', name: '门店', isDim: true, isRate: false },
  13. { id: 'season', name: '季度', isDim: true, isRate: false },
  14. { id: 'month', name: '月份', isDim: true, isRate: false },
  15. { id: 'valueA', name: '指标A', isDim: false, isRate: false },
  16. { id: 'valueB', name: '指标B', isDim: false, isRate: true },
  17. ]}
  18. data={[
  19. {
  20. subs: '上海子公司',
  21. shop: '上海大宁店',
  22. season: '一季度',
  23. month: '2022-01',
  24. valueA: 782,
  25. valueB: 0.566,
  26. },
  27. {
  28. subs: '上海子公司',
  29. shop: '上海大宁店',
  30. season: '一季度',
  31. month: '2022-02',
  32. valueA: 856,
  33. valueB: 0.403,
  34. },
  35. {
  36. subs: '上海子公司',
  37. shop: '上海大宁店',
  38. season: '一季度',
  39. month: '2022-03',
  40. valueA: 886,
  41. valueB: 0.555,
  42. },
  43. {
  44. subs: '上海子公司',
  45. shop: '上海大宁店',
  46. season: '二季度',
  47. month: '2022-04',
  48. valueA: 555,
  49. valueB: 0.444,
  50. },
  51. {
  52. subs: '上海子公司',
  53. shop: '上海大宁店',
  54. season: '二季度',
  55. month: '2022-05',
  56. valueA: 444,
  57. valueB: 0.333,
  58. },
  59. {
  60. subs: '上海子公司',
  61. shop: '上海曹家渡店',
  62. season: '一季度',
  63. month: '2022-01',
  64. valueA: 922,
  65. valueB: 0.778,
  66. },
  67. {
  68. subs: '上海子公司',
  69. shop: '上海曹家渡店',
  70. season: '一季度',
  71. month: '2022-02',
  72. valueA: 888,
  73. valueB: 0.887,
  74. },
  75. {
  76. subs: '上海子公司',
  77. shop: '上海曹家渡店',
  78. season: '一季度',
  79. month: '2022-03',
  80. valueA: 879,
  81. valueB: 0.87,
  82. },
  83. {
  84. subs: '上海子公司',
  85. shop: '上海曹家渡店',
  86. season: '二季度',
  87. month: '2022-04',
  88. valueA: 800,
  89. valueB: 0.723,
  90. },
  91. {
  92. subs: '上海子公司',
  93. shop: '上海曹家渡店',
  94. season: '二季度',
  95. month: '2022-05',
  96. valueA: 813,
  97. valueB: 0.789,
  98. },
  99. {
  100. subs: '浙江子公司',
  101. shop: '亲橙里',
  102. season: '一季度',
  103. month: '2022-01',
  104. valueA: 500,
  105. valueB: 0.463,
  106. },
  107. {
  108. subs: '浙江子公司',
  109. shop: '亲橙里',
  110. season: '一季度',
  111. month: '2022-02',
  112. valueA: 833,
  113. valueB: 0.456,
  114. },
  115. {
  116. subs: '浙江子公司',
  117. shop: '亲橙里',
  118. season: '一季度',
  119. month: '2022-03',
  120. valueA: 821,
  121. valueB: 0.442,
  122. },
  123. {
  124. subs: '浙江子公司',
  125. shop: '亲橙里',
  126. season: '二季度',
  127. month: '2022-04',
  128. valueA: 834,
  129. valueB: 0.456,
  130. },
  131. {
  132. subs: '浙江子公司',
  133. shop: '亲橙里',
  134. season: '二季度',
  135. month: '2022-05',
  136. valueA: 803,
  137. valueB: 0.7,
  138. },
  139. ]}
  140. />
  141. );

高级用法

自定义单元格渲染

  1. /**
  2. * transform: true
  3. * defaultShowCode: true
  4. */
  5. import React from 'react';
  6. import { PivotTable } from 'chart-render';
  7. export default () => (
  8. <PivotTable
  9. style={{ maxHeight: 400, overflow: 'auto' }}
  10. cellRender={(val, dimRecord, indId) => (
  11. <div>
  12. <p>参数表:</p>
  13. <p
  14. style={{
  15. color: ['red', 'orange', 'yellow', 'green', 'blue'][
  16. Object.keys(dimRecord).length
  17. ],
  18. }}
  19. >
  20. {val}
  21. </p>
  22. <p>{JSON.stringify(dimRecord)}</p>
  23. <p>{JSON.stringify(indId)}</p>
  24. </div>
  25. )}
  26. meta={[
  27. { id: 'subs', name: '子公司', isDim: true, isRate: false },
  28. { id: 'shop', name: '门店', isDim: true, isRate: false },
  29. { id: 'season', name: '季度', isDim: true, isRate: false },
  30. { id: 'month', name: '月份', isDim: true, isRate: false },
  31. { id: 'valueA', name: '指标A', isDim: false, isRate: false },
  32. { id: 'valueB', name: '指标B', isDim: false, isRate: true },
  33. ]}
  34. data={[
  35. {
  36. subs: '上海子公司',
  37. shop: '上海大宁店',
  38. season: '一季度',
  39. month: '2022-01',
  40. valueA: 782,
  41. valueB: 0.566,
  42. },
  43. {
  44. subs: '上海子公司',
  45. shop: '上海大宁店',
  46. season: '一季度',
  47. month: '2022-02',
  48. valueA: 856,
  49. valueB: 0.403,
  50. },
  51. {
  52. subs: '上海子公司',
  53. shop: '上海大宁店',
  54. season: '一季度',
  55. month: '2022-03',
  56. valueA: 886,
  57. valueB: 0.555,
  58. },
  59. {
  60. subs: '上海子公司',
  61. shop: '上海大宁店',
  62. season: '二季度',
  63. month: '2022-04',
  64. valueA: 555,
  65. valueB: 0.444,
  66. },
  67. {
  68. subs: '上海子公司',
  69. shop: '上海大宁店',
  70. season: '二季度',
  71. month: '2022-05',
  72. valueA: 444,
  73. valueB: 0.333,
  74. },
  75. {
  76. subs: '上海子公司',
  77. shop: '上海曹家渡店',
  78. season: '一季度',
  79. month: '2022-01',
  80. valueA: 922,
  81. valueB: 0.778,
  82. },
  83. {
  84. subs: '上海子公司',
  85. shop: '上海曹家渡店',
  86. season: '一季度',
  87. month: '2022-02',
  88. valueA: 888,
  89. valueB: 0.887,
  90. },
  91. {
  92. subs: '上海子公司',
  93. shop: '上海曹家渡店',
  94. season: '一季度',
  95. month: '2022-03',
  96. valueA: 879,
  97. valueB: 0.87,
  98. },
  99. {
  100. subs: '上海子公司',
  101. shop: '上海曹家渡店',
  102. season: '二季度',
  103. month: '2022-04',
  104. valueA: 800,
  105. valueB: 0.723,
  106. },
  107. {
  108. subs: '上海子公司',
  109. shop: '上海曹家渡店',
  110. season: '二季度',
  111. month: '2022-05',
  112. valueA: 813,
  113. valueB: 0.789,
  114. },
  115. {
  116. subs: '浙江子公司',
  117. shop: '亲橙里',
  118. season: '一季度',
  119. month: '2022-01',
  120. valueA: 500,
  121. valueB: 0.463,
  122. },
  123. {
  124. subs: '浙江子公司',
  125. shop: '亲橙里',
  126. season: '一季度',
  127. month: '2022-02',
  128. valueA: 833,
  129. valueB: 0.456,
  130. },
  131. {
  132. subs: '浙江子公司',
  133. shop: '亲橙里',
  134. season: '一季度',
  135. month: '2022-03',
  136. valueA: 821,
  137. valueB: 0.442,
  138. },
  139. {
  140. subs: '浙江子公司',
  141. shop: '亲橙里',
  142. season: '二季度',
  143. month: '2022-04',
  144. valueA: 834,
  145. valueB: 0.456,
  146. },
  147. {
  148. subs: '浙江子公司',
  149. shop: '亲橙里',
  150. season: '二季度',
  151. month: '2022-05',
  152. valueA: 803,
  153. valueB: 0.7,
  154. },
  155. ]}
  156. />
  157. );

可展开/收起

  1. /**
  2. * transform: true
  3. * defaultShowCode: true
  4. */
  5. import React, { useState } from 'react';
  6. import { PivotTable } from 'chart-render';
  7. export default () => {
  8. const [expandable, setExpandable] = useState(false);
  9. return (
  10. <>
  11. <label>
  12. 可展开/收缩:
  13. <input
  14. type="checkbox"
  15. value={expandable}
  16. onChange={() => setExpandable(!expandable)}
  17. />
  18. </label>
  19. <PivotTable
  20. leftExpandable={expandable}
  21. showSubtotal={false}
  22. meta={[
  23. { id: 'subs', name: '子公司', isDim: true, isRate: false },
  24. { id: 'shop', name: '门店', isDim: true, isRate: false },
  25. { id: 'season', name: '季度', isDim: true, isRate: false },
  26. { id: 'month', name: '月份', isDim: true, isRate: false },
  27. { id: 'valueA', name: '指标A', isDim: false, isRate: false },
  28. { id: 'valueB', name: '指标B', isDim: false, isRate: true },
  29. ]}
  30. data={[
  31. {
  32. subs: '上海子公司',
  33. shop: '上海大宁店',
  34. season: '一季度',
  35. month: '2022-01',
  36. valueA: 782,
  37. valueB: 0.566,
  38. },
  39. {
  40. subs: '上海子公司',
  41. shop: '上海大宁店',
  42. season: '一季度',
  43. month: '2022-02',
  44. valueA: 856,
  45. valueB: 0.403,
  46. },
  47. {
  48. subs: '上海子公司',
  49. shop: '上海大宁店',
  50. season: '一季度',
  51. month: '2022-03',
  52. valueA: 886,
  53. valueB: 0.555,
  54. },
  55. {
  56. subs: '上海子公司',
  57. shop: '上海大宁店',
  58. season: '二季度',
  59. month: '2022-04',
  60. valueA: 555,
  61. valueB: 0.444,
  62. },
  63. {
  64. subs: '上海子公司',
  65. shop: '上海大宁店',
  66. season: '二季度',
  67. month: '2022-05',
  68. valueA: 444,
  69. valueB: 0.333,
  70. },
  71. {
  72. subs: '上海子公司',
  73. shop: '上海曹家渡店',
  74. season: '一季度',
  75. month: '2022-01',
  76. valueA: 922,
  77. valueB: 0.778,
  78. },
  79. {
  80. subs: '上海子公司',
  81. shop: '上海曹家渡店',
  82. season: '一季度',
  83. month: '2022-02',
  84. valueA: 888,
  85. valueB: 0.887,
  86. },
  87. {
  88. subs: '上海子公司',
  89. shop: '上海曹家渡店',
  90. season: '一季度',
  91. month: '2022-03',
  92. valueA: 879,
  93. valueB: 0.87,
  94. },
  95. {
  96. subs: '上海子公司',
  97. shop: '上海曹家渡店',
  98. season: '二季度',
  99. month: '2022-04',
  100. valueA: 800,
  101. valueB: 0.723,
  102. },
  103. {
  104. subs: '上海子公司',
  105. shop: '上海曹家渡店',
  106. season: '二季度',
  107. month: '2022-05',
  108. valueA: 813,
  109. valueB: 0.789,
  110. },
  111. {
  112. subs: '浙江子公司',
  113. shop: '亲橙里',
  114. season: '一季度',
  115. month: '2022-01',
  116. valueA: 500,
  117. valueB: 0.463,
  118. },
  119. {
  120. subs: '浙江子公司',
  121. shop: '亲橙里',
  122. season: '一季度',
  123. month: '2022-02',
  124. valueA: 833,
  125. valueB: 0.456,
  126. },
  127. {
  128. subs: '浙江子公司',
  129. shop: '亲橙里',
  130. season: '一季度',
  131. month: '2022-03',
  132. valueA: 821,
  133. valueB: 0.442,
  134. },
  135. {
  136. subs: '浙江子公司',
  137. shop: '亲橙里',
  138. season: '二季度',
  139. month: '2022-04',
  140. valueA: 834,
  141. valueB: 0.456,
  142. },
  143. {
  144. subs: '浙江子公司',
  145. shop: '亲橙里',
  146. season: '二季度',
  147. month: '2022-05',
  148. valueA: 803,
  149. valueB: 0.7,
  150. },
  151. ]}
  152. />
  153. </>
  154. );
  155. };