Guía de referencia de informes del panel de administración

:bookmark: Esta es una guía de referencia para describir cómo funcionan los Informes del Panel de Administración, los datos que muestran, las consultas SQL correspondientes del Explorador de Datos y dónde encontrar el código Ruby de cada informe.

:person_raising_hand: Nivel de usuario requerido: Personal

Discourse incluye varios Informes integrados en el panel de administración que pueden ser útiles para explorar estadísticas sobre una comunidad. Para acceder a estos informes, puedes visitar discourse.example.com/admin/dashboard/reports en tu sitio (o hacer clic en el enlace Informes en la parte superior del panel). Ten en cuenta que solo los usuarios del personal tendrán acceso a estos informes.

Los datos de todos los usuarios de un sitio se incluyen en estos informes (incluida la actividad del personal, como la visita a páginas de administración). La única condición que se aplica a los usuarios en los informes es que sean usuarios “reales”, lo que se utiliza para excluir al usuario system de los informes.

Los complementos también pueden agregar informes al panel con add_report(name, &block).

:gem: Los modelos Ruby para la mayoría de los informes se encuentran en: discourse/app/models/concerns/reports/. Algunos informes también hacen referencia a: discourse/app/models/report.rb

:bulb: Los temas dashboard-sql contienen todas las consultas SQL correspondientes que se pueden usar para generar informes idénticos a los Informes del Panel de Administración. Estas consultas se pueden usar dentro del complemento Explorador de Datos y para Ejecutar consultas del Explorador de Datos con la API de Discourse

:wrench: Para ocultar informes específicos del panel, usa la configuración del sitio dashboard_hidden_reports.

Soluciones aceptadas

Muestra el recuento diario de publicaciones marcadas como soluciones.

Código Ruby: discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub

Consulta SQL: Dashboard Report - Accepted Solutions

Inicios de sesión de administradores

Lista de horas de inicio de sesión de administradores con ubicaciones.

Código Ruby: discourse/app/models/concerns/reports/staff_logins.rb

Consulta SQL: Dashboard Report - Admin Logins

Anónimos

Número de nuevas visualizaciones de páginas por visitantes que no han iniciado sesión en una cuenta.

Código Ruby: discourse/app/models/concerns/reports/consolidated_page_views.rb

Consulta SQL: Dashboard Report - Anonymous

Marcadores

Número de nuevos temas y publicaciones marcados.

Código Ruby: discourse/app/models/concerns/reports/bookmarks.rb

Consulta SQL: Dashboard Report - Bookmarks

Solicitudes de API consolidadas

Estadísticas de uso de la API por fecha, que rastrean tanto las solicitudes de API regulares como las solicitudes de API de usuario.

Código Ruby: discourse/app/models/concerns/reports/consolidated_api_requests.rb at main · discourse/discourse · GitHub

Consulta SQL: Dashboard Report - Consolidated API Requests

Visualizaciones de página consolidadas

Visualizaciones de página para usuarios con sesión iniciada, usuarios anónimos y rastreadores. Este es un informe heredado sustituido por el informe Tráfico del sitio.

Código Ruby: discourse/app/models/concerns/reports/consolidated_page_views.rb

Consulta SQL: Dashboard Report - Consolidated Pageviews

Visualizaciones de página consolidadas con detección de navegador (obsoleto)

Visualizaciones de página para usuarios con sesión iniciada, usuarios anónimos, rastreadores conocidos y otros. Este informe está obsoleto y ahora delega al informe Tráfico del sitio.

Código Ruby: discourse/app/models/concerns/reports/consolidated_page_views_browser_detection.rb

Consulta SQL: Dashboard Report - Consolidated Pageviews with Browser Detection

DAU/MAU

Número de miembros que iniciaron sesión en el último día dividido por el número de miembros que iniciaron sesión en el último mes: devuelve un % que indica la “fidelidad” de la comunidad. Apunta a >20%.

Código Ruby: discourse/app/models/concerns/reports/dau_by_mau.rb

Consulta SQL: Dashboard Report - DAU/MAU

Usuarios comprometidos diarios

Número de usuarios que han dado me gusta o publicado en el último día.

Código Ruby: discourse/app/models/concerns/reports/daily_engaged_users.rb

Consulta SQL: Dashboard Report - Daily Engaged Users

