[También se aplica a v8]{class="badge positive" title="También se aplica a Campaign v8"}

Definición de condiciones de filtro defining-filter-conditions

Selección del operador choosing-the-operator

Dentro de las condiciones de filtrado, es necesario vincular dos valores mediante un operador.

A continuación se muestra una lista de los operadores disponibles:

Operador
Objetivo
Ejemplo
Equal to
Devuelve un resultado idéntico a los datos introducidos en la segunda columna Valor.
Apellido (@lastName) igual a “Jones”, solo devuelve como resultado los destinatarios cuyo apellido sea Jones.
Greater than
El resultado es un valor mayor que el valor introducido.
Edad (@age) mayor que 50 devuelve como resultado todos los valores mayores que 50, es decir 51, 52, etc.
Less than
El resultado es un valor menor que el valor introducido.
Fecha de creación (@created) antes de “DaysAgo(100)” devuelve como resultado todos los destinatarios creados hace menos de 100 días.
Greater than or equal to
El resultado son todos los valores iguales o mayores que el valor introducido.
Edad (@age) mayor o igual que “30”, devuelve como resultado todos los destinatarios de 30 años o más.
Less than or equal to
El resultado son todos los valores iguales o inferiores al valor introducido.
Edad (@age) menor o igual que “60”, devuelve como resultado todos los destinatarios de 60 años o menos.
Not equal to
El resultado son todos los valores que no son idénticos al valor ingresado.
Idioma (@language) igual a “inglés”.
Starts with
Devuelve los resultados que comienzan con el valor ingresado.
N.º cuenta (@account) comienza con “32010”.
Does not start with
Devuelve los resultados que no empiezan con el valor introducido.
N.º cuenta (@account) no comienza con “20”.
Contains
Devuelve los resultados que contienen al menos el valor ingresado.
Dominio de correo electrónico (@domain) incluye “mail” devuelve todos los nombres de dominio que contengan “mail”. Por lo tanto, también devuelve el dominio “gmail.com”.
Does not contain
Devuelve los resultados que no contienen el valor introducido.
Dominio de correo electrónico (@domain) no incluye “vo”. En este caso, no devuelve como resultado los nombres de dominio que contengan “vo”. El nombre de dominio “voila.fr” no aparece en los resultados.
Like
Like es muy similar al operador Contains. Permite insertar % wild card character in the value.
Apellido (@lastName) como “Jon%s”. En este caso, el carácter comodín se utiliza para encontrar el nombre “Jones”, en el caso de que el operador haya olvidado la letra que falta entre la “n” y la “s”.
Not like
Es similar a Like . Permite no recuperar el valor introducido. En este caso, el valor introducido debe contener % wild card character.
Apellido (@lastName) como “Smi%h”. En este caso, no devuelve los destinatarios cuyo apellido sea “Smi%h”.
Is empty
En este caso, el resultado que estamos buscando coincide con un valor vacío en la segunda columna Valor.
Móvil (@mobilePhone) está vacío devuelve todos los destinatarios que no tienen un número de móvil.
Is not empty
Funciona de forma inversa al operador Is empty. No es necesario introducir datos en la segunda columna Valor.
Correo electrónico (@email) no está vacío.
Is included in
Devuelve los resultados incluidos entre los valores indicados. Estos valores deben separarse con una coma.
Fecha de nacimiento (@birthDate) incluida en “12/10/1979,12/10/1984”, devuelve como resultado los destinatarios que nacieran entre esas fechas.
Is not included in
Funciona como el operador Is included in. Aquí queremos excluir los destinatarios según los valores ingresados.
Fecha de nacimiento (@birthDate) no incluida en “12/10/1979,12/10/1984”. A diferencia del ejemplo anterior, no se recuperan los destinatarios nacidos entre esas fechas.

Uso de AND, OR, EXCEPT using-and--or--except

Para consultas que utilizan varias condiciones de filtro, debe definir los vínculos entre las condiciones. Hay tres vínculos posibles:

  • And permite combinar dos condiciones de filtrado,
  • Or permite ofrecer una alternativa,
  • Except permite definir una excepción.

