Este contenido fue traducido mediante IA y no ha sido revisado por un editor humano. Las imágenes y los gráficos permanecen en su idioma original.
Selectores dinámicos de medidas
Para ciertos tipos de Report, a veces tiene sentido poder elegir qué medidas se deben mostrar marcando los miembros de una dimensión, en lugar de incluir medidas individuales en la lista de campos. Hay muchos blogs y artículos en línea que describen este patrón con más detalle. Puedes encontrarlos buscando dynamic measure selector switch (selector dinámico de medidas).
A partir de una pregunta que recibí recientemente en GitHub, este artículo te muestra cómo generar automáticamente una tabla desconectada para la selección y, junto con ella, la medida SWITCH correspondiente. La técnica que se muestra aquí utiliza un script de Tabular Editor, que se ejecuta mientras tienes seleccionadas varias medidas en el árbol del explorador.
Script
Antes de ejecutar el siguiente script, tienes que decidir algunas cosas:
- ¿Cómo quieres que se llame la tabla de selección desconectada de una sola columna?
- ¿Cómo quieres que se llame la columna de la tabla de selección desconectada?
- ¿Qué nombre quieres ponerle a la medida SWITCH dinámica?
- ¿En qué tabla quieres que esté la medida SWITCH dinámica?
- Si no hay ningún filtro o si hay más de un valor filtrado en la tabla de selección, ¿qué debería devolver la medida dinámica?
Para cada pregunta, sustituye las cadenas de la parte superior del script por los valores que hayas decidido.
// (1) Name of disconnected selector table:
var selectorTableName = "Measure Selector";
// (2) Name of column on selector table:
var selectorTableColumnName = "Measure";
// (3) Name of dynamic switch measure:
var dynamicMeasureName = "Dynamic Measure";
// (4) Name of dynamic switch measure's parent table:
var dynamicMeasureTableName = "Measure Selector";
// (5) Fallback DAX expression:
var fallbackDax = "BLANK()";
// ----- Do not modify script below this line -----
if(Selected.Measures.Count == 0) {
Error("Select one or more measures");
return;
}
// Get or create selector table:
CalculatedTable selectorTable;
if(!Model.Tables.Contains(selectorTableName)) Model.AddCalculatedTable(selectorTableName);
selectorTable = Model.Tables[selectorTableName] as CalculatedTable;
// Get or create dynamic measure:
Measure dynamicMeasure;
if(!Model.Tables[dynamicMeasureTableName].Measures.Contains(dynamicMeasureName))
Model.Tables[dynamicMeasureTableName].AddMeasure(dynamicMeasureName);
dynamicMeasure = Model.Tables[dynamicMeasureTableName].Measures[dynamicMeasureName];
// Generate DAX for disconnected table:
// SELECTCOLUMNS({"Measure 1", "Measure 2", ...}, "Measure", [Value])
var selectorTableDax = "SELECTCOLUMNS(\n {\n " +
string.Join(",\n ", Selected.Measures.Select(m => "\"" + m.Name + "\"").ToArray()) +
"\n },\n \"" + selectorTableColumnName + "\", [Value]\n)";
// Generate DAX for dynamic metric:
// VAR _s = SELECTEDVALUE('Metric Selection'[Value]) RETURN SWITCH(_s, ...)
var dynamicMeasureDax =
"VAR _s =\n SELECTEDVALUE('" + selectorTableName + "'[" + selectorTableColumnName + "])\n" +
"RETURN\n SWITCH(\n _s,\n " +
string.Join(",\n ", Selected.Measures.Select(m => "\"" + m.Name + "\", " + m.DaxObjectFullName).ToArray()) +
",\n " + fallbackDax + "\n )";
// Assign DAX expressions:
selectorTable.Expression = selectorTableDax;
dynamicMeasure.Expression = dynamicMeasureDax;
Uso del script
Pega el script en Tabular Editor y selecciona varias medidas en el árbol del explorador (mantén pulsado SHIFT o CTRL para seleccionar varias). Si tus medidas están repartidas en varias tablas, Tabular Editor no te permitirá seleccionarlas a la vez (ya que no puedes seleccionar objetos de distintas partes del árbol al mismo tiempo). Sin embargo, una solución alternativa es usar la funcionalidad de filtro con los resultados de búsqueda mostrados en una lista plana (haz clic en el botón situado en el extremo derecho de la pantalla). Por ejemplo, puedes poner un comodín * en el cuadro de filtro, o escribir :ObjectType = "Measure" para restringir la búsqueda y mostrar solo medidas.
Una vez que hayas seleccionado las medidas que quieres incluir en el selector de medidas y en la medida dinámica, pulsa F5 para ejecutar el script. Si hubo algún error, siempre puedes pulsar CTRL+Z para deshacer los efectos de ejecutar el script.
Por ejemplo, si ejecuto el script con esta selección de medidas:

El script establece la expresión de la tabla calculada de la siguiente manera:

…y la expresión de la medida SWITCH dinámica de la siguiente manera:
