fazad
Hola comunidad
Necesito su ayuda con el siguiente escenario.
Tengo un conjunto de tablas de datos donde hay espacios en blanco en ciertas columnas.
Cuando creo un valor de matriz, obtengo la siguiente tabla con filas en blanco que se muestran en el tipo de producto y la familia de productos para la categoría de necesidad de producto de autobús
Quiero mostrar todas las categorías y restringir la visualización de filas en blanco para el tipo de producto y la familia de productos y aún poder mostrar el valor total completo. Si aplico un filtro para eliminar el espacio en blanco del tipo de producto o de la familia de producto, elimina la opción de bus por completo de la necesidad de producto y el valor total también se reduce. ¿Alguna idea de cómo puedo limitar la fila en blanco en categorías posteriores sin afectar el valor total o la visualización en la matriz?
MarkLaf
En respuesta a fazad
Re: necesidad de crear una fórmula múltiple frente a una:
La medida en el n. ° 4, que creo que proporciona el resultado que está buscando, hace referencia a las medidas en el n. ° 2 y el n. ° 3. Entonces, lo presenté de tal manera que, sí, necesitarías hacer múltiples fórmulas para que funcione. Sin embargo, se puede hacer en una medida. Vea abajo.
Primero, notaré que la fórmula en el n. ° 1 es para una columna calculada, por lo que para agregarla a su modelo, debe ir a la capa de datos, pestaña Modelado y hacer clic en el botón Nueva columna para agregarla; otra forma sería hacer clic derecho en la tabla en el modelo de datos y hacer clic en «Nueva columna»
Si crea la columna calculada en el modelo, es relativamente sencillo combinar las tres medidas que proporcioné en una si así lo desea:
TotalSalesOneMeasure = VAR FilterDepth = ISFILTERED(Products[ProductNeed]) +ISFILTERED(Products[ProductType]) +ISFILTERED(Products[ProductFamily]) VAR MaxDepth = MAX(Products[HierarchyDepth]) RETURN IF( FilterDepth>MaxDepth, BLANK(), SUM(Products[Total Sales]) )
Si tu De Verdad quiero ponerlo todo en una sola medida y no molestarse con una columna calculada (esto no es tan eficiente, pero probablemente no se notará a menos que esté construyendo medidas complejas a partir de esto y / o trabajando con conjuntos de datos más grandes):
TotalSalesOneMeasureNoCalcCol = VAR FilterDepth = ISFILTERED(Products[ProductNeed]) +ISFILTERED(Products[ProductType]) +ISFILTERED(Products[ProductFamily]) VAR MaxDepth = MAXX( Products, ISTEXT([ProductNeed]) +ISTEXT([ProductType]) +ISTEXT([ProductFamily]) ) RETURN IF( FilterDepth>MaxDepth, BLANK(), SUM(Products[Total Sales]) )
Re: error
Mi suposición principal es que intentó hacer la fórmula en el n. ° 1 como una medida en lugar de una columna calculada (ya que ese es exactamente el error que obtendría si intentara hacer eso). De lo contrario, puede deberse a una diferencia entre el conjunto de datos generalizado que proporcionó y su conjunto de datos real (suponiendo que sean diferentes). O simplemente podría ser un tipo de error tipográfico; tal vez revise la columna calculada y las medidas para ver si hay referencias no reconocidas, etc. (aunque el error no implica realmente que ese sea el problema).
¡Espero que ayude!
Ashish_Mathur
Hola,
Una forma mucho más sencilla sería reemplazar los espacios en blanco con Desconocido en el Editor de consultas. El resultado final sería este:
fazad
En respuesta a Ashish_Mathur
Hola Ashish_Mathur,
No, eso no funcionará; si no hay valores en la subjearquía, no quiero mostrar desconocido.
Solo quiero limitar la subjearquía si hay un espacio en blanco.
MarkLaf
Una técnica que utilizo en situaciones como esta es la siguiente:
- Calcule la profundidad de la jerarquía para cada fila en su tabla (es decir, columna calculada)
tenga en cuenta que esto supone que las celdas en blanco son en realidad en blanco / nulas y no texto vacío («») – si son texto vacío, anótelo en PowerQuery o use una verificación diferente (por ejemplo, LEN ([column])> 0 😞HierarchyDepth =
ISTEXT([ProductNeed])
+ISTEXT([ProductType])
+ISTEXT([ProductFamily]) - Crea una medida que calcule la profundidad del filtro.
FilterDepth =
ISFILTERED(Products[ProductNeed])
+ISFILTERED(Products[ProductType])
+ISFILTERED(Products[ProductFamily]) - Cree una medida que calcule la profundidad máxima por jerarquía
MaxDepth =
MAX(Products[HierarchyDepth]) - Ahora puede ajustar cualquier medida que desee en «si la profundidad del filtro es mayor que la profundidad máxima de la jerarquía actual, luego mostrar como en blanco, de lo contrario, haga la medida» – específicamente, para su respuesta
TotalSales = IF( [FilterDepth]>[MaxDepth], BLANK(), SUM(Products[Total Sales]) )
Crédito a SQLBI, ya que lo anterior es una interpretación simplificada de su patrón de jerarquías de padres e hijos.
fazad
En respuesta a MarkLaf
Hola MarkLaf,
Gracias por la nota. ¿Necesitaría crear tres fórmulas DAX separadas que mencionó o todo estaría bajo una sola fórmula?
fazad
En respuesta a fazad
Al tener otro desafío, cuando ingresé a la fórmula DAX, aparece el siguiente mensaje de error:
«No se puede determinar un solo valor para la columna ProductNeed en la tabla. Esto puede suceder cuando una fórmula de medida hace referencia a una columna que contiene muchos valores»
¿Estoy haciendo algo incorrecto?
MarkLaf
En respuesta a fazad
Re: necesidad de crear una fórmula múltiple frente a una:
La medida en el n. ° 4, que creo que proporciona el resultado que está buscando, hace referencia a las medidas en el n. ° 2 y el n. ° 3. Entonces, lo presenté de tal manera que, sí, necesitarías hacer múltiples fórmulas para que funcione. Sin embargo, se puede hacer en una medida. Vea abajo.
Primero, notaré que la fórmula en el n. ° 1 es para una columna calculada, por lo que para agregarla a su modelo, debe ir a la capa de datos, pestaña Modelado y hacer clic en el botón Nueva columna para agregarla; otra forma sería hacer clic derecho en la tabla en el modelo de datos y hacer clic en «Nueva columna»
Si crea la columna calculada en el modelo, es relativamente sencillo combinar las tres medidas que proporcioné en una si así lo desea:
TotalSalesOneMeasure = VAR FilterDepth = ISFILTERED(Products[ProductNeed]) +ISFILTERED(Products[ProductType]) +ISFILTERED(Products[ProductFamily]) VAR MaxDepth = MAX(Products[HierarchyDepth]) RETURN IF( FilterDepth>MaxDepth, BLANK(), SUM(Products[Total Sales]) )
Si tu De Verdad quiero ponerlo todo en una sola medida y no molestarse con una columna calculada (esto no es tan eficiente, pero probablemente no sea notorio a menos que esté construyendo medidas complejas a partir de esto y / o trabajando con conjuntos de datos más grandes):
TotalSalesOneMeasureNoCalcCol = VAR FilterDepth = ISFILTERED(Products[ProductNeed]) +ISFILTERED(Products[ProductType]) +ISFILTERED(Products[ProductFamily]) VAR MaxDepth = MAXX( Products, ISTEXT([ProductNeed]) +ISTEXT([ProductType]) +ISTEXT([ProductFamily]) ) RETURN IF( FilterDepth>MaxDepth, BLANK(), SUM(Products[Total Sales]) )
Re: error
Mi suposición principal es que intentó hacer la fórmula en el n. ° 1 como una medida en lugar de una columna calculada (ya que ese es exactamente el error que obtendría si intentara hacer eso). De lo contrario, puede deberse a una diferencia entre el conjunto de datos generalizado que proporcionó y su conjunto de datos real (suponiendo que sean diferentes). O simplemente podría ser un tipo de error tipográfico; tal vez revise la columna calculada y las medidas para ver si hay referencias no reconocidas, etc. (aunque el error realmente no implica que ese sea el problema).
¡Espero que ayude!
fazad
En respuesta a MarkLaf
Hola MarkLaf,
Gracias por tu nota. Cometí un error. Para HiearchyDepth, de hecho lo había tomado como una nueva medida que la columna, por lo tanto, no estaba funcionando.
Pregunta: Si estoy agregando varias columnas para el valor, ¿debo definir para todas esas columnas? En el ejemplo teníamos TotalSales
MarkLaf
En respuesta a fazad
No estoy seguro de entender su pregunta, aunque intenté responder a continuación. Si no resuelve su problema, un ejemplo (datos de muestra adicionales y resultado esperado) de lo que desea puede ayudar.
Si quiere decir que hay otras columnas en su conjunto de datos real,
- desea incluir en medidas separadas (por ejemplo, los costos operativos totales además de las ventas totales), luego simplemente coloque la medida deseada dentro del «Si la profundidad del filtro es mayor que la profundidad máxima de la jerarquía actual, mostrar como en blanco, de lo contrario, haga la medida» lógica a la que hice referencia en mi respuesta inicial. Ejemplo:
TotalOpEx = IF( [FilterDepth]>[MaxDepth], BLANK(), SUM(Products[Total Op Ex]) )
- O si necesita sumar / multiplicar / etc. (por ejemplo, unidades * costo unitario) de múltiples columnas en su tabla y luego mostrarlas de manera visual, entonces probablemente el enfoque más simple sea agregar una columna calculada en la tabla en su modelo de datos que haga dicha suma / multiplicación / etc. que luego puede hacer referencia en una medida con la misma lógica «en blanco si la profundidad del filtro es mayor que la jerarquía». Ejemplo:
//Calculated column on table in your model CalcSale = [Price] * [Quantity]
//Measure to use in a visual that is referencing calculated column TotalCalcSales = IF( [FilterDepth]>[MaxDepth], BLANK(), SUM(Products[CalcSale]) )
En ambas instancias del código de ejemplo anterior, estoy haciendo referencia a las medidas FilterDepth y MaxDepth que describí en el n. ° 2 y el n. ° 3 de mi primera respuesta. Copiando aquí de nuevo para facilitar la referencia:
FilterDepth = ISFILTERED(Products[ProductNeed]) +ISFILTERED(Products[ProductType]) +ISFILTERED(Products[ProductFamily]) //As before, this is referencing the HierarchyDepth calculated column MaxDepth = MAX(Products[HierarchyDepth])
fazad
En respuesta a MarkLaf
Hola MarkLaf,
Disculpas si mi consulta fue un poco confusa.
Reformándolo, con el siguiente ejemplo. En la siguiente tabla, por ejemplo, si tengo varios valores para mostrar en mi matriz, por ejemplo, las ventas totales, el número de unidades vendidas y ASP, necesitaría agregarlos todos en la fórmula como se muestra a continuación:
TotalSales = IF( [FilterDepth]>[MaxDepth], BLANK(), SUM(Products[Total Sales])
SUM(Products[Number of Units sold])
SUM(Products[ASP]) )
MarkLaf
En respuesta a fazad
Si todas esas columnas están en su tabla en el modelo de datos y desea mostrarlas todas en una matriz, pero ocultando los encabezados de fila en blanco, entonces necesitaría medir cada una.
TotalSales = IF( [FilterDepth]>[MaxDepth], BLANK(), SUM(Products[Total Sales]) )
TotalUnits = IF( [FilterDepth]>[MaxDepth], BLANK(), SUM(Products[Number of Units sold]) )
Tenga en cuenta que en realidad estoy calculando ASP en la medida en lugar de usar un promedio de una columna calculada en la tabla, ya que eso garantizará que sea correcto independientemente del contexto del filtro (por ejemplo, correcto para Automóvil a nivel de resumen y para una familia de productos individual) .
TotalASP = IF( [FilterDepth]>[MaxDepth], BLANK(), DIVIDE([TotalSales],[TotalUnits]) )
Anónimo
En respuesta a MarkLaf
He probado esta solución pero tengo un problema.
Tengo mi estructura de Jerarquía de cuentas en una tabla separada, conectada a la tabla de hechos mediante un puente.
Mi FilterDebth siempre es máximo, no sé cómo conseguir que me dé el número correcto cuando estoy ampliando la jerarquía de mi cuenta en mi estado de pérdidas y ganancias. Yo uso la visualización matricial.
Mis fórmulas:
Como expresión:
¿Por qué mi filterdepth siempre es 7 ???