Haga clic en And (de forma predeterminada) y seleccione en la lista desplegable.

  • And: añade una condición y activa el sobrefiltrado.

  • Or: añade una condición y activa el sobrefiltrado.

    El siguiente ejemplo permite encontrar destinatarios cuyo dominio de correo electrónico contiene “orange.co.uk” o cuyo código de envío comienza por “NW”.

  • Except: si tiene dos filtros y el primero no devuelve un valor, este tipo de vínculo crea una excepción.

    En el siguiente ejemplo, deseamos devolver los destinatarios cuyo dominio de correo electrónico contiene “orange.co.uk” excepto si el apellido del destinatario es “Smith”.

Este ejemplo muestra un filtro que le permite mostrar: los destinatarios que hablen español, O que son mujeres con teléfono móvil, O los destinatarios sin número de cuenta y cuyo nombre de empresa comienza con la letra “n”.

Prioridad de las condiciones prioritizing-conditions

Esta sección explica cómo priorizar las condiciones gracias a las flechas azules de la barra de herramientas.

  • La flecha que señala a la derecha permite añadir un nivel de paréntesis al filtro.

  • La flecha que señala a la izquierda permite eliminar un nivel de paréntesis seleccionado del filtro.

  • Las flechas verticales permiten mover una condición, cambiando así su secuencia de ejecución.

Este ejemplo muestra cómo utilizar la flecha para eliminar un nivel de paréntesis. Comience desde la siguiente condición de filtrado: City equal to London OR gender equal to male and mobile not indicated OR account # starts with “95” and company name starts with “A”.

Sitúe el cursor en la condición de filtrado Gender (@gender) equal to Male y haga clic en la flecha Remove a parenthesis level.

Ahora la condición Gender (@gender) equal to Male está fuera de su paréntesis. Se ha movido al mismo nivel que la condición “Ciudad igual a Londres”. Estas condiciones se vinculan entre sí (And).

Selección de los datos que desea extraer selecting-data-to-extract

Los campos disponibles varían de una tabla a otra. Todos los campos se almacenan en un nodo principal denominado Main element. En el siguiente ejemplo, los campos disponibles se encuentran en la tabla de destinatarios. Los campos siempre se muestran por orden alfabético.

El campo seleccionado se puede ver en la parte inferior de la ventana. Por ejemplo, el campo Email domain es un Calculated SQL field y su extensión es (@domain).

NOTE
Utilice la herramienta Search para buscar un campo disponible.

Haga doble clic en un campo disponible para añadirlo a las columnas de salida. Al final de la consulta, cada campo seleccionado crea una columna en la ventana Data preview.

Los campos avanzados no se muestran de forma predeterminada. Haga clic en Display advanced fields en la esquina inferior derecha de los campos disponibles para mostrar todo. Haga clic de nuevo para volver a la vista anterior.

Por ejemplo, en la tabla de destinatarios, los campos avanzados son Boolean 1, Boolean 2, Boolean 3, Foreign key of “Folder” link, etc.

El ejemplo siguiente muestra los campos avanzados de la tabla de destinatarios.

Las distintas categorías de campos:

Icono
Descripción
Ejemplos
Campo sencillo
Correo electrónico, sexo, etc.
Clave principal. Este campo SQL es una forma de identificar un registro de una tabla.
Los destinatarios de identificador son claves principales y los identificadores son exclusivos de definición.
Clave externa. Se utiliza como enlace a otra tabla.
Clave externa del destinatario, clave externa del servicio, etc.
Campo calculado. Este tipo de campo se calcula al solicitarlo utilizando los valores de la base de datos.
Edad, dominio de email, etc.
Campo que contiene textos largos.
Comentario, dirección completa, etc.
Campo SQL indexado.
Nombre completo, código ISO, etc.

Enlace a una tabla y elemento de colección:

Icono
Descripción
Ejemplo
Enlaza a una tabla en particular. Estas coinciden con las asociaciones de tipo 1-1. Una aparición de la tabla de origen puede coincidir con una única aparición de la tabla de destino. Por ejemplo, solo se puede vincular un destinatario a un país.
Carpeta, estado, país, etc.
Elemento de colección en una tabla específica. Estos coinciden con asociaciones de tipo 1-N. Una tabla de origen puede coincidir con varias apariciones de la tabla de destino, pero una aparición de la tabla de destino solo puede coincidir con una aparición de la tabla de origen. Por ejemplo, un destinatario puede suscribirse a “n” letras de suscripción.
Suscripciones, listas, registros de exclusión, etc.
NOTE
  • Utilice el botón Add (encima de la barra de iconos laterales) para añadir una columna de salida en la que deseamos editar la expresión. Para obtener más información sobre cómo editar una expresión, consulte esta sección.
  • Elimine una columna de salida haciendo clic en la “x” roja (Eliminar).
  • Cambie el orden de las columnas de salida mediante las flechas.
  • La Distribution of values sirve para ver la distribución de los valores del campo seleccionado (por ejemplo, las distribuciones vinculadas a las ciudades de los destinatarios, los lenguajes de los destinatarios, etc.).

