Esta documentación está en fase de desarrollo y puede contener errores.

KPIs y métricas

Tarjetas, tiras y filas de indicadores para montar dashboards: cifras destacadas, tendencias con color, comparativas de tiempo y resúmenes de informe.

Para un cuadro de mando lo que manda es la cifra: número grande, etiqueta corta y, si puedes, una tendencia que diga si va bien o mal. Esta familia te da las piezas para montar ese panel sin pelearte con HTML. La tarjeta destacada la pones con DnzKpiCard. Cuando quieres una tira compacta de varios números (cabeceras, pies de ficha) tiras de DnzKpiInline. Para agrupar varias tarjetas en rejilla responsive usas DnzKpiRow. Para grupos de estadísticas dentro de una card, DnzStatsDisplay o DnzStatItem. Y para comparar tiempo planificado contra real, DnzTimeComparisonDisplay.

Qué componente uso

Quieres...Componente
Una cifra destacada, con icono, color y tendenciaDnzKpiCard
Varias tarjetas KPI en rejilla que se adapta solaDnzKpiRow (envuelve DnzKpiCard)
Una tira horizontal compacta de números (estilo GitHub)DnzKpiInline
Un grupo de estadísticas valor + etiqueta dentro de una cardDnzStatsDisplay
Un stat suelto con icono y contenido libre como valorDnzStatItem
Comparar tiempo previsto contra tiempo real (semáforo)DnzTimeComparisonDisplay
Resumir totales de un informe Flex automáticamenteDnzSummaryBar

Casi todos reciben la cifra ya formateada como texto ("1.250 €", "42"). El separador de miles, el símbolo de moneda y los decimales los pones tú antes. La excepción son los deltas (DeltaPercent), que entran como decimal para que el componente elija color y flecha solo.

Regla rápida: si vas a poner más de una tarjeta, mete los DnzKpiCard dentro de un DnzKpiRow y olvídate del grid. La rejilla se ajusta al ancho disponible con MinCardWidth.


DnzKpiCard

La tarjeta de un KPI: título, cifra grande, icono opcional, color, badge de comparativa porcentual y mini-gráfico de tendencia. Tiene tres modos según cómo la configures.

Cifra, título, delta y descripción en una card sobria.

<DnzKpiCard Title="Ventas del mes" Value=@($"€ {ventasMes:N0}") Icon="payments" Color="#1565c0" DeltaPercent=@variacionPct DeltaLabel="vs mes anterior" Tooltip="Facturacion del mes en curso" />

Con IsCompact=true, una versión mini de una sola línea, para meter muchas en poco espacio.

<DnzKpiCard IsCompact=true Title="Activas" Value=@activas.STR() Icon="check_circle" Color="#16a34a" />

Con HighlightColor, la card se pinta entera con un degradado y texto en blanco.

<DnzKpiCard Title="MRR" Value=@($"€ {mrr:N0}") Icon="trending_up" HighlightColor="DnzKpiCard.HighlightColorType.Green" Tooltip="Monthly Recurring Revenue" />

El delta se colorea solo: positivo en verde, negativo en rojo, cero en gris, con su flecha. Si tu métrica es "cuanto menos mejor" (gastos, tiempos), pon DeltaInvertColors=true para que bajar salga en verde.

Parámetros

ParámetroTipoDefaultQué hace
Titlestring""Etiqueta de la cifra.
Valuestring""La cifra en sí, ya formateada.
Iconstring""Icono Material. Vacío = sin icono.
Colorstring"black"Color del texto y del icono (modo estándar/compacto).
Descriptionstring""Texto pequeño bajo la cifra (modo estándar).
IsCompactboolfalseVariante compacta de una línea.
HighlightColorHighlightColorTypeUndefinedDegradado de fondo. Auto deduce verde/rojo según el valor.
DeltaPercentdecimal?Porcentaje de cambio. Pinta badge con flecha y signo.
DeltaLabelstring""Texto junto al delta, ej. "vs mes anterior".
DeltaInvertColorsboolfalseInvierte verde/rojo (útil cuando subir es malo, ej. gastos).
TrendContentRenderFragmentContenido libre para un mini-gráfico de tendencia (sparkline).
ButtonTextstring""Si lo rellenas, pinta un botón de acción al pie (modo estándar).
ButtonIconstring""Icono de ese botón.
OnClickEventCallbackSe dispara al pulsar el botón.
Tooltipstring""Tooltip al pasar el ratón por la card.
VariantRadzen.VariantFilledVariante de la card base (modo estándar/compacto).
Classstring""Clases CSS extra de la card.
Stylestring""Estilo inline extra de la card.