Correos electrónicos enviados

Número de nuevos correos electrónicos enviados.

Código Ruby: discourse/app/models/concerns/reports/emails.rb

Consulta SQL: Dashboard Report - Emails Sent

Banderas

Número de nuevas banderas.

Código Ruby: discourse/app/models/concerns/reports/flags.rb

Consulta SQL: Dashboard Report - Flags

Estado de las banderas

Lista de estados de las banderas, incluido el tipo de bandera, el autor, el que reporta y el tiempo de resolución.

Código Ruby: discourse/app/models/concerns/reports/flags_status.rb

Consulta SQL: Dashboard Report - Flags Status

Me gusta

Número de nuevos me gusta.

Código Ruby: discourse/app/models/concerns/reports/likes.rb

Consulta SQL: Dashboard Report - Likes

Con sesión iniciada

Número de nuevas visualizaciones de páginas de usuarios con sesión iniciada.

Código Ruby: discourse/app/controllers/admin/reports_controller.rb#L5

Consulta SQL: Dashboard Report - Logged In

Actividad de moderadores

Lista de actividad de moderadores, incluidas banderas revisadas, tiempo de lectura, temas creados, publicaciones creadas, mensajes personales creados y revisiones.

Consulta SQL: Dashboard Report - Moderator Activity

Advertencia de moderador

Número de advertencias enviadas mediante mensajes personales por moderadores.

Código Ruby: discourse/app/models/concerns/reports/moderator_warning_private_messages.rb

Consulta SQL: Dashboard Report - Moderator Warnings

Nuevos colaboradores

Número de usuarios que hicieron su primera publicación durante este período.

Código Ruby: discourse/app/models/concerns/reports/new_contributors.rb

Consulta SQL: Dashboard Report - New Contributors

Notificar moderadores

Número de veces que los moderadores han sido notificados de forma privada por una bandera.

Código Ruby: discourse/app/models/concerns/reports/notify_moderators_private_messages.rb

Consulta SQL: Dashboard Report - Notify Moderators

Notificar usuario

Número de veces que los usuarios han sido notificados de forma privada por una bandera.

Código Ruby: discourse/app/models/concerns/reports/notify_user_private_messages.rb

Consulta SQL: Dashboard Report - Notify User

Sentimiento general

Número de publicaciones clasificadas como positivas o negativas con la IA “Sentimiento” en un período determinado.

Código Ruby: discourse-ai/lib/sentiment/entry_point.rb at main · discourse/discourse-ai · GitHub

Consulta SQL: Informe del panel - Sentimiento general

Visualizaciones de página

Número de nuevas visualizaciones de páginas de todos los visitantes. Igual que el total de Visualizaciones de página consolidadas.

Discourse usa la siguiente consulta para determinar el total de visualizaciones de página:

Consulta SQL: Dashboard Report - Consolidated Pageviews

Ediciones de publicaciones

Número de nuevas ediciones de publicaciones.

Código Ruby: discourse/app/models/concerns/reports/post_edits.rb

Consulta SQL: Dashboard Report - Post Edits

Publicaciones

Nuevas publicaciones creadas durante el período de tiempo seleccionado

Código Ruby: discourse/app/models/concerns/reports/posts.rb

Consulta SQL: Dashboard Report - Posts

Emoción de la publicación

Número de publicaciones clasificadas por IA con una de las siguientes emociones: Tristeza, Sorpresa, Miedo, Ira, Alegría, Asco - agrupar por nivel de confianza del autor, en un período determinado.

Código Ruby: discourse-ai/lib/sentiment/entry_point.rb at main · discourse/discourse-ai · GitHub

Consulta SQL: Informe del panel - Emoción de la publicación

Reacciones

Lista de las reacciones más recientes.

Código Ruby: discourse-reactions/plugin.rb at main · discourse/discourse-reactions · GitHub

Consulta SQL: Dashboard Report - Reactions

Inscripciones

Nuevos registros de cuentas para este período.

Código Ruby: discourse/app/models/concerns/reports/signups.rb

Consulta SQL: Dashboard Report - Signups

Tráfico del sitio

Visualizaciones de página para navegadores con sesión iniciada, navegadores anónimos, rastreadores y otro tráfico. Este es el informe de tráfico principal, que reemplaza a los informes heredados de Visualizaciones de página consolidadas.

