# Segmentaciones y líneas de tiempo

- Human documentation: [https://docs.univer.ai/es-ES/guides/sheets/features/slicer](https://docs.univer.ai/es-ES/guides/sheets/features/slicer)

- Agent Markdown: [https://docs.univer.ai/es-ES/guides/sheets/features/slicer.md](https://docs.univer.ai/es-ES/guides/sheets/features/slicer.md)

- Requested language: `es-ES`

- Content language: `es-ES`

- Documentation version: `1.4.0`

- Source: [sheets/features/slicer.es-ES.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/features/slicer.es-ES.mdx)

---

#### Package metadata

```json
{
  "preset": [
    {
      "client": "@univerjs/preset-sheets-advanced",
      "locale": "@univerjs/preset-sheets-advanced/locales/es-ES",
      "style": "@univerjs/preset-sheets-advanced/lib/index.css",
      "headless": "unsupported"
    }
  ],
  "plugins": [
    {
      "client": "@univerjs-pro/sheets-slicer",
      "facade": "@univerjs-pro/sheets-slicer/facade",
      "headless": "supported"
    },
    {
      "client": "@univerjs-pro/sheets-slicer-ui",
      "locale": "@univerjs-pro/sheets-slicer-ui/locale/es-ES",
      "style": "@univerjs-pro/sheets-slicer-ui/lib/index.css",
      "headless": "unsupported"
    }
  ],
  "license": true,
  "server": false
}
```

Las segmentaciones filtran tablas, tablas dinámicas y gráficos dinámicos por miembros del origen. Las líneas de tiempo filtran campos de fecha originales compatibles de un informe dinámico; no admiten columnas de tablas, campos de texto, campos calculados ni campos de agrupación derivados.

## Modo de complemento

### Instalación

```package-install
npm install @univerjs-pro/sheets-slicer @univerjs-pro/sheets-slicer-ui
```

### Uso

Añada lo siguiente a la [configuración de Sheets](https://docs.univer.ai/es-ES/guides/sheets/getting-started/installation.md), con el [soporte de dibujo](https://docs.univer.ai/es-ES/guides/sheets/features/images.md) y el origen de [tabla](https://docs.univer.ai/es-ES/guides/sheets/features/table.md) o [tabla dinámica](https://docs.univer.ai/es-ES/guides/sheets/features/pivot-table.md) configurados. Cargue el idioma y registre los complementos antes de crear el libro.

```ts
import { UniverSheetsSlicerPlugin } from '@univerjs-pro/sheets-slicer'
import { UniverSheetsSlicerUIPlugin } from '@univerjs-pro/sheets-slicer-ui'
import SheetsSlicerUILocale from '@univerjs-pro/sheets-slicer-ui/locale/es-ES'
import { LocaleType } from '@univerjs/core'
import '@univerjs-pro/sheets-slicer/facade'
import '@univerjs-pro/sheets-slicer-ui/lib/index.css'

univerAPI.loadLocales(LocaleType.ES_ES, SheetsSlicerUILocale)
univer.registerPlugin(UniverSheetsSlicerPlugin)
univer.registerPlugin(UniverSheetsSlicerUIPlugin)
```

## Modo preestablecido

### Instalación

```package-install
npm install @univerjs/presets @univerjs/preset-sheets-core @univerjs/preset-sheets-drawing @univerjs/preset-sheets-advanced
```

### Uso

El preset avanzado incluye modelos, UI y API Facade de segmentadores y líneas de tiempo. Combínelo con los presets Core y Drawing y sus traducciones. Si ya lo usa, añada `slicer` a esa configuración sin registrarlo de nuevo. Configure la licencia según [usar una licencia](https://docs.univer.ai/es-ES/server/license.md).

```ts
import { UniverSheetsAdvancedPreset } from '@univerjs/preset-sheets-advanced'
import AdvancedLocale from '@univerjs/preset-sheets-advanced/locales/es-ES'
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import CoreLocale from '@univerjs/preset-sheets-core/locales/es-ES'
import { UniverSheetsDrawingPreset } from '@univerjs/preset-sheets-drawing'
import DrawingLocale from '@univerjs/preset-sheets-drawing/locales/es-ES'
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'
import '@univerjs/preset-sheets-core/lib/index.css'
import '@univerjs/preset-sheets-drawing/lib/index.css'
import '@univerjs/preset-sheets-advanced/lib/index.css'

const { univerAPI } = createUniver({
  locale: LocaleType.ES_ES,
  locales: {
    [LocaleType.ES_ES]: mergeLocales(CoreLocale, DrawingLocale, AdvancedLocale),
  },
  presets: [
    UniverSheetsCorePreset({ container: 'app' }),
    UniverSheetsDrawingPreset(),
    UniverSheetsAdvancedPreset({ slicer: { maxMemberWindowSize: 200 } }),
  ],
})
```

Con un [Worker](https://docs.univer.ai/es-ES/guides/sheets/getting-started/worker.md), configure `useWorker: true` en el preset avanzado y registre `UniverSheetsAdvancedWorkerPreset()` en el Worker; también incluye el cálculo de segmentadores.

## Crear una segmentación

Este ejemplo utiliza una tabla dinámica en I1 de la hoja activa con un campo de origen llamado `Region`. Obtenga su ID original estable con `getSourceFieldsInfo()`; no pase nombres visibles ni ID de campos del informe a `newSlicer()`.

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook?.getActiveSheet()
if (!fWorkbook || !fWorksheet) throw new Error('No active worksheet')

const pivotTable = fWorkbook.getPivotTableByCell(
  fWorkbook.getId(),
  fWorksheet.getSheetId(),
  0,
  8,
)
const regionField = pivotTable?.getSourceFieldsInfo().find((field) => field.name === 'Region')
if (!pivotTable || !regionField) throw new Error('Region source field not found')

const slicer = await fWorksheet.insertSlicer(
  pivotTable.newSlicer(regionField.id)
    .setCaption(regionField.name)
    .setPosition('N2')
    .build(),
)
```

`pivotTable.newSlicer()` vincula el constructor a su origen. `build()` solo prepara la configuración; `insertSlicer()` crea el control. La hoja de destino puede ser distinta de la de origen, pero ambas deben pertenecer al mismo libro. Para un origen de tabla, use `fWorksheet.newSlicer(columnId).setTableReference({ subUnitId, tableId })`, donde `columnId` es el ID estable de la columna de la tabla.

## Crear una línea de tiempo

El siguiente ejemplo continúa con la misma tabla dinámica y requiere un campo de fecha original llamado `Date`. `newTimeline()` valida el origen y rechaza los campos no compatibles. Las API de rangos de la línea de tiempo utilizan valores de serie de Excel según el sistema de fechas del libro, no objetos JavaScript `Date`.

```ts
const dateField = pivotTable.getSourceFieldsInfo().find((field) => field.name === 'Date')
if (!dateField) throw new Error('Date source field not found')

const timeline = await fWorksheet.insertTimeline(
  pivotTable.newTimeline(dateField.id)
    .setCaption(dateField.name)
    .setLevel(univerAPI.Enum.TimelineLevel.Month)
    .setPosition('N18')
    .build(),
)
```

## Buscar controles y observar cambios

Use `getSlicer(viewId)` / `getSlicers()` y `getTimeline(viewId)` / `getTimelines()` en la hoja que contiene el control. `viewId` es el ID devuelto por `getId()` del control, no su ID de dibujo.

Suscríbase a `SlicerAdded`, `SlicerChanged`, `SlicerRemoved`, `TimelineAdded`, `TimelineChanged` y `TimelineRemoved` mediante `univerAPI.addEvent()`. Los eventos describen cambios locales confirmados, no el guardado remoto ni la finalización del renderizado. Llame a `dispose()` en la suscripción cuando ya no sea necesaria.

Referencia de API:

- [FSheetSlicer](https://docs.univer.ai/es-ES/reference/facade/sheet-slicer.md)
- [FSheetSlicerBuilder](https://docs.univer.ai/es-ES/reference/facade/sheet-slicer-builder.md)
- [FSheetTimeline](https://docs.univer.ai/es-ES/reference/facade/sheet-timeline.md)
- [FSheetTimelineBuilder](https://docs.univer.ai/es-ES/reference/facade/sheet-timeline-builder.md)
- [FEventName](https://docs.univer.ai/es-ES/reference/facade/events.md#univerjs-prosheets-slicer)

## Consultar miembros y compartir filtros

Pase valores de origen tipados a `setSelection()`: el número `1`, la cadena `'1'` y un valor en blanco son distintos. No pase etiquetas ni índices visibles. El filtro se comparte entre todas las vistas de la misma caché y los informes conectados. En una Table sustituye el filtro de esa columna y conserva los demás. Use `clearFilter()` para quitarlo.

```ts
import { FilterSelectionMode, RecordValueType } from '@univerjs/core'

const accepted = await slicer.setSelection({
  mode: FilterSelectionMode.Include,
  values: [{ type: RecordValueType.String, value: 'EMEA' }],
})
```

`getItems({ start, count })` consulta una ventana sin cambiar la selección. Solicita 100 miembros de forma predeterminada, limitados por `maxMemberWindowSize` (entero positivo, 200 por defecto). Conserve las selecciones fuera de la ventana. `setConnections()` sustituye las conexiones de informes dinámicos; `getConnectionCandidates()` obtiene candidatos compatibles. La edición necesita permisos en las hojas correspondientes. Véase [FSheetSlicer](https://docs.univer.ai/es-ES/reference/facade/sheet-slicer.md).

## Condiciones de fecha de la línea de tiempo

`setSelection({ startDate, endDate, useWholeDay: true })` amplía los límites fraccionarios a días completos y mantiene exclusivo el final entero. Sin `useWholeDay`, el intervalo es exactamente `[startDate, endDate)`. Una condición fija compartida desde la tabla dinámica puede no ser continua: léala con `getDateCondition()`. En ese caso, `getSelection()` devuelve `undefined`, lo que por sí solo no indica ausencia de filtro.
