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

Día pico de la semana basado en el recuento de filas de categoría

¡Hola y gracias por su ayuda!

Mi objetivo es encontrar el día pico y el día fuera de pico para una ciudad determinada en cada grupo. Estoy buscando crear una medida que entre en mi recuento de datos el número de columnas para un grupo / ciudad determinado y luego devuelva el Día de la semana con la mayor cantidad de filas.

Para el Grupo 1:

El pico de Miami es el martes, así que me gustaría devolver el valor "martes"

El pico de Denver podría ser el viernes o el jueves, según el índice, me gustaría aplicar una jerarquía para decir que si 2 días son iguales, entonces devuelva el día 4, de lo contrario el día 5 o el día 2, etc. para eliminar la ambigüedad.

Sobresueldo:

Si esta medida se aplicara sin que la ciudad estuviera en la lista, ¿seguiría proporcionando un grupo con la mayor cantidad de resultados? Para el grupo 1 esperaría ver el pico identificado como "viernes"

El objetivo es crear 2 medidas 1 para el día pico y 1 para el día valle

He adjuntado un archivo PBIX a continuación que tiene algunos datos de muestra enumerados también el resultado esperado. He estado probando esto en mi archivo PBIX principal y simplemente no puedo hacer que esta medida funcione en DAX, pero creo que es porque estoy haciendo algo mal. ¡Toda ayuda es muy apreciada!

https://www.dropbox.com/s/27noxxg9wc0pquh/DoW%20Peak.pbix?dl=0

2 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

@DreDre ,

La lógica del juicio jerárquico es demasiado compleja, hice todo lo posible pero no lo hice, lo siguiente está dentro de mi poder.

vluwangmsft_0-1639644735109.png

Primero, nueva tabla personalizada:

Tableforall = SUMMARIZE('Sheet1',Sheet1[DoW], "sumcity", COUNT(Sheet1[City]))

Base en la tabla, crear nueva medida:

maxvalueforall = 
CALCULATE (
    MAX ( Tableforall[DoW] ),
    FILTER (
        ALL ( Tableforall ),
        Tableforall[sumcity]
                = CALCULATE (
                    MAX ( Tableforall[sumcity] ),
                     ALL ( Tableforall ))
                )
    )
minvalueforall = 
CALCULATE (
    MAX ( Tableforall[DoW] ),
    FILTER (
        ALL ( Tableforall ),
        Tableforall[sumcity]
                = CALCULATE (
                    min ( Tableforall[sumcity] ),
                     ALL ( Tableforall ))
                )
    )

A continuación, base en la tabla anterior, cree la siguiente columna:

MÁXIMO:

sumcity = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[City]=EARLIER(Sheet1[City])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])&&Sheet1[Group]=EARLIER(Sheet1[Group])))
sumcity2 = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[Group]=EARLIER(Sheet1[Group])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])))

Y, a continuación, utilice el siguiente dax para crear una nueva medida:

maxvaluecity = 
CALCULATE (
    MAX ( Sheet1[DoW] ),
    FILTER (
        ALL ( Sheet1 ),
        Sheet1[City] = MAX ( Sheet1[City] )&&Sheet1[Group]=MAX(Sheet1[Group])
            && Sheet1[sumcity]
                = CALCULATE (
                    MAX ( Sheet1[sumcity]),
                    FILTER ( ALL ( Sheet1 ), Sheet1[City] = MAX ( Sheet1[City] )&&Sheet1[Group]=MAX(Sheet1[Group]) )
                )
    )

)
maxvaluegroup = var test1=
CALCULATE (
    MAX ( Sheet1[DoW] ),
    FILTER (
        ALL ( Sheet1 ),
       Sheet1[Group]=MAX(Sheet1[Group])
            && Sheet1[sumcity2]
                = CALCULATE (
                    MAX ( Sheet1[sumcity2]),
                    FILTER ( ALL ( Sheet1 ),Sheet1[Group]=MAX(Sheet1[Group]) )
                )
    )

) var test2= CALCULATE (
                    MAX ( Sheet1[sumcity2]),
                    FILTER ( ALL ( Sheet1 ),Sheet1[Group]=MAX(Sheet1[Group]) )
                ) return test1
maxall = IF(HASONEVALUE(Sheet1[City]),[maxvaluecity],IF(HASONEVALUE(Sheet1[Group]),Sheet1[maxvaluegroup],[maxvalueforall]))

Min:

minvaluecity = 
CALCULATE (
    MAX ( Sheet1[DoW] ),
    FILTER (
        ALL ( Sheet1 ),
        Sheet1[City] = MAX ( Sheet1[City] )&&Sheet1[Group]=MAX(Sheet1[Group])
            && Sheet1[sumcity]
                = CALCULATE (
                    MIN(  Sheet1[sumcity]),
                    FILTER ( ALL ( Sheet1 ), Sheet1[City] = MAX ( Sheet1[City] )&&Sheet1[Group]=MAX(Sheet1[Group]) )
                )
    )

)
minvaluegroup = 
CALCULATE (
    MAX ( Sheet1[DoW] ),
    FILTER (
        ALL ( Sheet1 ),
       Sheet1[Group]=MAX(Sheet1[Group])
            && Sheet1[sumcity2]
                = CALCULATE (
                    min ( Sheet1[sumcity2]),
                    FILTER ( ALL ( Sheet1 ),Sheet1[Group]=MAX(Sheet1[Group]) )
                )
    )

)

