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

Devolver mínimo/máximo del intervalo de fechas histórico - código casi de trabajo.

ACTUALIZACIÓN: 26 mayo - Desafortunadamente todavía no puede hacerlo funcionar. Me he tomado el tiempo para crear datos ficticios para que reflejen el código real tanto como sea posible.

Resultado deseado

Basado en las fechas seleccionadas en la segmentación de datos:

  1. Recuperar los últimos 2 meses de datos
  2. Agregado [ID] basado en [Grupo], tomando la SUMA de [Valores] en el [Grupo] -- Esto devuelve un valor agregado, por fecha
  3. Para el intervalo de fechas seleccionado, devuelva el mínimo para ese [Grupo]

Datos de muestra

SlicerGroup1fechaSlicerGroup2identificaciónvalorgrupoSub_GroupSub_Sub_GroupSub_Sub_Sub_Group
SG1_131-Mar-21SG2_1ID_1-0.03%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG1
SG1_131-Mar-21SG2_1ID_20.02%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG2
SG1_131-Mar-21SG2_1ID_3-0.04%Group_1G1_SG2G1_SG2_SSG1G1_SG2_SSG1_SSSG1
SG1_130-Abr-21SG2_1ID_30.02%Group_1G1_SG2G1_SG2_SSG1G1_SG2_SSG1_SSSG1
SG1_130-Abr-21SG2_1ID_1-0.06%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG1
SG1_130-Abr-21SG2_1ID_20.04%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG2
SG1_231-Mar-21SG2_1ID_40.06%Group_2G2_SG1G2_SG1_SSG1G2_SG1_SSG1_SSSG1
SG1_14-Mayo-21SG2_1ID_20.04%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG2
SG1_13-Mayo-21SG2_1ID_20.02%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG2
SG1_14-Mayo-21SG2_1ID_10.07%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG1
SG1_13-Mayo-21SG2_1ID_1-0.05%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG1
SG1_14-Mayo-21SG2_1ID_3-0.02%Group_1G1_SG2G1_SG2_SSG1G1_SG2_SSG1_SSSG1
SG1_13-Mayo-21SG2_1ID_30.03%Group_1G1_SG2G1_SG2_SSG1G1_SG2_SSG1_SSSG1
SG1_230-Abr-21SG2_1ID_40.02%Group_2G2_SG1G2_SG1_SSG1G2_SG1_SSG1_SSSG1
SG1_231-Mar-21SG2_1ID_10.04%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG1
SG1_231-Mar-21SG2_1ID_30.04%Group_1G1_SG2G1_SG2_SSG1G1_SG2_SSG1_SSSG1
SG1_231-Mar-21SG2_1ID_20.00%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG2
SG1_230-Abr-21SG2_1ID_30.04%Group_1G1_SG2G1_SG2_SSG1G1_SG2_SSG1_SSSG1
SG1_230-Abr-21SG2_1ID_10.08%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG1
SG1_230-Abr-21SG2_1ID_2-0.06%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG2
SG1_23-Mayo-21SG2_1ID_2-0.07%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG2
SG1_24-Mayo-21SG2_1ID_20.04%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG2
SG1_24-Mayo-21SG2_1ID_1-0.07%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG1
SG1_23-Mayo-21SG2_1ID_10.01%Group_1G1_SG1G1_SG1_SSG1G1_SG1_SSG1_SSSG1
SG1_24-Mayo-21SG2_1ID_30.01%Group_1G1_SG2G1_SG2_SSG1G1_SG2_SSG1_SSSG1
SG1_23-Mayo-21SG2_1ID_30.02%Group_1G1_SG2G1_SG2_SSG1G1_SG2_SSG1_SSSG1
SG1_24-Mayo-21SG2_1ID_40.03%Group_2G2_SG1G2_SG1_SSG1G2_SG1_SSG1_SSSG1
SG1_23-Mayo-21SG2_1ID_4-0.02%Group_2G2_SG1G2_SG1_SSG1G2_SG1_SSG1_SSSG1

Salida actual

