SUBSTITUTEWITHINDEX

La función SUBSTITUTEWITHINDEX devuelve teóricamente el resultado de un semi-join entre dos tablas realizado usando los campos comunes a ambas que tengan el mismo tipo (véase descripción de un semi-join más adelante) en el que los campos comunes de la tabla izquierda se sustituyen por una única columna que contiene un índice a la fila de la tabla de la derecha con la que se ha encontrado el "match".

Esto supone que, en teoría, el resultado de la función SUBSTITUTEWITHINDEX debería estar formado por todas las columnas de la tabla de la izquierda que no se encuentren en la tabla de la derecha (es decir, las columnas no comunes) más una adicional conteniendo el índice correspondiente a cada fila.

Sin embargo, y tal y como se verá en un ejemplo más adelante, la función solo devuelve el campo conteniendo el índice.

Sintaxis

SUBSTITUTEWITHINDEX(
    table,
    indexColumnName,
    indexColumnsTable,
    [orderBy_expression, [order][, orderBy_expression, [order]]...]
)

Parámetros
  • table: Tabla izquierda cuyas columnas no comunes a la tabla derecha se van a devolver junto al campo índice.
  • indexColumnName: Nombre del campo que contendrá el índice.
  • indexColumnsTable: Tabla derecha que determinará qué filas de la tabla izquierda serán incluidas en el resultado (aquellas con los mismos valores en los campos comunes).
  • orderBy_expression: Expresión que determinará el orden a aplicar al resultado.
  • order: ASC o DESC, orden a aplicar.
Valor devuelto

La función SUBSTITUTEWITHINDEX devuelve una tabla.

Información adicional

Un semi-join es una combinación entre una tabla "izquierda" y una tabla "derecha" en la que solo se devuelven las filas de una de las tablas -por ejemplo de la tabla izquierda- para las que hay una o más filas en la tabla derecha con los mismos valores en los campos comunes a ambas. Esto tiene dos implicaciones:

  1. Las filas de la tabla izquierda se incluyen en el resultado solo si hay alguna fila en la tabla derecha con los mismos valores en los campos comunes.
  2. Las filas de la tabla izquierda se incluyen en el resultado como mucho una vez, aun cuando haya más de una fila en la tabla derecha con los mismos valores en los campos comunes.

A pesar de los campos de ordenación disponibles como argumentos en la función, según la documentación de Microsoft, la función no garantiza el orden del resultado.

Ejemplos

Supongamos que tenemos la siguiente tabla de productos, precios y cantidades:

Tabla izquierda

...y la siguiente tabla de productos y sus costes:

Tabla derecha

Comprobamos que hay tres productos comunes (B, C y D), por lo que el resultado de la función deberá devolver tres filas: las de la tabla de la izquierda (sea cual sea la escogida) para las que hay una fila equivalente en la otra tabla (según los campos comunes: "Producto" en nuestro caso).

Si aplicamos la función considerando como tabla izquierda la de precios y como tabla derecha la de costes, teniendo en cuenta que la única columna común es, como se ha comentado, Producto, el resultado de la función SUBSTITUTEWITHINDEX debería incluir los campos Precio, Cantidad (columnas de la tabla izquierda no comunes a la tabla derecha) y el campo índice a crear. Veámoslo:

Tabla = SUBSTITUTEWITHINDEX(
    Precio,
    "Index",
    Coste,
    Coste[Producto], ASC)

Tabla resultado

Comprobamos que la función únicamente devuelve los índices a la tabla de la derecha: índices 0, 1 y 2 correspondientes a las tres primeras filas de dicha tabla, únicas filas con un nombre de producto que también existe en la tabla izquierda.

Categoría
Filtro
Enviado por admin el Mié, 17/07/2019 - 20:09