Creación de campos calculados creating-calculated-fields

Si es necesario, agregue una columna durante el formato de datos. Un campo calculado añade una columna a la sección de previsualización de datos. Haga clic Add a calculated field.

Existen cuatro tipos de campos calculados:

  • Fixed string: permite añadir una cadena de caracteres.

  • String with JavaScript tags: el valor del campo calculado combina una cadena de caracteres y directivas de JavaScript.

  • JavaScript expression: el valor del campo calculado es el resultado de una evaluación de función de JavaScript. Se puede escribir el valor devuelto (número, fecha, etc.).

  • Enumerations: este tipo de campo permite utilizar o modificar el contenido de una de las columnas de salida en una nueva columna.

    Es posible utilizar el valor de origen de una columna y asignarle un valor de destino. Este valor de destino se muestra en la nueva columna de salida.

    Puede encontrar un ejemplo de adición del tipo de campo calculado Enumerations si consulta esta sección.

    El campo calculado de tipo Enumerations puede incluir 4 condiciones:

    • Keep the source value restaura el valor de origen en el destino sin cambiarlo.
    • Use the following value permite introducir un valor de destino predeterminado para valores de origen no definidos.
    • Generate a warning and continue advierte al usuario de que el valor de origen no puede modificarse.
    • Generate an error and reject the line evita el cálculo e importación de la línea.

Haga clic en Detail of calculated field para ver los detalles del campo insertado.

Para eliminar este campo calculado, haga clic en Remove the calculated field.

Expresiones de compilación building-expressions

La herramienta de edición de expresiones permite calcular acumulaciones, generar funciones o editar una fórmula con una expresión.

El ejemplo siguiente muestra cómo ejecutar un recuento en una clave principal.

Siga estos pasos:

  1. Haga clic Add en la Data to extract ventana. En la ventana Formula type, seleccione un tipo de fórmula para introducir la expresión.

    Hay varios tipos de fórmulas disponibles: Field only, Aggregate, Expression.

    Seleccione Process on an aggregate function y Count. Haga clic en Next.

  2. La clave principal se calcula.

A continuación, se muestra una vista detallada de las opciones disponibles en la ventana Formula types:

  1. Field only permite volver a la ventana Field to select.

  2. Aggregate (Process on an aggregate function). A continuación se muestran algunos ejemplos de uso de acumulaciones:

    • Count permite ejecutar un recuento de claves principales.

    • Sum permite añadir todas las compras realizadas por un cliente durante un año.

    • Maximum value permite encontrar los clientes que han adquirido los productos más “n”.

    • Minimum value permite revisar los clientes y encontrar los que se han suscrito a una oferta más recientemente.

    • Average. Esta función permite calcular la edad promedio de los destinatarios.

      La casilla Distinct permite recuperar valores únicos y distintos de cero de una columna. Por ejemplo, puede recuperar todos los registros de seguimiento de un destinatario y estos registros de seguimiento se cambian al valor 1, ya que todos afectan al mismo destinatario.

  3. Expression abre la ventana Edit the expression. Esto permite detectar números de teléfono con demasiadas cifras, probablemente como errores de entrada.

    Para obtener una lista de todas las funciones disponibles, consulte Lista de funciones.

Lista de funciones list-of-functions

Si se elige una fórmula de tipo Expression, se accede a la ventana "editar la expresión". Se pueden asociar varias categorías de funciones a los campos disponibles: Aggregates,String, Date, Numerical, Currency, Geomarketing, Windowing function y Others.

El editor de expresiones tiene este aspecto:

Permite seleccionar campos en las tablas de la base de datos y añadir funciones avanzadas. Estas son las funciones disponibles:

Acumulados

