Sin lugar a duda este tema de hoy: los Metadata es uno de los más curiosos (e interesantes) que nos podemos encontrar...
Todos tenemos claro el concepto de dato, es la información que vemos reflejada en nuestras fuentes, nuestras tablas.. es algo 'palpable', un valor concreto.
¿Pero sabías que puedes añadir información adicional asociado a esos valores?... esto son los Metadata: un Registro de valores que se conoce como registro de metadatos de un valor.
Este registro de metadatos se puede asociar a cualquier tipo de valor; y el resultado de este tipo de asociación es un nuevo valor con los metadatos especificados.
Por tanto, no nos perdamos... un registro de metadatos sigue siendo un registro normal, y podrá estar compuesto de todos los campos y valores de un registro normal, pero al mismo tiempo contener información extra.
Ten presente, para tu tranquilidad, que la asociación de un registro de metadatos con un valor es "no intrusiva", es decir, no cambia el comportamiento del valor principal en las evaluaciones, excepto obviamente en el de las acciones que inspeccionan dichos registros de metadatos de forma directa y explícita.
Aunque no seamos conscientes, todos los valores tiene un registro de metadatos predeterminado, incluso aunque no se haya asignado ninguno, en estos casos el registro de metadatos por defecto es el vacío (i.e., [] ).
Tres funciones M para trabajar sobre el registro de metadatos son:
- Value.Metadata(value as any) as any
La cual nos devuelve un registro que contiene los metadatos de entrada.
- Value.RemoveMetadata(value as any, optional metaValue as any) as any
La cual elimina el registro de metadatos.
- Value.ReplaceMetadata(value as any, metaValue as any) as any
Que sustituye la información recogida en el registro de metados del valor.
Igualmente importante el operador meta para asociar un registro de metadatos a un valor.
Veamos todo esto con algún ejemplo sencillo...
Desde nuestro editor de consultas de Power Query crearemos una consulta en blanco (que llamaré 'Metadata_Ejem1') y accederemos a ella desde el Editor avanzado, donde escribiremo:
El resultado de la consulta será la lista:
Por otra parte, si hubieramos querido recuperar el valor principal, podríamos haber hecho:
que nos hubiera devuelto el valor en mayúsculas: EXCELFORO
Veamos otro ejemplo...
Definimos un metadato con una dupla de valores: posición y conocimientos
Lo que nos devolverá, sobre la lista de conocimientos, el dato en la posición 2 (en base 0), es decir, 'Power Pivot'.
Otro ejemplo del uso de metadatos para reemplazarlos.
En este caso reemplazaremos el valor asignado al valor 'posición' del registro de metadatos:
Al reemplazarlo por 'posición' = 3 la consulta recuperaría el metadato 'VBA para Excel'
LLamando de nuevo al operador meta podemos incorporar nuevos valores al registro de metadatos, por ejemplo, una 'valoración':
Si necesitáramos visualizar el registro de metadatos completo haríamos:
Y acabamos eliminando metadatos con Value.RemoveMetadata.
Por ejemplo, para eliminar todo el registro de metadatos haríamos:
lo que nos devolvería el vacío, un registro sin valores...
Alternativamente, para eliminar uno de los valores del registro de metadatos podríamos emplear la función ya vista Value.ReplaceMetada. Por ejemplo para quedarnos solo con los valores 'posicon' y 'valoración' haríamos:
Lo que nos deja un registro de metadatos con esos dos valores...
En la siguiente entrada del blog le daremos un uso especial a estos registros de metadatos ;-)
Todos tenemos claro el concepto de dato, es la información que vemos reflejada en nuestras fuentes, nuestras tablas.. es algo 'palpable', un valor concreto.
¿Pero sabías que puedes añadir información adicional asociado a esos valores?... esto son los Metadata: un Registro de valores que se conoce como registro de metadatos de un valor.
Este registro de metadatos se puede asociar a cualquier tipo de valor; y el resultado de este tipo de asociación es un nuevo valor con los metadatos especificados.
Por tanto, no nos perdamos... un registro de metadatos sigue siendo un registro normal, y podrá estar compuesto de todos los campos y valores de un registro normal, pero al mismo tiempo contener información extra.
Ten presente, para tu tranquilidad, que la asociación de un registro de metadatos con un valor es "no intrusiva", es decir, no cambia el comportamiento del valor principal en las evaluaciones, excepto obviamente en el de las acciones que inspeccionan dichos registros de metadatos de forma directa y explícita.
Aunque no seamos conscientes, todos los valores tiene un registro de metadatos predeterminado, incluso aunque no se haya asignado ninguno, en estos casos el registro de metadatos por defecto es el vacío (i.e., [] ).
Tres funciones M para trabajar sobre el registro de metadatos son:
- Value.Metadata(value as any) as any
La cual nos devuelve un registro que contiene los metadatos de entrada.
- Value.RemoveMetadata(value as any, optional metaValue as any) as any
La cual elimina el registro de metadatos.
- Value.ReplaceMetadata(value as any, metaValue as any) as any
Que sustituye la información recogida en el registro de metados del valor.
Igualmente importante el operador meta para asociar un registro de metadatos a un valor.
Veamos todo esto con algún ejemplo sencillo...
Desde nuestro editor de consultas de Power Query crearemos una consulta en blanco (que llamaré 'Metadata_Ejem1') y accederemos a ella desde el Editor avanzado, donde escribiremo:
let md1 = "excelforo" meta [conocimientos={"Excel","Power Query", "Power Pivot","VBA para Excel"}], //para recuperar 'el campo 'conocimientos'... que la hemos creado como una lista dato=Value.Metadata(md1)[conocimientos] in dato
El resultado de la consulta será la lista:
Por otra parte, si hubieramos querido recuperar el valor principal, podríamos haber hecho:
let md1 = "excelforo" meta [conocimientos={"Excel","Power Query", "Power Pivot","VBA para Excel"}], //para recuperar 'el campo 'conocimientos'... que la hemos creado como una lista dato=Value.Metadata(md1)[conocimientos] in Text.Upper(md1)
que nos hubiera devuelto el valor en mayúsculas: EXCELFORO
Veamos otro ejemplo...
Definimos un metadato con una dupla de valores: posición y conocimientos
let md1 = "excelforo" meta [posicion=2 , conocimientos={"Excel","Power Query", "Power Pivot","VBA para Excel"}], dato=Value.Metadata(md1)[conocimientos]{Value.Metadata(md1)[posicion]} in dato
Lo que nos devolverá, sobre la lista de conocimientos, el dato en la posición 2 (en base 0), es decir, 'Power Pivot'.
Otro ejemplo del uso de metadatos para reemplazarlos.
En este caso reemplazaremos el valor asignado al valor 'posición' del registro de metadatos:
let md1 = "excelforo" meta [posicion=2 , conocimientos={"Excel","Power Query", "Power Pivot","VBA para Excel"}], //reemplazamos metadato //provocaría fallo al NO mencionar el campo 'conocimientos' //ReemplazaMD1= Value.ReplaceMetadata(md1, [posicion=3]), //recuperamos el valor del registro de metadato de 'conocimientos' // ReemplazaMD1= Value.ReplaceMetadata(md1, [posicion=3, conocimientos=Value.Metadata(md1)[conocimientos]]), //o también usando el operador de unión/concatenación & // ReemplazaMD1= Value.ReplaceMetadata(md1, [posicion=3] & [conocimientos=Value.Metadata(md1)[conocimientos]]), //o mucho más simple forzando una sobreescritura ReemplazaMD1=md1 meta [posicion=3], dato=Value.Metadata(ReemplazaMD1)[conocimientos]{Value.Metadata(ReemplazaMD1)[posicion]} in dato
Al reemplazarlo por 'posición' = 3 la consulta recuperaría el metadato 'VBA para Excel'
LLamando de nuevo al operador meta podemos incorporar nuevos valores al registro de metadatos, por ejemplo, una 'valoración':
let md1 = "excelforo" meta [posicion=2 , conocimientos={"Excel","Power Query", "Power Pivot","VBA para Excel"}], //añade nuevo metadato nuevo= md1 meta [valoración=10], dato=Value.Metadata(nuevo)[valoración] in dato
Si necesitáramos visualizar el registro de metadatos completo haríamos:
let md1 = "excelforo" meta [posicion=2 , conocimientos={"Excel","Power Query", "Power Pivot","VBA para Excel"}], //añade nuevo metadato nuevo= md1 meta [valoración=10] in Value.Metadata(nuevo)
Y acabamos eliminando metadatos con Value.RemoveMetadata.
Por ejemplo, para eliminar todo el registro de metadatos haríamos:
let md1 = "excelforo" meta [posicion=2 , conocimientos={"Excel","Power Query", "Power Pivot","VBA para Excel"}], //añade nuevo metadato nuevo= md1 meta [valoración=10], //Eliminamos metadatos eliminacion=Value.RemoveMetadata(nuevo) in Value.Metadata(eliminacion)
lo que nos devolvería el vacío, un registro sin valores...
Alternativamente, para eliminar uno de los valores del registro de metadatos podríamos emplear la función ya vista Value.ReplaceMetada. Por ejemplo para quedarnos solo con los valores 'posicon' y 'valoración' haríamos:
let md1 = "excelforo" meta [posicion=2 , conocimientos={"Excel","Power Query", "Power Pivot","VBA para Excel"}], //añade nuevo metadato nuevo= md1 meta [valoración=10], //Eliminamos metadatos eliminacion=Value.ReplaceMetadata(nuevo, [posicion=2, valoración=10]) in Value.Metadata(eliminacion)
Lo que nos deja un registro de metadatos con esos dos valores...
En la siguiente entrada del blog le daremos un uso especial a estos registros de metadatos ;-)
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.