La salida actual de interés se muestra en la tabla izquierda de la siguiente imagen. La tabla derecha muestra un ejemplo de los valores agregados, por lo que si la [Fecha] se selecciona como 30-Abr-21, debería tomar los valores -0,10% y 0,01%, y devolver el mínimo, es decir, -0,10% en este caso. Sobre la base de la medida [2_month_min_datestring], parece sugerir que se han aplicado los filtros adecuados. Los códigos para las medidas también se pegan a continuación.

Wendeley-North_0-1621973530885.png

2_month_min_datestring = 
VAR endDate = LASTDATE(Table2[Date])
VAR startDate = DATE( YEAR(endDate) - 1, MONTH(endDate), DAY(endDate) )
VAR filteredTable = 
    FILTER (
        ALLEXCEPT ( Table2, Table2[SlicerGroup1], Table2[Group] ),
        Table2[Date] >= startDate &&
        Table2[Date] <= endDate
    )
RETURN
    "FROM " & MINX( filteredTable, Table2[Date] ) & " TO " & MAXX ( filteredTable, Table2[Date] )
2_month_min_value = 
VAR endDate = LASTDATE(Table2[Date])
VAR startDate = DATE( YEAR(endDate) - 1, MONTH(endDate), DAY(endDate) )
VAR filteredTable = 
    FILTER (
        ALLEXCEPT ( Table2, Table2[SlicerGroup1], Table2[Group] ),
        Table2[Date] >= startDate &&
        Table2[Date] <= endDate
    )
RETURN
    MINX ( filteredTable, SUM( Table2[Value] ) )

Agradezco cualquier orientación, muchas gracias - He estado pasando muchas horas en esto, pero mis medidas iniciales todavía me hicieron más cerca.

---

MENSAJE ORIGINAL:

Hola, tengo una visualización que actualmente toma la fecha de finalización de una segmentación de datos en la página. Me gustaría que la medida:

  1. Mira hacia atrás en los 12 meses anteriores
  2. Agregue la cantidad por [Grupo1] para cada uno de los meses -- Contexto proporcionado por las filas
  3. Devuelva el máximo/mínimo de estos agregados para [Grupo1].

Actualmente tengo una medida que parece que ya casi está ahí:

1Y_min = 
VAR endDate = LASTDATE(Table[Date]) -- Determined by slicer
VAR startDate = DATE( YEAR(endDate) - 1, MONTH(endDate), DAY(endDate) ) -- 1-year lookback
VAR filteredTable = 
    FILTER (
        ALLEXCEPT ( Table, Table[ParentGroup], Table[Group1] ), -- Create a new table, ignoring the Date slicer filter
        Table[Date] >= startDate &&
        Table[Date] <= endDate
    )
VAR sumQuantity =
    SUM ( Table[Quantity] )
RETURN
    MINX ( filteredTable, sumQuantity ) 

Sé con certeza que la tabla filtrada devuelve los intervalos de fechas correctos examinando los resultados devueltos por el código siguiente:

1Y_min = 
VAR endDate = LASTDATE(Table[Date]) -- Determined by slicer
VAR startDate = DATE( YEAR(endDate) - 1, MONTH(endDate), DAY(endDate) ) -- 1-year lookback
VAR filteredTable = 
    FILTER (
        ALLEXCEPT ( Table, Table[ParentGroup], Table[Group1] ),
        Table[Date] >= startDate &&
        Table[Date] <= endDate
    )
RETURN
    "FROM " & MINX( filteredTable, Table[Date] ) & " TO " & MAXX ( filteredTable, Table[Date] ) 

Sin embargo, parece desmoronarse en el momento en que intento obtener los rangos MIN/MAX - claramente sólo está devolviendo la SUMA para la fecha especificada en la segmentación de datos (ya que MIN/MAX devuelve los mismos resultados).

Agradecería cualquier ayuda, gracias.

1 ACCEPTED SOLUTION

No @Vera_33,

Mirando los datos de muestra que he proporcionado de nuevo parece que puede ser diferente de la que estoy usando - disculpas por eso. Estaba usando el generador RAND() en Excel y debo haberlo actualizado accidentalmente. En cualquier caso, me las arreglé para construir sobre lo que proporcionaste y finalmente lo hice funcionar. Aquí está el siguiente código:

2m_min_vera = 
VAR endDate = LASTDATE(Table2[Date]) -- Determined by slicer
VAR startDate = DATE( YEAR(endDate) - 1, MONTH(endDate), DAY(endDate) ) -- 1-year lookback
VAR slicerSelection = VALUES( Table2[SlicerGroup1] ) 
VAR filteredTable = 
    FILTER (
        ALLEXCEPT( Table2, Table2[Group] ), -- Create a new table, keeping the Group row context
        Table2[SlicerGroup1] IN slicerSelection &&
        Table2[Date] >= startDate &&
        Table2[Date] <= endDate
    )
VAR t1 =
    SUMMARIZE(filteredTable, Table2[Date], "sumQuantity", SUM ( [Value] ))
RETURN
    -- CONCATENATEX( t1, Table2[Group], "," ) Used for debugging
    -- CONCATENATEX( t1, FORMAT([sumQuantity], "0.00%"), "," ) Used for debugging
    FORMAT( MINX ( t1, [sumQuantity]), "0.00%" )

Parece que el uso de ALLEXCEPT (Tabla2, Tabla2[SlicerGroup1]) de alguna manera no estaba teniendo en cuenta la selección de segmentación de datos, ya que las fórmulas de depuración indicaban que el SG1_2 slicergroup1 también se estaba incluido en la tabla filtrada.

También cambié el GROUPBY con SUMMARIZE a mitad de camino, aunque parecen servir para la misma función.

Muchas gracias.

View solution in original post

11 REPLIES 11
Syndicate_Admin
Administrator
Administrator

Hola @Wendeley-Norte

¿No está seguro de si lo entiendo correctamente, desea encontrar el valor mínimo de SUM ( Tabla [Cantidad] ) en el nivel mes en el último 12 mes? ¿Tiene datos de nivel de día y una columna mes? Es mejor publicar algunos datos de muestra... y el objeto visual para mostrarlo con Table[ParentGroup], Table[Group1]?

1Y_min = 
VAR endDate = LASTDATE(Table[Date]) -- Determined by slicer
VAR startDate = DATE( YEAR(endDate) - 1, MONTH(endDate), DAY(endDate) ) -- 1-year lookback
VAR filteredTable = 
    FILTER (
        ALLEXCEPT ( Table, Table[ParentGroup], Table[Group1] ), -- Create a new table, ignoring the Date slicer filter
        Table[Date] >= startDate &&
        Table[Date] <= endDate
    )
VAR t1 =
    GROUPBY(filteredTable, [Month],"sumQuantity",SUMX (CURRENTGROUP, [Quantity] ))
RETURN
    MINX ( t1, [sumQuantity] ) 

No @Vera_33,

Sí, eso es correcto. Actualmente se basa en una columna de fecha, ¿podría usar [Fecha]. ¿Mes para hacer la agrupación en su lugar?

Estos son algunos datos de ejemplo:

fechaGrupo de padresID de artículoGrupo 1FilterGroupcantidad
29-Enero-99A12431232ZzX-100
26-Febrero-99A12312333ZCY10
26-Febrero-99A12334123atrásX-10
26-Febrero-99A12342332EgX-20
31-Mar-99A12321231atrásX50
29-Enero-99B16453453atrásY100
26-Febrero-99B13232322ZFX50

Probará tu solución en un rato y te volverá a ver, vítores.

En cuanto al objeto visual, Table[ParentGroup] es una selección de segmentación de datos, por lo que el objeto visual solo tendrá Table[Group1] como contexto de fila.

Hola @Wendeley-Norte

No creo que [Fecha]. Mes funcionará... No uso este tipo de fecha y hora automáticas en Power BI...

Hola Vera, tu medida no funcionó, por desgracia.. He actualizado la publicación principal para incluir más detalles y un mejor conjunto de datos de muestra, espero que sea más fácil para usted. gracias.

Hola @Wendeley-Norte

Usé tus datos ficticios actualizados, pero tengo valores diferentes, ¿consideras Sub Group también? Debería ser -0.05% si no hay Subgrupo, no -0.01% en su puesto. Es mejor que pueda compartir un archivo .pbix, le pm pronto.