Nombre
Descripción
Syntax
Avg
Devuelve el promedio de una columna de tipo numérico
Avg(<value>)
Recuento
Cuenta los valores no nulos de una columna
Count(<value>)
CountAll
Cuenta los valores devueltos (todos los campos)
CountAll()
Countdistinct
Cuenta los distintos valores no nulos de una columna
Countdistinct(<value>)
Max
Devuelve el valor máximo de una columna numérica, cadena o tipo de fecha
Max(<value>)
Min
Devuelve el valor mínimo de un número, una cadena o una columna de tipo de fecha
Min(<value>)
StdDev
Devuelve la desviación estándar de una columna de número, cadena o fecha.
StdDev(<value>)
Sum
Devuelve la suma de los valores de una columna de número, cadena o fecha.
Sum(<value>)

Cadena

Nombre
Descripción
Syntax
AllNonNull2
Indica si todos los parámetros no son nulos y no están vacíos.
AllNonNull2(<string>, <string>)
AllNonNull3
Indica si todos los parámetros no son nulos y no están vacíos.
AllNonNull3(<string>, <string>, <string>)
Ascii
Devuelve el valor ASCII del primer carácter de la cadena.
Ascii(<string>)
Char
Devuelve el carácter correspondiente al código ASCII “n”.
Char(<number>)
Charindex
Devuelve la posición de la cadena 2 en la cadena 1.
Charindex(<string>, <string>)
GetLine
Muestra la línea nth (de 1 a n) de la cadena.
GetLine(<string>)
IfEquals
Devuelve el tercer parámetro si los dos primeros parámetros son iguales. Si no es así, devuelve el último parámetro
IfEquals(<string>, <string>, <string>, <string>)
IsMemoNull
Indica si la nota transferida como parámetro es nula
IsMemoNull(<memo>)
JuxtWords
Concatena las cadenas transferidas como parámetros. Añade espacios entre las cadenas si es necesario.
JuxtWords(<string>, <string>)
JuxtWords3
Concatena las cadenas transferidas como parámetros. Añade espacios entre las cadenas si es necesario
JuxtWords3(<string>, <string>, <string>)
LPad
Devuelve la cadena completa a la izquierda
LPad(<string>, <number>, <character>)
Left
Devuelve los primeros “n” caracteres de la cadena
Left(<string>, <number>)
Length
Devuelve la longitud de la cadena
Length(<string>)
Lower
Devuelve la cadena en minúscula
Lower(<string>)
Ltrim
Elimina los espacios a la izquierda de la cadena
Ltrim(<string>)
Md5Digest
Devuelve una representación hexadecimal de la clave MD5 de una cadena
Md5Digest(<string>)
MemoContains
Especifica si la nota contiene la cadena transferida como parámetro
MemoContains(<memo>, <cadena>)
RPad
Devuelve la cadena completa a la derecha
RPad(<string>, <number>, <character>)
Right
Devuelve los últimos “n” caracteres de la cadena
Right(<cadena>)
Rtrim
Elimina los espacios a la derecha de la cadena
Rtrim(<string>)
Smart
Devuelve la cadena con la primera letra de cada palabra en mayúscula
Smart(<cadena>)
Substring
Extrae la subcadena que comienza en el carácter “n1” de la cadena y de longitud “n2”
Substring(<string>, <offset>, <length>)
ToString
Convierte el número en una cadena
ToString(<number>, <number>)
Upper
Devuelve la cadena en mayúsculas
Upper(<cadena>)
VirtualLink
Devuelve la clave externa de un vínculo transferido como parámetro si los otros dos parámetros son iguales
VirtualLink(<número>, <número>, <número>)
VirtualLinkStr
Devuelve la clave externa (texto) de un enlace transferido como parámetro si los otros dos parámetros son iguales
VirtualLinkStr(<string>, <number>, <number>)
dataLength
Devuelve el tamaño de la cadena
dataLength(<string>)

Fecha