Código Ruby: discourse/app/models/concerns/reports/site_traffic.rb

Consulta SQL: Informe del panel - Tráfico del sitio

Inicios de sesión sospechosos

Detalles de nuevos inicios de sesión que difieren sospechosamente de los inicios de sesión anteriores.

Código Ruby: discourse/app/models/concerns/reports/suspicious_logins.rb

Consulta SQL: Dashboard Report - Suspicious Logins

Sistema

Número de mensajes personales enviados automáticamente por el Sistema.

Código Ruby: discourse/app/models/concerns/reports/system_private_messages.rb

Consulta SQL: Dashboard Report - System

Tiempo hasta la primera respuesta

Tiempo promedio (en horas) de la primera respuesta a nuevos temas.

Código Ruby: discourse/app/models/concerns/reports/time_to_first_response.rb + discourse/discourse/blob/main/app/models/topic.rb#L1799-L1844

Consulta SQL: Dashboard Report - Time to First Response

Usuarios más ignorados / silenciados

Usuarios que han sido silenciados y/o ignorados por muchos otros usuarios.

Código Ruby: discourse/app/models/concerns/reports/top_ignored_users.rb

Consulta SQL: Dashboard Report - Top Ignored / Muted Users

Temas más referenciados

Temas que han recibido la mayor cantidad de clics de fuentes externas.

Código Ruby: discourse/app/models/concerns/reports/top_referred_topics.rb

Consulta SQL: Dashboard Report - Top Referred Topics

Principales remitentes

Usuarios listados por número de clics en los enlaces que han compartido.

Código Ruby: discourse/app/models/concerns/reports/top_referrers.rb

Consulta SQL: Dashboard Report - Top Referrers

Principales fuentes de tráfico

Fuentes externas que han enlazado a este sitio con mayor frecuencia.

Código Ruby: discourse/app/models/concerns/reports/top_traffic_sources.rb

Consulta SQL: Dashboard Report - Top Traffic Sources

Principales archivos subidos

Lista de todas las cargas por extensión, tamaño de archivo y autor.

Código Ruby: discourse/app/models/concerns/reports/top_uploads.rb

Consulta SQL: Dashboard Report - Top Uploads

Principales usuarios por me gusta recibidos

Los 10 principales usuarios que han recibido me gusta.

Código Ruby: discourse/app/models/concerns/reports/top_users_by_likes_received.rb

Consulta SQL: Dashboard Report - Top Users by Likes Received

Principales usuarios por me gusta recibidos de un usuario con un nivel de confianza inferior

Los 10 principales usuarios de un nivel de confianza superior que han recibido me gusta de personas de un nivel de confianza inferior.

Código Ruby: discourse/app/models/concerns/reports/top_users_by_likes_received_from_inferior_trust_level.rb

Consulta SQL: Dashboard Report - Top Users by Likes Received from a User with a Lower Trust Level

Principales usuarios por me gusta recibidos de una variedad de personas

Los 10 principales usuarios que han recibido me gusta de una amplia variedad de personas.

Código Ruby: discourse/app/models/concerns/reports/top_users_by_likes_received_from_a_variety_of_people.rb

Consulta SQL: Dashboard Report - Top Users by Likes Received From a Variety of People

Temas

Nuevos temas creados durante este período.

Código Ruby: discourse/app/models/concerns/reports/topics.rb

Consulta SQL: Dashboard Report - Topics

Temas sin respuesta

Número de nuevos temas creados que no recibieron respuesta.

Código Ruby: discourse/app/models/concerns/reports/topics_with_no_response.rb

Consulta SQL: Dashboard Report - Topics with No Response

Estadísticas de visualización de temas

Los 100 temas principales por visitas con desgloses de anónimos y usuarios con sesión iniciada, filtrables por categoría.

Código Ruby: discourse/app/models/concerns/reports/topic_view_stats.rb

Consulta SQL: Informe del panel - Estadísticas de visualización de temas

Términos de búsqueda en tendencia

Términos de búsqueda más populares con sus tasas de clics.

Código Ruby: discourse/app/models/concerns/reports/trending_search.rb

Consulta SQL: Dashboard Report - Trending Search Terms

Crecimiento del nivel de confianza

Número de usuarios que aumentaron su Nivel de Confianza durante este período.

El informe de Crecimiento del nivel de confianza extrae datos de la tabla user_histories en la base de datos de Discourse. Específicamente, este informe cuenta el número de veces que se registra una user_histories.action para un aumento en el nivel de confianza de un usuario.

Código Ruby: discourse/app/models/concerns/reports/trust_level_growth.rb

Consulta SQL: Dashboard Report - Trust Level Growth

Políticas no aceptadas

Este informe del panel identifica temas con políticas que no han sido aceptadas por ciertos usuarios.

Código Ruby: discourse-policy/plugin.rb at main · discourse/discourse-policy · GitHub

Consulta SQL: Dashboard Report - Unaccepted Policies

Proporción de banderas de usuario

Lista de usuarios ordenados por la proporción de respuesta del personal a sus banderas (en desacuerdo con de acuerdo).

Código Ruby: discourse/app/models/concerns/reports/user_flagging_ratio.rb

Consulta SQL: Dashboard Report - User Flagging Ratio

Notas de usuario

Lista de las notas de usuario más recientes.

Código Ruby: discourse-user-notes/plugin.rb at main · discourse/discourse-user-notes · GitHub

Consulta SQL: Dashboard Report - User Notes

Visualizaciones de perfil de usuario

Total de nuevas visualizaciones de perfiles de usuario.

Código Ruby: discourse/app/models/concerns/reports/profile_views.rb

Consulta SQL: Dashboard Report - User Profile Views

Visitas de usuario

El número total de visitas de usuarios con sesión iniciada en el foro durante el período de tiempo seleccionado (hoy, ayer, últimos 7 días, etc.).

Una visita de usuario se cuenta cada vez que un usuario único con sesión iniciada visita el sitio, hasta una vez por día. Por ejemplo, si un usuario visitó un sitio todos los días durante una semana, Discourse contaría eso como 7 visitas de usuario.

Código Ruby: discourse/app/models/concerns/reports/visits.rb

Consulta SQL: Dashboard Report - User Visits

Visitas de usuario (móvil)

Número de usuarios únicos con sesión iniciada que visitaron usando un dispositivo móvil.

Código Ruby: discourse/app/models/concerns/reports/mobile_visits.rb

Consulta SQL: Dashboard Report - User Visits

De usuario a usuario (excluyendo respuestas)

Número de mensajes personales iniciados recientemente.

Código Ruby: discourse/app/models/concerns/reports/user_to_user_private_messages.rb

Consulta SQL: Dashboard Report - User-to-User

De usuario a usuario (con respuestas)

Número de todos los mensajes personales y respuestas nuevos.

Código Ruby: discourse/app/models/concerns/reports/user_to_user_private_messages_with_replies.rb

Consulta SQL: Dashboard Report - User-to-User

Usuarios por nivel de confianza

Número de usuarios agrupados por nivel de confianza.

Código Ruby: discourse/app/models/concerns/reports/users_by_trust_level.rb

Consulta SQL: Dashboard Report - Users Per Trust Level

Usuarios por tipo

Número de usuarios agrupados por administrador, moderador, suspendido y silenciado.

Código Ruby: discourse/app/models/concerns/reports/users_by_type.rb

Consulta SQL: Dashboard Report - Users Per Type

Visualizaciones de página de rastreadores web

Total de visualizaciones de página de rastreadores web a lo largo del tiempo.

Código Ruby: discourse/app/models/report.rb

Consulta SQL: Dashboard Report - Web Crawler Pageviews

Agentes de usuario de rastreadores web

Lista de agentes de usuario de rastreadores web, ordenados por visualizaciones de página.

Código Ruby: discourse/app/models/concerns/reports/web_crawlers.rb

Consulta SQL: Dashboard Report - Web Crawler User Agents

18 Me gusta

No veo un enlace a esto en /admin. ¿No estoy leyendo bien? Parece que esto debería ser más fácil de encontrar. Creo que sabía que estos informes estaban aquí, pero busqué y no pude encontrarlos.

Aunque me tomó solo unos minutos encontrarlo, podría ser bueno agregar algo como

3 Me gusta

Sí, podría ser bueno en un mensaje privado al personal para mencionarlos cuando se crea un sitio por primera vez. :thinking:

1 me gusta

:crying_cat_face:

Lo siento. Seguro pensé que lo había visto en alguna parte antes.

