En este artículo comprobaremos como listar y calcular medidas usando Semantic Link de Microsoft Fabric. Para poder conseguirlo utilizaremos un Notebook con lenguaje PySpark (Python) junto a un entorno con las librerías configuradas donde nos conectaremos a un modelo semántico y seremos capaces de listar todas las medidas, ver su expresión, comprobar si esta oculto o incluso calcular las medidas en función de filtros o agrupaciones.
Especificaciones del entorno
- Windows 11
- Servicio de Microsoft Fabric
Requisitos previos
Antes de continuar comprueba que tienes configurados los siguientes requisitos previos:
Listar modelos semánticos
Preparando el Notebook
Crea un nuevo Notebook en tu área de trabajo y escoge el entorno que tenga configurada la Liberia semantic-link
Te puede interesar…
Si no quieres crear un entorno con las bibliotecas ejecuta este código en un primer bloque antes de continuar: %pip install semantic-link
Importar librería
Crea un bloque e importa Fabric Semantic Link
import sempy.fabric as fabric
Lenguaje del código: JavaScript (javascript)
Seleccionar área de trabajo
En un nuevo bloque escribe el siguiente código para listar todos los modelos semánticos del área que especifiques. Recuerda cambiar el ID del área de trabajo por el tuyo, después, ejecuta todos los bloques. Como resultado tendrás una lista de todos los modelos semánticos del área especificada mostrando su nombre, ID, cuando se creo y la fecha de ultima actualización.
#listar todos los modelos semánticos de un área de trabajo
_idArea = "1b05dc84-e477-4d6c-8410-38a2b2b5cbdd" #cambia aquí el ID de tu área de trabajo
_fabricModeloSemantico = fabric.list_datasets(_idArea)
# mostrar modelos semánticos
_fabricModeloSemantico
Lenguaje del código: PHP (php)
Trabajando con medidas
Ahora que ya estamos conectados a un área de trabajo y hemos comprobado los modelos semánticos que tenemos debemos seleccionar uno y empezar a trabajar con las medidas.
Listar medidas
En este otro bloque establecemos en la variable _nombreModeloSemantico el nombre del modelo semántico a consultar y, además, le asignamos a la variable _fabricMedidas el listado de las medidas del modelo seleccionado, por último, las mostramos.
# selecciona el modelo semántico y obtén las medidas
_nombreModeloSemantico = "MiguelTroyano.com - Store Sales" #cambia aquí el nombre de tu modelo semantico
_fabricMedidas = fabric.list_measures(_nombreModeloSemantico)
# mostrar medidas
_fabricMedidas
Lenguaje del código: PHP (php)
Al ejecutar el código anterior observaras como nos muestra todas las medidas del modelo semántico junto a su tabla, su expresión, si esta oculta o no y otra serie de características.
Evaluar medidas
Ahora imagina que quieres ver el resultado de la medida TotalSalesTY. Para conseguirlo escribimos el siguiente código:
_fabricEvaluarMedida = fabric.evaluate_measure(_nombreModeloSemantico, measure="TotalSalesTY")
# mostrar resultado
_fabricEvaluarMedida
Lenguaje del código: PHP (php)
Evaluar medida agrupando
Siguiendo el ejemplo anterior, ahora queremos ver el resultado de la medida TotalSalesTY pero agrupado por el nombre de la tienda:
_fabricEvaluarMedidaAgrupada = fabric.evaluate_measure(_nombreModeloSemantico, \
measure="TotalSalesTY", groupby_columns=["Store[Name]"])
# mostrar resultado
_fabricEvaluarMedidaAgrupada
Lenguaje del código: PHP (php)
Evaluar medida agrupando y filtrando
También es posible que además de agrupar quieras filtrar la información. En este ejemplo calculamos la medida TotalSalesTY agrupado por el nombre de la tienda (Store[Name]) y filtrando por el tipo de tienda y el mes fiscal:
_fabricEvaluarMedidaAgrupadaFiltrada= fabric.evaluate_measure( \
_nombreModeloSemantico, \
measure="TotalSalesTY", \
groupby_columns=["Store[Name]"], \
filters={"Store[Store Type]": ["New Store", "Same Store"], "Time[FiscalMonth]": ["Jan"]})
# mostrar resultado
_fabricEvaluarMedidaAgrupadaFiltrada
Lenguaje del código: PHP (php)
Evaluar medida agrupando por N tablas
En este otro ejemplo puedes comprobar como hemos agrupado por dos columnas de dos tablas diferentes:
_fabricEvaluarMedidaAgrupadaNtablas = fabric.evaluate_measure( \
_nombreModeloSemantico, \
measure="TotalSalesTY", \
groupby_columns=["Store[Store Type]", "Time[FiscalMonth]"])
# mostrar resultado
_fabricEvaluarMedidaAgrupadaNtablas
Lenguaje del código: PHP (php)
Evaluar N medidas agrupando por N tablas
Un paso más allá sería evaluar varias medidas y agrupando por varias tablas como el siguiente ejemplo:
_fabricEvaluarMedidaAgrupadaNtablas = fabric.evaluate_measure( \
_nombreModeloSemantico, \
measure="TotalSalesTY", \
groupby_columns=["Store[Store Type]", "Time[FiscalMonth]"])
# mostrar resultado
_fabricEvaluarMedidaAgrupadaNtablas
Lenguaje del código: PHP (php)
Usar el conector XMLA de Power BI
El cliente del modelo semántico predeterminado es API REST de Power BI. Si tienes algún problema al ejecutar consultas con este cliente, es posible cambiar a la interfaz XMLA de Power BI mediante use_xmla=True. Los parámetros de SemPy siguen siendo los mismos para el cálculo de medidas con XMLA.
Un ejemplo de evaluar varias medidas agrupando por varias columnas usando el conector XMLA es el siguiente:
_fabricEvaluarNMedidasNGruposXMLA = fabric.evaluate_measure( \
_nombreModeloSemantico, \
measure=["TotalSales", "TotalSalesTY"], \
groupby_columns=["Store[Store Type]", "Time[FiscalMonth]"] \
, use_xmla=True)
# mostrar resultado
_fabricEvaluarNMedidasNGruposXMLA
Lenguaje del código: PHP (php)
Código completo
import sempy.fabric as fabric
#listar todos los modelos semánticos de un área de trabajo
_idArea = "1b05dc84-e477-4d6c-8410-38a2b2b5cbdd" #cambia aquí el ID de tu área de trabajo
_fabricModeloSemantico = fabric.list_datasets(_idArea)
# mostrar modelo semánticos
_fabricModeloSemantico
# selecciona el modelo semántico y obtén las medidas
_nombreModeloSemantico = "MiguelTroyano.com - Store Sales" #cambia aqui el nombre de tu modelo semantico
_fabricMedidas = fabric.list_measures(_nombreModeloSemantico)
# mostrar medidas
_fabricMedidas
# selecciona el modelo semántico y evalúa la medida
_fabricEvaluarMedida = fabric.evaluate_measure(_nombreModeloSemantico, measure="TotalSalesTY")
# mostrar resultado
_fabricEvaluarMedida
# selecciona el modelo semántico, evalúa la medida y agrupa
_fabricEvaluarMedidaAgrupada = fabric.evaluate_measure(_nombreModeloSemantico, \
measure="TotalSalesTY", groupby_columns=["Store[Name]"])
# mostrar resultado
_fabricEvaluarMedidaAgrupada
# selecciona el modelo semántico, evalúa la medida, agrupa y filtra
_fabricEvaluarMedidaAgrupadaFiltrada= fabric.evaluate_measure( \
_nombreModeloSemantico, \
measure="TotalSalesTY", \
groupby_columns=["Store[Name]"], \
filters={"Store[Store Type]": ["New Store", "Same Store"], "Time[FiscalMonth]": ["Jan"]})
# mostrar resultado
_fabricEvaluarMedidaAgrupadaFiltrada
# selecciona el modelo semántico agrupando por varias columnas de varias tablas
_fabricEvaluarMedidaAgrupadaNtablas = fabric.evaluate_measure( \
_nombreModeloSemantico, \
measure="TotalSalesTY", \
groupby_columns=["Store[Store Type]", "Time[FiscalMonth]"])
# mostrar resultado
_fabricEvaluarMedidaAgrupadaNtablas
# selecciona el modelo semántico evaluando dos medidas y agrupando por varias columnas de varias tablas
_fabricEvaluarNMedidasNGrupos = fabric.evaluate_measure( \
_nombreModeloSemantico, \
measure=["TotalSales", "TotalSalesTY"], \
groupby_columns=["Store[Store Type]", "Time[FiscalMonth]"])
# mostrar resultado
_fabricEvaluarNMedidasNGrupos
# usar el conector XMLA
_fabricEvaluarNMedidasNGruposXMLA = fabric.evaluate_measure( \
_nombreModeloSemantico, \
measure=["TotalSales", "TotalSalesTY"], \
groupby_columns=["Store[Store Type]", "Time[FiscalMonth]"] \
, use_xmla=True)
# mostrar resultado
_fabricEvaluarNMedidasNGruposXMLA
Lenguaje del código: PHP (php)