Nombre
Descripción
Syntax
AddDays
Agrega un número de días a una fecha
AddDays(<fecha>, <número>)
AddHours
Agrega un número de horas a una fecha
AddHours(<fecha>, <número>)
AddMinutes
Añade un número de minutos a una fecha
AddMinutes(<fecha>, <número>)
AddMonths
Añade un número de meses a una fecha
AddMonths(<fecha>, <número>)
AddSeconds
Añade un número de segundos a una fecha
AddSeconds(<fecha>, <número>)
AddYears
Agrega un número de años a una fecha
AddYears(<fecha>, <número>)
DateOnly
Devuelve solo la fecha (con hora 00:00)*
DateOnly(<date>)
Day
Devuelve el número que representa el día de la fecha.
Day(<fecha>)
DayOfYear
Devuelve el número de día del año de la fecha
DayOfYear(<date>)
DaysAgo
Devuelve la fecha correspondiente a la fecha actual menos “n” días
DaysAgo(<number>)
DaysAgoInt
Devuelve la fecha (entero aaaammdd) correspondiente a la fecha actual menos “n” días
DaysAgoInt(<number>)
DaysDiff
Número de días entre dos fechas
DaysDiff(<fecha de finalización>, <fecha de inicio>)
DaysOld
Devuelve la edad en días de una fecha
DaysOld(<fecha>)
GetDate
Devuelve la fecha del sistema actual del servidor
GetDate()
Hour
Devuelve la hora de la fecha
Hour(<fecha>)
HoursDiff
Devuelve el número de horas entre dos fechas
HoursDiff(<end date>, <start date>)
Minute
Devuelve los minutos de la fecha
Minute(<fecha>)
MinutesDiff
Devuelve el número de minutos entre dos fechas
MinutesDiff(<fecha de finalización>, <fecha de inicio>)
Month
Devuelve el número que representa el mes de la fecha
Month(<fecha>)
MonthsAgo
Devuelve la fecha correspondiente a la fecha actual menos n meses
MonthsAgo(<número>)
MonthsDiff
Devuelve el número de meses entre dos fechas
MonthsDiff(<fecha de finalización>, <fecha de inicio>)
MonthsOld
Devuelve la edad en meses de una fecha
MonthsOld(<fecha>)
Second
Devuelve los segundos de la fecha
Second(<date>)
SecondsDiff
Devuelve el número de segundos entre dos fechas
SecondsDiff(<fecha de finalización>, <fecha de inicio>)
SubDays
Resta un número de días a partir de una fecha
SubDays(<fecha>, <número>)
SubHours
Resta un número de horas a partir de una fecha
SubHours(<fecha>, <número>)
SubMinutes
Resta un número de minutos desde una fecha
SubMinutes(<fecha>, <número>)
SubMonths
Resta un número de meses desde una fecha
SubMonths(<fecha>, <número>)
SubSeconds
Resta un número de segundos desde una fecha
SubSeconds(<fecha>, <número>)
SubYears
Resta un número de años a partir de una fecha
SubYears(<fecha>, <número>)
ToDate
Convierte una fecha y hora como fecha
ToDate(<fecha + hora>)
ToDateTime
Convierte una cadena en una fecha + hora.
ToDateTime(<string>)
TruncDate
Redondea una fecha y hora hacia el segundo más cercano
TruncDate(@lastModified, <número de segundos>)
TruncDateTZ
Redondea una fecha y hora con una precisión determinada expresada en segundos
TruncDateTZ(<fecha>, <número de segundos>, <zona horaria>)
TruncQuarter
Redondea una fecha al trimestre
TruncQuarter(<fecha>)
TruncTime
Redondea la parte de tiempo hasta el segundo más cercano
TruncTim(e<date>, <number of seconds>)
TruncWeek
Redondea una fecha a la semana
TruncWeek(<fecha>)
TruncYear
Redondea una fecha y hora al 1 de enero del año
TruncYear(<date>)
TruncWeek
Devuelve el número que representa el día de la semana de la fecha
WeekDay(<fecha>)
Year
Devuelve el número que representa el año de la fecha
Year(<fecha>)
YearAndMonth
Devuelve el número que representa el año y el mes de la fecha
YearAndMonth(<fecha>)
YearsDiff
Devuelve el número de años entre las dos fechas
YearsDiff(<fecha de finalización>, <fecha de inicio>)
YearsOld
Devuelve la edad en años de una fecha
YearsOld(<date>)
NOTE
Tenga en cuenta que la función Dateonly tiene en cuenta la zona horaria del servidor, no la del operador.

Numérico

