Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Cálculo de medidas mediante nombres de columna dinámicos

Estoy tratando de encontrar una manera de crear una medida que sume una columna de datos en una tabla basada en el elemento seleccionado en una segmentación de datos.

La segmentación de datos se basa en un parámetro de campo:

Figura 1 Eje Y = {
("CDiff_count", NOMBREDE(«spotfire_rpt HCAI»[CDiff_count]), 0),
("EColi_count", NOMBREDE(«spotfire_rpt HCAI»[EColi_count]), 1),
("MRSA_count", NOMBREDE(«spotfire_rpt HCAI»[MRSA_count]), 2),
("MSSA_count", NOMBREDE(«spotfire_rpt HCAI»[MSSA_count]), 3)
}
Crea esta segmentación de datos:
Sere_17_0-1669037983631.png

Lo que me gustaría es que el eje Y de un gráfico de barras sume una columna de datos basada en la selección realizada aquí. Las columnas tienen el mismo nombre que las opciones (por lo que hay una columna llamada CDiff_count, EColi_count etc.).

Preferiría no tener que hacer esto usando múltiples medidas o una medida que use una instrucción if para verificar el elemento seleccionado, ya que es probable que agreguemos más columnas más adelante y quiero mantener la cantidad de mantenimiento requerido al mínimo.

Supongo que hay una manera de pasar una cadena como nombre de columna o usar un parámetro como nombre de columna en DAX que simplemente no he encontrado.

Gracias

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Solo como una actualización en caso de que alguien se encuentre con el mismo problema más tarde.

Terminé usando parámetros de campo para crear dos segmentaciones de datos (una para el tipo de infección y otra para los días de cama).

  • Cree una función DAX que utilice SELECTEDVALUE() y SWITCH() para obtener el valor seleccionado actualmente y realizar una acción basada en ese valor.
    • No puede usar SELECTEDVALUE() en las columnas de parámetros de campo, así que creé una nueva columna en la tabla de datos de parámetros de campo (selectedMeasure = 'Cálculos de la figura 1'[Cálculos de la figura 1])
  • Esta nueva columna se utilizó en la instrucción aSWITCH() para sumar la columna relevante
infectionSwitchStatement =
Dónde Infección =
INTERRUPTOR (
VALOR SELECCIONADO('Figura 1 Cálculos'[selectedMeasure]),
"Cdiff", suma('spotfire_rpt v_HED_HCAI_PowerBI'[CDIFF]),
"EColi", suma('spotfire_rpt v_HED_HCAI_PowerBI'[ECOLI]),
"MRSA", suma('spotfire_rpt v_HED_HCAI_PowerBI'[SARM]),
"MSSA",suma('spotfire_rpt v_HED_HCAI_PowerBI'[MSSA])
)
devolución Infección
  • Creación repetida de columnas e instrucción switch para el otro parámetro de campo que había creado.
  • Creé una nueva medida en mi tabla de datos principal que dividió mi numerador seleccionado por mi denominador seleccionado.
  • Coloque esa nueva medida en el eje Y del gráfico de barras.

Entonces, debido a que DAX no maneja el uso de cadenas o parámetros como nombres de columna, necesitaba repetir el mismo código para cada una de las columnas que quería sumar. No es mi preferencia, ya que actualmente puedo usar parámetros como nombres de columna en Spotfire, pero espero que sea una característica que agregarán en algún momento ...

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Solo como una actualización en caso de que alguien se encuentre con el mismo problema más tarde.

Terminé usando parámetros de campo para crear dos segmentaciones de datos (una para el tipo de infección y otra para los días de cama).

  • Cree una función DAX que utilice SELECTEDVALUE() y SWITCH() para obtener el valor seleccionado actualmente y realizar una acción basada en ese valor.
    • No puede usar SELECTEDVALUE() en las columnas de parámetros de campo, así que creé una nueva columna en la tabla de datos de parámetros de campo (selectedMeasure = 'Cálculos de la figura 1'[Cálculos de la figura 1])
  • Esta nueva columna se utilizó en la instrucción aSWITCH() para sumar la columna relevante
infectionSwitchStatement =
Dónde Infección =
INTERRUPTOR (
VALOR SELECCIONADO('Figura 1 Cálculos'[selectedMeasure]),
"Cdiff", suma('spotfire_rpt v_HED_HCAI_PowerBI'[CDIFF]),
"EColi", suma('spotfire_rpt v_HED_HCAI_PowerBI'[ECOLI]),
"MRSA", suma('spotfire_rpt v_HED_HCAI_PowerBI'[SARM]),
"MSSA",suma('spotfire_rpt v_HED_HCAI_PowerBI'[MSSA])
)
devolución Infección
  • Creación repetida de columnas e instrucción switch para el otro parámetro de campo que había creado.
  • Creé una nueva medida en mi tabla de datos principal que dividió mi numerador seleccionado por mi denominador seleccionado.
  • Coloque esa nueva medida en el eje Y del gráfico de barras.