Simplemente no puedes hacer que la gente lea cosas. . . . ¿Excepto que podría leer el código fuente para averiguar cómo hacerlo en un plugin?

Pero tal vez actualizar lo anterior a

Creo que eso es lo que realmente me desconcertó. (Pero no, no tengo excusa.)

¡Hice que el tema fuera una wiki, adelante! :+1:

2 Me gusta

Eso no coincide con la interfaz de usuario (la interfaz de usuario usa 20%), ¿cuál debería ser?

2 Me gusta

Buena observación. Se actualizó recientemente al 20%. Haré el cambio en el OP. :slight_smile: :+1:

2 Me gusta

Hola @SaraDev ¿Se puede obtener la salida de este informe con una consulta SQL? ¿Puedes compartirla?
Gracias

1 me gusta

Sí, puedes usar el siguiente informe SQL para las principales fuentes de tráfico:

-- [params]
-- date :start_date = 01/05/2023
-- date :end_date = 03/06/2023

WITH count_links AS (

SELECT COUNT(*) AS clicks,
       ind.name AS domain
FROM incoming_links il
  INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
  INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
  INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
  INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
  AND il.created_at::date BETWEEN :start_date AND :end_date
GROUP BY ind.name
ORDER BY clicks DESC
),

count_topics AS (

SELECT COUNT(DISTINCT p.topic_id) AS topics,
       ind.name AS domain
FROM incoming_links il
INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
  AND il.created_at > (CURRENT_TIMESTAMP - INTERVAL '30 DAYS')
GROUP BY ind.name
)

SELECT cl.domain,
       cl.clicks AS "Clicks",
       ct.topics AS "Topics"
FROM count_links cl
JOIN count_topics ct ON cl.domain = ct.domain
LIMIT 10

Con esta consulta, ten en cuenta que los parámetros de fecha aceptan fechas en el formato día/mes/año.

1 me gusta

Hola @SaraDev, gracias por compartir la consulta.
Una pregunta más general sobre este informe y la tabla incoming_links en realidad: solo representa el tráfico de las páginas de publicaciones y no el tráfico a todas las páginas del foro, ¿verdad?

Contexto: Estoy buscando analizar las tendencias del tráfico general del foro y esperaba obtener el tráfico general por fuentes del informe “Principales fuentes de tráfico”.
Pero mientras que el tráfico general es de ~ 272K en el último mes (usuarios y anónimos), los clics totales en el informe de fuentes de tráfico para el mismo período de tiempo son solo 59K.
Además, veo que usas inner join con las tablas topics y posts, lo que significa que si no hay un post_id adjunto al clic, no lo cuentas.

¿Puedes confirmar mi conclusión y quizás explicar un poco la lógica detrás de la tabla incoming_links?

Hola @SaraDev, ejecuté esta consulta y el resultado no coincide exactamente con el informe de Publicaciones en la pestaña general.
Por ejemplo, para el 30 de noviembre:
Consulta = 112 publicaciones
Informe = 120 publicaciones
¿Puedes comprobar la diferencia?
Gracias

1 me gusta

Solo para que sepas @Yotam_Hagay, aunque Sara es la autora original, la guía es responsabilidad de todos :slight_smile: :discourse: No es necesario una @mención en cada publicación. :slight_smile:

2 Me gusta

Gracias @JammyDodger por la aclaración. ¿Hay alguien más a quien pueda etiquetar o recurrir para obtener una respuesta?

1 me gusta

Los resultados de esta consulta son ligeramente diferentes al informe de Tiempo de respuesta inicial:
El 8 de noviembre, por ejemplo:
Consulta: 93 horas
Informe: 116 horas
¿Alguien puede aconsejarme?

1 me gusta

Creo que algunas de estas pueden llevar tiempo para investigar. Estoy echando un vistazo yo mismo para ver si puedo ver qué está pasando (aunque la brecha entre mis habilidades de SQL y mis habilidades de Ruby es bastante grande :slight_smile:).

Pero sigan enviando los hallazgos, ya que sería genial consolidar toda esta información. :+1:

2 Me gusta

Para el de publicaciones, creo que el informe de existencias también está contando las publicaciones de temas, así como las de usuarios del sistema, pero también solo se dirige a aquellas con post_type 1 (es decir, no susurros, publicaciones de acciones pequeñas o acciones de moderador).