min = IF(HASONEVALUE(Sheet1[City]),[minvaluecity],IF(HASONEVALUE(Sheet1[Group]),Sheet1[minvaluegroup],[minvalueforall]))

Y el resultado de la salida fnal es la primera imagen.

¿Respondí a su pregunta? ¡Marca mi post como solución!


Saludos

Lucien

View solution in original post

Syndicate_Admin
Administrator
Administrator

@DreDre ,

Tengo una idea que puede lograr el efecto en tu expresión.

Crear una columna de semana:

weeknumber = 
IF (
    Sheet1[DoW] = "Monday",
    1,
    IF (
        Sheet1[DoW] = "Tuesday",
        2,
        IF (
            Sheet1[DoW] = "Wednesday",
            3,
            IF (
                Sheet1[DoW] = "Thursday",
                4,
                IF (
                    Sheet1[DoW] = "Friday",
                    5,
                    IF ( Sheet1[DoW] = "Saturday", 6, IF ( Sheet1[DoW] = "Sunday", 7 ) )
                )
            )
        )
    )
)

Luego, ajuste un poco a la columna de valor de suma:

sumcitynew1 = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[City]=EARLIER(Sheet1[City])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])&&Sheet1[Group]=EARLIER(Sheet1[Group])))-0.1*Sheet1[weeknumber]

Mostrar en tabla (el rojo es antes del valor, y el geen es el después, mostrar directamente en su regla)

vluwangmsft_1-1640052954336.png

Y en base a mi archivo pbix base, ajustar las siguientes tres columnas podría lograrlo:

sumcity = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[City]=EARLIER(Sheet1[City])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])&&Sheet1[Group]=EARLIER(Sheet1[Group])))-0.1*Sheet1[weeknumber]
sumcity2 = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[Group]=EARLIER(Sheet1[Group])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])))-0.1*Sheet1[weeknumber]
Tableforall = SUMMARIZE('Sheet1',Sheet1[DoW],Sheet1[weeknumber], "sumcity", COUNT(Sheet1[City])-0.1*Sheet1[weeknumber])

¿Respondí a su pregunta? ¡Marca mi post como solución!


Saludos

Lucien

View solution in original post

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

@DreDre ,

Tengo una idea que puede lograr el efecto en tu expresión.

Crear una columna de semana:

weeknumber = 
IF (
    Sheet1[DoW] = "Monday",
    1,
    IF (
        Sheet1[DoW] = "Tuesday",
        2,
        IF (
            Sheet1[DoW] = "Wednesday",
            3,
            IF (
                Sheet1[DoW] = "Thursday",
                4,
                IF (
                    Sheet1[DoW] = "Friday",
                    5,
                    IF ( Sheet1[DoW] = "Saturday", 6, IF ( Sheet1[DoW] = "Sunday", 7 ) )
                )
            )
        )
    )
)

Luego, ajuste un poco a la columna de valor de suma:

sumcitynew1 = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[City]=EARLIER(Sheet1[City])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])&&Sheet1[Group]=EARLIER(Sheet1[Group])))-0.1*Sheet1[weeknumber]

Mostrar en tabla (el rojo es antes del valor, y el geen es el después, mostrar directamente en su regla)

vluwangmsft_1-1640052954336.png

Y en base a mi archivo pbix base, ajustar las siguientes tres columnas podría lograrlo:

sumcity = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[City]=EARLIER(Sheet1[City])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])&&Sheet1[Group]=EARLIER(Sheet1[Group])))-0.1*Sheet1[weeknumber]
sumcity2 = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[Group]=EARLIER(Sheet1[Group])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])))-0.1*Sheet1[weeknumber]
Tableforall = SUMMARIZE('Sheet1',Sheet1[DoW],Sheet1[weeknumber], "sumcity", COUNT(Sheet1[City])-0.1*Sheet1[weeknumber])

¿Respondí a su pregunta? ¡Marca mi post como solución!


Saludos

Lucien

Definitivamente fue un error del usuario, ¡MUCHAS GRACIAS! Eso funciona totalmente, ¡acabo de terminar de conectar la misma lógica a mi informe maestro! ¡Gracias por su ayuda con esto!

Syndicate_Admin
Administrator
Administrator

@v-luwang-msft Gracias por tomarse el tiempo para ayudarme a trabajar en esto, era la pieza jerárquica que también me estaba desanimando. Estoy tratando de recrear lo que has hecho aquí, pero creo que estoy teniendo algún error de usuario al configurar esto. Dividir su mensaje por las 12 capturas de pantalla.

