Funciones MEDIAN() y PERCENTILE()
- En el modo Live, las funciones MEDIAN() y PERCENTILE() (a partir de la versión v0.1.3 del conector) usan la función quantile()() de ClickHouse, lo que acelera significativamente el cálculo, pero utiliza muestreo. Si quieres obtener resultados exactos, usa las funciones
MEDIAN_EXACT()yPERCENTILE_EXACT()(basadas en quantileExact()()). - En el modo Extract no puedes usar MEDIAN_EXACT() ni PERCENTILE_EXACT() porque MEDIAN() y PERCENTILE() siempre devuelven resultados exactos (aunque son lentas).
Funciones adicionales para campos calculados en modo Live
ClickHouse tiene una enorme cantidad de funciones que pueden usarse para el análisis de datos, muchas más de las que admite Tableau. Para mayor comodidad de los usuarios, hemos añadido nuevas funciones que pueden utilizarse en modo Live al crear campos calculados. Por desgracia, no es posible añadir descripciones de estas funciones en la interfaz de Tableau, así que las incluiremos aquí mismo.
-IfCombinador de agregación (añadido en v0.2.3) - permite aplicar filtros a nivel de fila directamente en el cálculo de agregación. Se han añadido las funcionesSUM_IF(), AVG_IF(), COUNT_IF(), MIN_IF() & MAX_IF().BAR([my_int], [min_val_int], [max_val_int], [bar_string_length_int])(añadido en la versión 0.2.1) — ¡Olvídate de los aburridos gráficos de barras! Usa en su lugar la funciónBAR()(equivalente abar()en ClickHouse). Por ejemplo, este campo calculado devuelve unas barras muy vistosas como String:BAR([my_int], [min_val_int], [max_val_int], [bar_string_length_int]) + " " + FORMAT_READABLE_QUANTITY([my_int])== BAR() == ██████████████████▊ 327.06 million █████ 88.02 million ███████████████ 259.37 millionCOUNTD_UNIQ([my_field])(añadida en la v0.2.0) — Calcula el número aproximado de valores distintos del argumento. Equivale a uniq(). Es mucho más rápida queCOUNTD().DATE_BIN('day', 10, [my_datetime_or_date])(añadido en v0.2.1) — equivalente atoStartOfInterval()en ClickHouse. Redondea una fecha o fecha y hora hacia abajo al intervalo indicado, por ejemplo:== my_datetime_or_date == | == DATE_BIN('day', 10, [my_datetime_or_date]) == 28.07.2004 06:54:50 | 21.07.2004 00:00:00 17.07.2004 14:01:56 | 11.07.2004 00:00:00 14.07.2004 07:43:00 | 11.07.2004 00:00:00FORMAT_READABLE_QUANTITY([my_integer])(añadido en la v0.2.1) — Devuelve un número redondeado con un sufijo (mil, millón, mil millones, etc.) como una cadena. Resulta útil para que las personas puedan leer números grandes más fácilmente. Equivalente aformatReadableQuantity().FORMAT_READABLE_TIMEDELTA([my_integer_timedelta_sec], [optional_max_unit])(añadido en la v0.2.1) — Acepta el delta de tiempo en segundos. Devuelve un delta de tiempo como cadena con (año, mes, día, hora, minuto, segundo).optional_max_unites la unidad máxima que se mostrará. Valores aceptados:seconds,minutes,hours,days,months,years. Equivalente aformatReadableTimeDelta().GET_SETTING([my_setting_name])(añadido en la v0.2.1) — Devuelve el valor actual de una opción de configuración personalizada. Equivale agetSetting().HEX([my_string])(añadido en v0.2.1) — Devuelve una cadena con la representación hexadecimal del argumento. Equivale ahex().KURTOSIS([my_number])— Calcula la curtosis muestral de una serie. Equivale akurtSamp().KURTOSISP([my_number])— Calcula la curtosis de una serie. Equivale akurtPop().MEDIAN_EXACT([my_number])(añadido en la v0.1.3) — Calcula exactamente la mediana de una secuencia de datos numéricos. Equivale aquantileExact(0.5)(...).MOD([my_number_1], [my_number_2])— Calcula el resto de una división. Si los argumentos son números de coma flotante, primero se convierten en enteros descartando la parte decimal. Equivale amodulo().PERCENTILE_EXACT([my_number], [level_float])(añadido en la v0.1.3) — Calcula con exactitud el percentil de una secuencia de datos numéricos. El rango recomendado para el nivel es [0.01, 0.99]. Equivalente aquantileExact()().PROPER([my_string])(añadido en v0.2.5) - Convierte una cadena de texto de modo que la primera letra de cada palabra quede en mayúscula y las restantes, en minúscula. Los espacios y los caracteres no alfanuméricos, como los signos de puntuación, también actúan como separadores. Por ejemplo:PROPER("PRODUCT name") => "Product Name"PROPER("darcy-mae") => "Darcy-Mae"RAND()(añadido en v0.2.1) — devuelve un número entero (UInt32), por ejemplo3446222955. Es equivalente arand().RANDOM()(añadida en v0.2.1) — función no oficial de TableauRANDOM(), que devuelve un número de coma flotante entre 0 y 1.RAND_CONSTANT([optional_field])(añadido en v0.2.1) — Genera una columna constante con un valor aleatorio. Algo así como{RAND()}Fixed LOD, pero más rápido. Equivalente arandConstant().REAL([my_number])— Convierte el campo en un valor de coma flotante (Float64). Más detallesaquí.SHA256([my_string])(añadido en la v0.2.1) — Calcula el hash SHA-256 de una cadena y devuelve el conjunto de bytes resultante como una cadena (FixedString). Resulta conveniente usarlo con la funciónHEX(), por ejemplo,HEX(SHA256([my_string])). Equivalente aSHA256().SKEWNESS([my_number])— Calcula el coeficiente de asimetría muestral de una secuencia. Equivale askewSamp().SKEWNESSP([my_number])— Calcula la asimetría de una serie de valores. Equivalente askewPop().TO_TYPE_NAME([field])(añadido en v0.2.1) — Devuelve una cadena que contiene el nombre del tipo de ClickHouse del argumento pasado. Equivalente atoTypeName().TRUNC([my_float])— Es igual que la funciónFLOOR([my_float]). Equivale atrunc().UNHEX([my_string])(añadida en la v0.2.1) — Realiza la operación inversa aHEX(). Equivalente aunhex().