Nombre
Descripción
Syntax
Abs
Devuelve el valor absoluto de un número
Abs(<número>)
Ceil
Devuelve el menor entero que sea mayor o igual que un número
Ceil(<número>)
Floor
Devuelve el mayor entero que sea mayor o igual que un número
Floor(<number>)
Greatest
Devuelve el número mayor de dos números
Greatest(<número 1>, <número 2>)
Least
Devuelve el número menor de dos números
Least(<número 1>, <número 2>)
Mod
Devuelve el resto de la división del entero “n1” entre “n2”
Mod(<number 1>, <number 2>)
Percent
Devuelve la proporción de dos números expresado como un porcentaje
Percent(<número 1>, <número 2>)
Aleatorio
Devuelve un valor aleatorio
Aleatorio()
Round
Redondea un número a “n” decimales
Redondeo(<número>, <número de decimales>)
Sign
Devuelve el signo del número
Sign(<número>)
ToDouble
Convierte un entero en flotante
ToDouble(<número>)
ToInt64
Convierte un flotante en un entero de 64 bits
ToInt64(<número>)
ToInteger
Convierte un flotante en un entero
ToInteger(<número>)
Trunc
Trunca decimales de “n1” a “n2”
Trunc(<n1>, <n2>)
  1. Moneda
Nombre
Descripción
Syntax
ConvertCurrency
Convierte una cantidad de una moneda de origen en una cantidad de una moneda de destino
ConvertCurrency(<amount>, <source currency>, <target currency>, <conversion date>)
FormatCurrency
Da formato a la cantidad mostrada según la configuración de moneda seleccionada
FormatCurrency(<amount>, <currency>)

Geomarketing

Nombre
Descripción
Syntax
Distance
Devuelve la distancia entre dos puntos definidos por su longitud y latitud, expresada en grados
Distance(<Longitude A>, <Latitude A>, <Longitude B>, <Latitude B>)

Otros

Nombre
Descripción
Syntax
Case
Devuelve el valor 1 si la condición es verdadera. Si no es así, devuelve el valor 2.
Case(When(<condition>, <value 1>), Else(<value 2>))
ClearBit
Elimina el indicador del valor
ClearBit(<identificador>, <indicador>)
Coalesce
Devuelve el valor 2 si el valor 1 es cero o nulo, de lo contrario devuelve el valor 1
Coalesce(<valor 1>, <valor 2>)
Decode
Devuelve el valor 3 si el valor 1 = valor 2. Si no devuelve el valor 4.
Decode(<value 1>, <value 2>, <value 3>, <value 4>)
Else
Devuelve el valor 1 (solo puede utilizarse como parámetro de la función case)
Else(<value 1>, <value 2>)
GetEmailDomain
Extrae el dominio de una dirección de correo electrónico
GetEmailDomain(<valor>)
GetMirrorURL
Recupera la URL del servidor de la página espejo
GetMirrorURL(<valor>)
Iif
Devuelve el valor 1 si la expresión es verdadera. Si no es así, devuelve el valor 2
Iif(<condition>, <value 1>, <value 2>)
IsBitSet
Indica si el indicador se encuentra en el valor
IsBitSet(<identificador>, <indicador>)
IsEmptyString
Devuelve el valor 2 si la cadena 1 está vacía; en caso contrario, devuelve el valor 3
IsEmptyString(<value 1>, <value 2>, <value 3>)
NoNull
Devuelve la cadena vacía si el argumento es NULL
NoNull(<valor>)
RowId
Devuelve el número de línea
RowId
SetBit
Fuerza la marca en el valor
SetBit(<identificador>, <indicador>)
ToBoolean
Convierte un número en Boolean
ToBoolean(<número>)
When
Devuelve el valor 1 si la expresión es verdadera. Si no es así, devuelve el valor 2 (solo puede utilizarse como parámetro de la función case)
When(<condition>, <value 1>)

Funciones de ventana

Nombre
Descripción
Syntax
Desc
Aplica un orden descendente
Desc(<valor 1>)
OrderBy
Ordena el resultado dentro de la partición
OrderBy(<valor 1>)
PartitionBy
Particiona el resultado de una consulta en una tabla
PartitionBy(<valor 1>)
RowNum
Genera un número de línea basado en la partición de tabla y en una secuencia de ordenación.
RowNum(PartitionBy(<value 1>), OrderBy(<value 1>))
recommendation-more-help
601d79c3-e613-4db3-889a-ae959cd9e3e1