Vera_33_0-1622012970489.png

No @Vera_33,

Eso es extraño, ya que mis datos ficticios son exactamente lo que he publicado anteriormente. Incluso si tengo en cuenta los subgrupos:

Wendeley-North_0-1622013344912.png

Parece que ninguno de ellos debería estar regresando -0.04%?

Desafortunadamente no puedo subir nada debido a las restricciones de firewall, pero he hecho todo lo posible para replicar desde cero lo que estoy mostrando aquí para con suerte hacer que sea más fácil de solucionar..

@Vera_33 He vuelto a intentar su solución, pero parece haber algún error:

Wendeley-North_0-1622013764540.png

2m_min_vera = 
VAR endDate = LASTDATE(Table2[Date]) -- Determined by slicer
VAR startDate = DATE( YEAR(endDate) - 1, MONTH(endDate), DAY(endDate) ) -- 1-year lookback
VAR filteredTable = 
    FILTER (
        ALLEXCEPT ( Table2, Table2[SlicerGroup1], Table2[Group] ), -- Create a new table, ignoring the Date slicer filter
        Table2[Date] >= startDate &&
        Table2[Date] <= endDate
    )
VAR t1 =
    GROUPBY(filteredTable, 'Date'[Month],"sumQuantity",SUMX (CURRENTGROUP, [Value] ))
RETURN
    MINX ( t1, [sumQuantity] ) 

@Vera_33

La medida parece devolver sólo el valor correcto cuando se elige 30-Abr-21. Cuando se eligen otras fechas, parece que devuelve el mismo valor del -0,10%, cuando debería ser del -0,15% cuando se elige el 3-mayo-21 o el 4-mayo-21, por ejemplo.

Hola @Wendeley-Norte

Siento que necesito entender el valor que quieres devolver primero... tomemos 30-Abr-21, necesita resumir el valor por cada mes y encontrar el Min.

Es -0,05% (-0,04%,0,02%,-0,03%), o -0,04% teniendo en cuenta Sub_Group, de lo contrario malinterpreté todo.

Vera_33_0-1622113637484.png

No @Vera_33,

Mirando los datos de muestra que he proporcionado de nuevo parece que puede ser diferente de la que estoy usando - disculpas por eso. Estaba usando el generador RAND() en Excel y debo haberlo actualizado accidentalmente. En cualquier caso, me las arreglé para construir sobre lo que proporcionaste y finalmente lo hice funcionar. Aquí está el siguiente código:

2m_min_vera = 
VAR endDate = LASTDATE(Table2[Date]) -- Determined by slicer
VAR startDate = DATE( YEAR(endDate) - 1, MONTH(endDate), DAY(endDate) ) -- 1-year lookback
VAR slicerSelection = VALUES( Table2[SlicerGroup1] ) 
VAR filteredTable = 
    FILTER (
        ALLEXCEPT( Table2, Table2[Group] ), -- Create a new table, keeping the Group row context
        Table2[SlicerGroup1] IN slicerSelection &&
        Table2[Date] >= startDate &&
        Table2[Date] <= endDate
    )
VAR t1 =
    SUMMARIZE(filteredTable, Table2[Date], "sumQuantity", SUM ( [Value] ))
RETURN
    -- CONCATENATEX( t1, Table2[Group], "," ) Used for debugging
    -- CONCATENATEX( t1, FORMAT([sumQuantity], "0.00%"), "," ) Used for debugging
    FORMAT( MINX ( t1, [sumQuantity]), "0.00%" )

Parece que el uso de ALLEXCEPT (Tabla2, Tabla2[SlicerGroup1]) de alguna manera no estaba teniendo en cuenta la selección de segmentación de datos, ya que las fórmulas de depuración indicaban que el SG1_2 slicergroup1 también se estaba incluido en la tabla filtrada.

También cambié el GROUPBY con SUMMARIZE a mitad de camino, aunque parecen servir para la misma función.

Muchas gracias.

Gracias por la propina, probé el [Date].month y de hecho no funcionó, intentaré crear una mesa de citas separada y volver a ti en breve. salud.

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.