Entonces, debido a que DAX no maneja el uso de cadenas o parámetros como nombres de columna, necesitaba repetir el mismo código para cada una de las columnas que quería sumar. No es mi preferencia, ya que actualmente puedo usar parámetros como nombres de columna en Spotfire, pero espero que sea una característica que agregarán en algún momento ...

Syndicate_Admin
Administrator
Administrator

Logré evitar esto usando los parámetros de campo como valores en un objeto visual de Python, pero esto no funcionará para mí debido al hecho de que hace que un objeto visual estático de Python y no un elemento visual flexible de Power BI.

Dos parámetros de campo: Figura 1 Eje X y Figura 1 Eje Y.

Sere_17_0-1669124265004.png

Agregue estos como valores al objeto visual de python.

También agregue todas las columnas posibles que quiero sumar (CDiff_count, EColi_count, MRSA_count, MSSA_count).

Sere_17_1-1669124291319.png

Los nombres de columna que se agregan al objeto visual de Python dependen de la opción seleccionada. Entonces, si se selecciona "Cdiff_count", creará una columna CDiff_count.

Sere_17_2-1669124324330.png

Asegúrese de que el valor del eje Y de la figura 1 esté por encima de las columnas sumadas.

La visualización de Python nombrará automáticamente la columna seleccionada que se sumará columnname+".1" para evitar nombres duplicados.

Utilice un bucle for para buscar el nombre de columna duplicado. Esa columna debe trazarse como el eje Y.

Utilice la función de lista en Python para obtener una lista de todos los nombres de columna. Debido al orden de los valores, sé que el segundo elemento de la lista será el eje x.

Utilice la función de trazado con las variables creadas del eje x y del eje y.

Con esto, el objeto visual de Python se actualizará cada vez que realice un cambio en el elemento seleccionado para la Figura 1 Eje X o la Figura 1 Eje Y, sin embargo, la funcionalidad visual resultante no es apropiada para esta situación.


¡Volver a empezar desde cero!

Syndicate_Admin
Administrator
Administrator

@Sere_17 ,

Esta es mi tabla de prueba:

vyadongfmsft_0-1669104422180.png

Cree tres medidas para tres columnas:

Sum_Value1 = SUM('Table'[Value1])

Sum_Value2 = SUM('Table'[Value2])

Sum_Value3 = SUM('Table'[Value3])

Crear parámetro de campo:

vyadongfmsft_1-1669104529965.png

¿Es este el resultado que deseas?

vyadongfmsft_2-1669104569307.pngvyadongfmsft_3-1669104593368.png

Saludos

Yadong Fang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola

Gracias por su respuesta. Ese es el resultado deseado, pero esperaba encontrar una manera de hacerlo sin tener que crear esas tres medidas separadas, si eso tiene sentido. Por lo tanto, una forma de hacer que la medida cambie la columna que está tratando de sumar en función de la selección en ese parámetro de campo.

Gracias.

@Sere_17 ,

Creo que el parámetro de campo ya es la forma más flexible y eficiente. Es posible que deba pivotar los datos si no desea crear medidas separadas. Sin embargo, este método es más problemático.

Saludos

Yadong Fang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

@Sere_17 , En ambos blogs he comprobado el valor seleccionado

Cambiar TOPN con parámetros de campo: https://amitchandak.medium.com/switch-topn-with-field-parameters-299a0ae3725f
Parámetros de campo: formato condicional
: https://amitchandak.medium.com/field-parameters-conditional-formatting-517aacc23fdf

Puede obtener más de un valor como

Medida seleccionada = concatenatex(FILTER('Cortar segmentación de datos', 'Cortar segmentación de datos'[Medir orden de segmentación de datos] en valores('Medir segmentación de datos'[Medir orden de segmentación de datos])), 'Medir segmentación de datos'[Medir segmentación de datos])

Puede cambiar eso según sea necesario

Hola

Gracias por responder. He echado un vistazo a esos blogs y tengo entendido que todavía necesitaría hacer medidas separadas para cada una de las opciones, por ejemplo, en su blog hizo medir la marca Top2 y la categoría Top2.

Como el cálculo es el mismo en cada una de las opciones de la "Figura 1 Eje Y", esperaba encontrar una manera de no crear múltiples medidas.
El blog de formato condicional parece muy útil (incluso para fuera de esta tarea), así que gracias por compartir.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.