Listar y calcular medidas usando Semantic Link

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

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

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

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

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

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

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

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

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

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

Escribir un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.