HighlightColorType admite: Undefined, Auto, Red, Blue, Green, Yellow, Orange, Purple, Black, White, Gray.

HighlightColorType.Auto mira los dígitos del Value: si hay un número distinto de cero lo pinta verde, y rojo si además hay un signo menos. Si tu cifra lleva formato raro (separadores, símbolos), mejor fija el color a mano.


DnzKpiRow

Contenedor en rejilla responsive para tus DnzKpiCard. Mete dentro cuantas tarjetas quieras y el grid se reparte solo según el ancho mínimo que le digas. No tienes que tocar el grid: las columnas se ajustan al ancho disponible y bajan de línea cuando no caben.

<DnzKpiRow MinCardWidth="260">
    <DnzKpiCard Title="Ventas del mes" Value=@($"€ {ventasMes:N0}") Icon="payments" Color="#1565c0" DeltaPercent=@variacionPct DeltaLabel="vs mes anterior" />
    <DnzKpiCard Title="Tickets emitidos" Value=@ticketsHoy.STR() Icon="receipt_long" Color="#6a1b9a" />
    <DnzKpiCard Title="Stock bajo mínimo" Value=@stockBajo.STR() Icon="warning" Color="#e65100" />
</DnzKpiRow>

Parámetros

ParámetroTipoDefaultQué hace
ChildContentRenderFragmentLas tarjetas KPI que van dentro de la rejilla.
MinCardWidthint220Ancho mínimo (px) de cada tarjeta. Define cuántas caben por fila.
Classstring""Clases CSS extra del contenedor.
Stylestring""Estilo inline extra (se concatena con la variable de ancho mínimo).

DnzKpiInline

Tira horizontal compacta de varios números, separados por punto, barra o pipe (estilo GitHub). Ideal para cabeceras de ficha, pies de card o líneas de meta-información. Los items se pasan como lista, no como markup hijo.

<DnzKpiInline Items=@KpiItems Separator="DnzKpiInline.SeparatorType.Pipe" />

@code {
    List<DnzKpiInline.ItemModel> KpiItems = new()
    {
        new("Horas oficiales", "40h 00m", Icon: "calendar_month"),
        new("Realizado", "38h 30m", Icon: "work", ValueColor: "#d97706"),
        new("Horas extra", "2h 15m", Icon: "more_time"),
    };
}

Parámetros

ParámetroTipoDefaultQué hace
ItemsList<ItemModel>new()Los números a pintar. Ver ItemModel abajo.
SeparatorSeparatorTypeMiddleDotSeparador entre items: None, MiddleDot (·), Pipe (|), Slash (/).
Classstring""Clases CSS extra del contenedor.
Stylestring""Estilo inline extra del contenedor.

ItemModel es un record con estos campos (todos menos los dos primeros son opcionales): Label, Value, Icon, ValueColor, IconColor, Tooltip. Si IconColor va vacío, el icono hereda el color del valor.


DnzStatItem

Un stat suelto: icono a la izquierda, valor grande y etiqueta debajo. A diferencia de DnzKpiCard, el valor es contenido libre (ChildContent), así que puedes meter un DnzSpanMoney, un badge o lo que necesites.

<div class="d-flex flex-wrap gap-4">
    <DnzStatItem Label="Clientes activos" Icon="people"><span>1.234</span></DnzStatItem>
    <DnzStatItem Label="Facturado" Icon="payments"><DnzSpanMoney Amount=@totalFacturado /></DnzStatItem>
    <DnzStatItem Label="Pedidos" Icon="shopping_cart"><span>89</span></DnzStatItem>
</div>

El Icon acepta tanto un nombre de icono Material como una ruta de imagen: si empieza por / o http, lo pinta como <img>.

Parámetros

ParámetroTipoDefaultQué hace
ChildContentRenderFragmentEl valor, como contenido libre. Obligatorio.
Labelstring""Etiqueta bajo el valor.
Iconstring""Icono Material, o una URL (/... o http...) para imagen.
IconColorstring"var(--rz-primary)"Color del icono Material.
IconSizestring"40px"Tamaño del icono (CSS).
ValueColorstring""Color del valor. Vacío = color del tema.
ValueSizestring"fs-3"Clase Bootstrap de tamaño del valor (fs-1, fs-3, fs-5...).
VisiblebooltrueSi es false, no se renderiza nada.
Classstring""Clases CSS extra del contenedor.

DnzStatsDisplay

Grupo de estadísticas valor + etiqueta + unidad dentro de una card, repartidas en horizontal. Le pasas una lista de StatisticModel como datos (no como hijos) y él se encarga del layout, pintando una celda por cada métrica.