¿Qué sección está vinculada a qué tabla? Asumí que era:

1/2/7/8/10/11 todos pertenecen a la tabla resumida creada en visual 1? ¿O lo estoy haciendo incorrectamente?

@DreDre ,

Proporciono mi archivo pbix, puede descargarlo, remítalo directamente.

Saludos

Lucien

Syndicate_Admin
Administrator
Administrator

@DreDre ,

La lógica del juicio jerárquico es demasiado compleja, hice todo lo posible pero no lo hice, lo siguiente está dentro de mi poder.

vluwangmsft_0-1639644735109.png

Primero, nueva tabla personalizada:

Tableforall = SUMMARIZE('Sheet1',Sheet1[DoW], "sumcity", COUNT(Sheet1[City]))

Base en la tabla, crear nueva medida:

maxvalueforall = 
CALCULATE (
    MAX ( Tableforall[DoW] ),
    FILTER (
        ALL ( Tableforall ),
        Tableforall[sumcity]
                = CALCULATE (
                    MAX ( Tableforall[sumcity] ),
                     ALL ( Tableforall ))
                )
    )
minvalueforall = 
CALCULATE (
    MAX ( Tableforall[DoW] ),
    FILTER (
        ALL ( Tableforall ),
        Tableforall[sumcity]
                = CALCULATE (
                    min ( Tableforall[sumcity] ),
                     ALL ( Tableforall ))
                )
    )

A continuación, base en la tabla anterior, cree la siguiente columna:

MÁXIMO:

sumcity = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[City]=EARLIER(Sheet1[City])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])&&Sheet1[Group]=EARLIER(Sheet1[Group])))
sumcity2 = CALCULATE(COUNT(Sheet1[City]),FILTER(ALL(Sheet1),Sheet1[Group]=EARLIER(Sheet1[Group])&&Sheet1[DoW]=EARLIER(Sheet1[DoW])))

Y, a continuación, utilice el siguiente dax para crear una nueva medida:

maxvaluecity = 
CALCULATE (
    MAX ( Sheet1[DoW] ),
    FILTER (
        ALL ( Sheet1 ),
        Sheet1[City] = MAX ( Sheet1[City] )&&Sheet1[Group]=MAX(Sheet1[Group])
            && Sheet1[sumcity]
                = CALCULATE (
                    MAX ( Sheet1[sumcity]),
                    FILTER ( ALL ( Sheet1 ), Sheet1[City] = MAX ( Sheet1[City] )&&Sheet1[Group]=MAX(Sheet1[Group]) )
                )
    )

)
maxvaluegroup = var test1=
CALCULATE (
    MAX ( Sheet1[DoW] ),
    FILTER (
        ALL ( Sheet1 ),
       Sheet1[Group]=MAX(Sheet1[Group])
            && Sheet1[sumcity2]
                = CALCULATE (
                    MAX ( Sheet1[sumcity2]),
                    FILTER ( ALL ( Sheet1 ),Sheet1[Group]=MAX(Sheet1[Group]) )
                )
    )

) var test2= CALCULATE (
                    MAX ( Sheet1[sumcity2]),
                    FILTER ( ALL ( Sheet1 ),Sheet1[Group]=MAX(Sheet1[Group]) )
                ) return test1
maxall = IF(HASONEVALUE(Sheet1[City]),[maxvaluecity],IF(HASONEVALUE(Sheet1[Group]),Sheet1[maxvaluegroup],[maxvalueforall]))

Min:

minvaluecity = 
CALCULATE (
    MAX ( Sheet1[DoW] ),
    FILTER (
        ALL ( Sheet1 ),
        Sheet1[City] = MAX ( Sheet1[City] )&&Sheet1[Group]=MAX(Sheet1[Group])
            && Sheet1[sumcity]
                = CALCULATE (
                    MIN(  Sheet1[sumcity]),
                    FILTER ( ALL ( Sheet1 ), Sheet1[City] = MAX ( Sheet1[City] )&&Sheet1[Group]=MAX(Sheet1[Group]) )
                )
    )

)
minvaluegroup = 
CALCULATE (
    MAX ( Sheet1[DoW] ),
    FILTER (
        ALL ( Sheet1 ),
       Sheet1[Group]=MAX(Sheet1[Group])
            && Sheet1[sumcity2]
                = CALCULATE (
                    min ( Sheet1[sumcity2]),
                    FILTER ( ALL ( Sheet1 ),Sheet1[Group]=MAX(Sheet1[Group]) )
                )
    )

)

min = IF(HASONEVALUE(Sheet1[City]),[minvaluecity],IF(HASONEVALUE(Sheet1[Group]),Sheet1[minvaluegroup],[minvalueforall]))

Y el resultado de la salida fnal es la primera imagen.

¿Respondí a su pregunta? ¡Marca mi post como solución!


Saludos

Lucien

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.