Creo que el SQL se vería más así:

--[params]
-- date :start_date
-- date :end_date

SELECT 
    p.created_at::date AS "Día",
    COUNT(p.id) AS "Recuento"
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
    AND p.deleted_at ISNULL
    AND t.archetype = 'regular'
    AND p.post_type = 1
GROUP BY p.created_at::date
ORDER BY 1

¿Podrías ejecutar eso en tu sitio y ver si coincide?

2 Me gusta

Gracias Jammy, ¡lo revisaré!
Actualmente estoy trabajando en un análisis del tiempo de primera respuesta, así que agradecería que también pudieras echar un vistazo a este.

1 me gusta

Al mirar la versión SQL, creo que le falta AND p.user_id <> t.user_id para excluir las respuestas del OP. Si lo agrego, me da el tiempo preciso entre el OP y la primera respuesta de otra persona:

--[params]
-- date :date_start
-- date :date_end

WITH first_reply AS (
    SELECT 
        p.topic_id, 
        MIN(post_number) post_number, 
        t.created_at
    FROM posts p
    INNER JOIN topics t ON (p.topic_id = t.id)
    WHERE p.deleted_at IS NULL
        AND p.user_id <> t.user_id
        AND p.post_number != 1
        AND p.post_type = 1
        AND p.user_id > 0
        AND t.user_id > 0
        AND t.deleted_at IS NULL
        AND t.archetype = 'regular'
        AND t.created_at::date BETWEEN :date_start AND :date_end
    GROUP BY p.topic_id, t.created_at
    ORDER BY 2 DESC
)

SELECT 
    p.topic_id, 
    fr.created_at::date dt_topic_created,
    (p.created_at - fr.created_at) response_time
FROM posts p
INNER JOIN first_reply fr 
    ON fr.topic_id = p.topic_id 
    AND fr.post_number = p.post_number
    AND p.created_at > fr.created_at
ORDER BY response_time

También creo que el informe de stock está en decimal en lugar de horas y minutos como el SQL. Volveré a intentarlo para que coincida. :+1:


Solo una pequeña actualización para incluir el AVG para que sea más similar a la salida del informe de stock:

--[params]
-- date :date_start
-- date :date_end

WITH first_reply AS (
    SELECT 
        p.topic_id, 
        MIN(post_number) post_number, 
        t.created_at
    FROM posts p
    INNER JOIN topics t ON p.topic_id = t.id
    WHERE p.deleted_at IS NULL
        AND p.user_id <> t.user_id
        AND p.post_type = 1
        AND p.user_id > 0
        AND t.user_id > 0
        AND t.deleted_at IS NULL
        AND t.archetype = 'regular'
        AND t.created_at::date BETWEEN :date_start AND :date_end
    GROUP BY p.topic_id, t.created_at
)

SELECT 
    fr.created_at::date dt_topic_created,
    AVG(p.created_at - fr.created_at) response_time
FROM posts p
INNER JOIN first_reply fr 
    ON fr.topic_id = p.topic_id 
    AND fr.post_number = p.post_number
    AND p.created_at > fr.created_at
GROUP BY fr.created_at::date
ORDER BY response_time

Esto parece coincidir con el informe de stock siempre que se tenga en cuenta que uno está en decimal y el otro en HH:MM. Estoy seguro de que hay una manera de convertir el response_time de SQL a decimal, pero el HH:MM parece una forma más intuitiva de hacerlo. (Creo que también hay algunos criterios adicionales que pueden no ser necesarios, pero también podrían ser una protección contra circunstancias inusuales, así que finalmente he dejado esas partes tal como están hasta que pueda decirlo con seguridad :slight_smile:)

¿Podrías ejecutar este y ver cómo coincide?

4 Me gusta

Sí, ahora suma los números que se muestran en el informe de existencias, ¡gracias!
Solo un comentario:
Encontré que la función AVG a continuación devuelve resultados faltantes en caso de que el tiempo sea > 24h (falta una sección de # de días, supongo).

AVG(p.created_at - fr.created_at)::time response_time

1 me gusta

Ah sí, convertir a time fue una mala elección. :slight_smile: Si quitas ::time, volverá a la versión más precisa (aunque más difícil de leer).

También editaré la de arriba. :+1:

2 Me gusta