<RadzenCard>
    <DnzCardTitle Title="Resumen" Icon="analytics" Compact=true />
    <DnzStatsDisplay Statistics=@stats Variant="Variant.Text" />
</RadzenCard>

@code {
    private List<DnzStatsDisplay.StatisticModel> stats = new()
    {
        new() { Value = "12", Label = "Usuarios" },
        new() { Value = "45,3", Label = "Base de datos", Unit = "GB" },
        new() { Value = "8,1", Label = "Archivos", Unit = "GB" },
    };
}

Parámetros

ParámetroTipoDefaultQué hace
StatisticsList<StatisticModel>new()Las estadísticas a pintar. Requerido (EditorRequired).
VariantVariantVariante de la card base (Text, Filled, Outlined...).

StatisticModel tiene tres campos: Value (string), Label (string) y Unit (string).

DnzStatsDisplay.Item (subcomponente)

Es la celda que pinta cada cifra individual: valor grande, unidad más pequeña al lado y etiqueta debajo. No lo usas directamente: DnzStatsDisplay lo instancia por ti, uno por cada elemento de Statistics. Lo documentamos para que veas qué recibe cada celda.

Patrón padre/hijo: el padre (DnzStatsDisplay) recorre la lista Statistics y, por cada métrica, renderiza un hijo (DnzStatsDisplay.Item) con @key=@stat para que Blazor reutilice bien las celdas. Tú solo tocas el padre y le das la lista; el hijo es detalle interno.

Parámetros

ParámetroTipoDefaultQué hace
Valuestring""El número grande de la celda.
Labelstring""Etiqueta debajo del valor.
Unitstring""Unidad pequeña junto al valor. Vacía = sin unidad.

DnzTimeComparisonDisplay

Compara tiempo planificado contra tiempo real y lo pinta con color de semáforo: verde si vas holgado, amarillo si te acercas al límite, rojo si te pasas. Pensado para tareas, partes de trabajo y presupuestos de horas. Los tiempos entran en minutos y se formatean solos a h/m.

<DnzTimeComparisonDisplay PlannedTime="480" ActualTime="510" Label="Reparacion 1042" />

Eso pinta "8h 30m / 8h" con badge "+30m" en rojo (te has pasado) y barra de progreso. Variantes:

Con barra de progreso, badge de diferencia e icono de estado. El modo por defecto.

<DnzTimeComparisonDisplay PlannedTime="120" ActualTime="90" Label="Montaje" />

Con Compact=true, todo en una línea para meterlo en una fila de tabla o un pie de card.

<DnzTimeComparisonDisplay PlannedTime="120" ActualTime="90" Compact=true />

Si no pasas PlannedTime (queda en 0), pinta solo el tiempo real sin comparativa ni barra.

<DnzTimeComparisonDisplay ActualTime="135" Label="Tiempo invertido" />

El color y el icono de estado salen solos del porcentaje: verde hasta el 80%, amarillo entre 80% y 100%, rojo al pasarse o si el tiempo real es negativo.

Parámetros

ParámetroTipoDefaultQué hace
PlannedTimedecimal0Tiempo planificado, en minutos. En 0 desactiva la comparativa.
ActualTimedecimal0Tiempo real consumido, en minutos.
ShowProgressBarbooltruePinta la barra de progreso (solo si hay tiempo planificado).
ShowDiffbooltrueMuestra el badge con la diferencia (+30m, -1h 10m, =).
CompactboolfalseModo de una sola línea.
Labelstring""Etiqueta encima de la comparativa. También aparece en el tooltip.

Si tanto PlannedTime como ActualTime son 0, el componente no pinta nada. Es deliberado: una tarea sin tiempo ni estimación no aporta a un panel.


DnzSummaryBar

Barra de totales para informes Flex. No le pasas datos a mano: lee el ReportContext de la cascada y suma las columnas de dinero, numéricas, minutos, booleanas (cuenta los true, ej. 5 / 20) y el rango de la fecha principal. La pones dentro de un informe y se rellena sola.

<CascadingValue Value=@reportContext>
    <DnzSummaryBar />
</CascadingValue>

Parámetros

ParámetroTipoDefaultQué hace
ContextReportContextLlega por [CascadingParameter]. No se pasa como atributo: lo aporta el informe que envuelve la barra.

DnzSummaryBar solo aparece si el contexto trae filas. Si el informe está vacío no pinta nada, así que no tienes que esconderlo tú. Más sobre informes en Informes (Flex).


Relacionado

Ver tambien: Índice de componentes · Intro DinaZen · Cookbook de patrones · Badges y estados · Tarjetas y layout · Tablas e informes · Informes (Flex) · Cliente Dinaup

On this page