νν°
λΆ κ³΅ν΅ νν°(λλ‘λ€μ΄Β·νΈλ¦¬Β·μ¬λΌμ΄λ λ±)μ νμ΄μ§ νν° νλ, νλΈ νν°λ₯Ό μ€λͺ νλ€.
RealPivot2μμ νν°λ μ μ© λ²μμ λ°λΌ λλλ€. μ§κ³ μ λ°μ΄ν°λ₯Ό μΆμνλ νλΈΒ·μ¬λΌμ΄μ νν°μ νΉμ νμ΄μ§ μ μ© νν° νλλ₯Ό λͺ©μ μ λ§κ² ꡬλΆνμ¬ μ¬μ©νλ€.
νν° μ’ λ₯
| μ’ λ₯ | μ€μ μμΉ | λ²μ |
|---|---|---|
νλΈ filters | Cube μ΅μ | ν΄λΉ νλΈ μ 체 |
νλΈ slicers + Book filterSelectors | Cube Β· Book | λΆ κ³΅ν΅ UIλ‘ νλΈ μ¬λΌμ΄μ μ‘°μ |
tables[].fields.filters | νμ΄μ§ fields | ν΄λΉ νμ΄μ§μλ§ μ μ© |
filterSelectorsβ λΆ κ³΅ν΅ νν° UIλ‘, νλΈμ μ μνslicersλ₯Ό κ°λ¦¬ν¨λ€.fields.filtersβ ν΄λΉ νμ΄μ§μ νν° νλ. μ»¬λΌ λ°μμ λ©€λ²λ₯Ό κ³ λ₯Έλ€.
Book κ°μλ νΌλ² λΆ(Book)μ, νλ λ°°μΉλ νλ ꡬμ±μ μ°Έκ³ νλ€.
νλΈ νν°μ μ¬λΌμ΄μ
μ΄κΈ° νν°λ Cube μ΅μ
μ filters νλͺ©μ μ€μ (μ§μ )ν μ μλ€.
νλ©΄μμ μ ννλ κ³΅ν΅ νν°λ₯Ό μ¬μ©νλ €λ©΄ νλΈμ **slicers**λ₯Ό λ¨Όμ μ μν΄μΌ νλ€.
const cm = createCubeManager(ds, [
{
name: 'sales',
table: 'sales',
schema: { /* dimensions, measures */ },
slicers: [
{ name: 'μ°¨μ’
', dimension: 'μ°¨μ’
', type: 'list' },
{ name: 'νλ§€λ μ§', dimension: 'νλ§€λ μ§', type: 'range' },
{ name: 'νλ§€κΈ°κ°', dimension: 'νλ§€λ μ§', type: 'date' },
],
},
]);slicers μμ± | μ€λͺ |
|---|---|
name | μ¬λΌμ΄μ μ΄λ¦. filterSelectorsμ slicer μμ±μ΄ μ΄ μ΄λ¦μ κ°λ¦¬ν¨λ€ |
dimension | νν°ν νλΈ μ°¨μ |
type | 'list' | 'range' | 'date' (κΈ°λ³Έ 'list') |
μ¬λΌμ΄μ typeκ³Ό μ
λ ν° typeμ λ§μΆλ μμ΄λ€.
μ¬λΌμ΄μ type | μ
λ ν° type μ |
|---|---|
list | button Β· dropdown Β· tree |
range | slider |
date | timeline |
λ°νμμμ νλΈμ μ§μ νν°λ₯Ό λ£μ μλ μλ€. (λ°μ΄ν°μ νλΈ)
const cube = cm.get('sales');
cube.addFilter({ dimension: 'κ΅κ°', values: ['νκ΅'] });μμ£Ό μ°λ νλΈ APIμ΄λ€.
| API | μ€λͺ |
|---|---|
addFilter / filterAll | νν° μΆκ°Β·μΌκ΄ μ€μ |
removeFilter / clearFilters | μ κ±°Β·μ 체 ν΄μ |
getFilters | νμ¬ νν° μ‘°ν |
addSlicer / getSlicer / applySlicers | μ¬λΌμ΄μ κ΄λ¦¬ |
νν°μ μ¬λΌμ΄μλ₯Ό ν¬ν¨ν νλΈ κ΅¬μ± λ°©λ²μ λ°μ΄ν°μ νλΈλ₯Ό μ°Έκ³ νλ€.
λΆ κ³΅ν΅ νν° (filterSelectors)
filterSelectorsλ νλ©΄μ μ¬λΌμ΄μ UIλ₯Ό νμνλ μ€μ μ΅μ
μ΄λ€.
λ°°μ΄ λλ κ°μ²΄ νλλ‘ μ§μ ν μ μλ€.
const config = {
filterSelectors: [
{ type: 'dropdown', cube: 'sales', slicer: 'μ°¨μ’
', position: 'both' },
{ type: 'button', cube: 'sales', slicer: 'λΈλλλͺ
', position: 'header' },
{ type: 'tree', cube: 'sales', slicer: 'μ°λ£', position: 'panel' },
{ type: 'slider', cube: 'sales', slicer: 'νλ§€λ μ§', position: 'both' },
{ type: 'timeline', cube: 'sales', slicer: 'νλ§€κΈ°κ°', position: 'panel' },
],
tables: {
name: 'sales',
cube: 'sales',
fields: {
rows: ['κ΅κ°'],
values: ['νλ§€μλ'],
},
},
};| μμ± | μ€λͺ |
|---|---|
type | 'button' | 'dropdown' | 'tree' | 'timeline' | 'slider' |
cube | λμ νλΈ name |
slicer | νλΈ slicersμ λ±λ‘ν μ΄λ¦ |
position | 'header' | 'panel' | 'both' β νν°λ° λ° μΈμ€νν° λ΄ UI νμ μμΉ (κΈ°λ³Έκ° 'panel') |
tables | μ μ©ν νμ΄μ§ name λͺ©λ‘. μλ΅ μ μ 체 νμ΄μ§ |
visible Β· label Β· description λ± | νμ κ΄λ ¨ μ΅μ |
νμ μμΉ:
filterBar(μλ¨) βpositionκ°μ΄'header'λλ'both'μΈ κ²½μ°- μΈμ€νν° νν° ν¨λ β
positionκ°μ΄'panel'λλ'both'μΈ κ²½μ°
νν°λ°Β·μΈμ€νν° μ체 on/offλ Bookμ filterBar Β· inspector μ€μ μΌλ‘ μ μ΄νλ€. (νΌλ² λΆ)
μ΅μ
νΈλ¦¬λ Config Β· PivotBookConfigurationμ μ°Έκ³ νλ€.
νμ΄μ§ νν° νλ (fields.filters)
νμ΄μ§λ§λ€ λλ νν° νλμ΄λ€. μΈμ€νν° νλ ν¨λμ νν° μΉμ μ λ°°μΉνκ±°λ, μ€μ μΌλ‘ μ§μ νλ€.
fields: {
filters: ['κ΅κ°', { name: 'μ°λ£' }],
rows: ['μ°¨μ’
'],
values: ['νλ§€μλ'],
}νλͺ©μ PivotFilterFieldOptionsμ΄λ€. name Β· width Β· headerWidthλ₯Ό μΈ μ μλ€.
μ€μ μ΄ μλ£λλ©΄ μ»¬λΌ λ° μμμ νν° νλ ννλ‘ νμλλ€. λ©€λ²λ₯Ό μ νν λ€ μ μ©νλ©΄ ν΄λΉ νμ΄μ§ μ§κ³μ λ°μλλ€.
λ°νμ
const table = control.table;
const field = table.fields.getFilterField('κ΅κ°');
table.setAggFilter(field, ['νκ΅', 'λ―Έκ΅']);
table.getAggFilter(field);
table.isAggFiltered(field);
// νν° ν΄μ
table.setAggFilter(field, null);νλλ₯Ό μΆμ λ£κ±°λ λΉΌλ €λ©΄ Book APIλ₯Ό μ¬μ©νλ€. Undoκ° ν¬ν¨λλ€.
book.addFilterField(table, 'κ΅κ°');
book.removeField(field);