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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Permitir que el Visor de informes cambie dinámicamente el día de inicio de la semana

Saludos

Tengo el requisito de que mi informe debe permitir al usuario cambiar dinámicamente el día de inicio de la semana, lo que a su vez cambiará las imágenes en consecuencia, y mi implementación actual es extremadamente "maloliente" y no parece escalable.

Actualmente, nuestra implementación solo admite el cambio de domingo o lunes y es muy compleja, ya que solo dura esos dos días.

Actualmente generamos una tabla de todas las fechas configuradas como offset a partir del lunes:

WeekStartMonWeekStartMon

Y uno para el domingo:

Screen Shot 2022-01-26 at 11.26.43 AM.png

Luego generamos una tabla combinada que tiene todos estos datos (creando el primer "Olor" que es que cada fecha está en la tabla combinada dos veces):

Screen Shot 2022-01-26 at 11.24.52 AM.png

Como nota: generamos estos a partir de una tabla de dimensión de fecha que generamos que contiene muchas características de inteligencia temporal diferentes:

Screen Shot 2022-01-26 at 11.25.06 AM.png

Así que tenemos esto disponible para nosotros, pero no podemos averiguar directamente cómo hacer esta función.

El modelado completo se ve así:
Screen Shot 2022-01-26 at 11.26.01 AM.png

A continuación, utilizamos esta configuración para aplicar un filtro que el usuario puede seleccionar:

Screen Shot 2022-01-26 at 11.27.46 AM.png


Combinado con un DAX realmente feo:

Screen Shot 2022-01-26 at 11.44.26 AM.png

También tenemos que hacer una relación M-M con una unión cruzada entre la tabla de inicio de fecha y cualquier tabla que necesite "cambiar", que también se siente maloliente.


Todo esto para decir: esto solo es compatible con dos días, y escalar esto para incluir martes a viernes parece que sería una pesadilla.

----

¿Hay alguna manera de usar una configuración tradicional de Date Dimension y una buena RI, pero permitir que un usuario cambie dinámicamente la fecha de inicio de la semana de los elementos visuales?

Tengo acceso directo a los datos y las tablas, y puedo hacer cualquier ajuste a la tabla Dimensión de fecha o cualquier otro aspecto para lograr esto, pero no he podido encontrar ninguna dirección sobre la mejor manera de lograr una característica como esta. Cualquier orientación sería muy apreciada.

12 REPLIES 12
Syndicate_Admin
Administrator
Administrator

@EricWafford qué solución se le ocurrió o usó eventualmente?

Tengo exactamente la misma situación que tú, y también creé la misma solución que mencionaste al principio de la publicación. Pero me preguntaba si ha resuelto esto de una manera más flexible.

Además, ¿has pensado en usar parámetros de campo para resolver esto?

Syndicate_Admin
Administrator
Administrator

¿ @EricWafford

Utilizo una tabla de fechas basada en dax y la empiezo con:

Fecha = 

DÓNDE _vYearStart = 2014 Actualizar
DÓNDE _vYearEnd = AÑO ( ÚLTIMA FECHA ( «Tabla»[Fecha de finalización] ) ) Actualizar
DÓNDE _vFinYearMonthStart = 7
DÓNDE _vToday = ÚLTIMA FECHA ( Date_Reporting[Fecha del informe] )
DÓNDE _FirstWeekday = 1 0 = Domingo , 1 = Lunes , etc

DEVOLUCIÓN...

Cuando vi tu publicación, creé una tabla DayOfWeek usando Enter Data:

TheoC_0-1643754896646.png

A partir de aquí, creé una relación de la tabla DayOfWeek a la tabla Date (de una a muchas de DayOfWeek a Date), luego modifiqué la tabla Date VAR _FirstWeekday a continuación:

Fecha = 

DÓNDE _vYearStart = 2014 Actualizar
DÓNDE _vYearEnd = AÑO ( ÚLTIMA FECHA ( «Tabla»[Fecha de finalización] ) ) Actualizar
DÓNDE _vFinYearMonthStart = 7
DÓNDE _vToday = ÚLTIMA FECHA ( Date_Reporting[Fecha del informe] )
DÓNDE _FirstWeekday = IF ( ISBLANK ( SELECTEDVALUE ( DayofWeek[nDay] ) ) , 1 , SELECTEDVALUE ( DayofWeek[nDay] ) ) 0 = Domingo , 1 = Lunes , etc

DEVOLUCIÓN...

Agregué un menú desplegable al informe usando los campos DayOfWeek y parece funcionar bien y es "dinámico" en el sentido de esto.

¡Espero que esto ayude al mate!

Theo 🙂

Hola, gracias por responder!
Estaba mirando su sugerencia, pero estoy perdido en un punto.

Usted menciona:


@TheoC escribió:

A partir de aquí, creé una relación de la tabla DayOfWeek a la tabla Date (una a muchas de nDate en DayOfWeek to Date), luego modifiqué la tabla Date VAR _FirstWeekday a continuación:

Pero no tienes un 'nDate' en el DayOfWeek. Supongo que quisiste decir nDay, pero cuando intento recrear esto no funciona.

Construí una tabla de fechas básica basada en DAX de la siguiente manera:

Date = 
VAR _MinYear = YEAR ( MIN ( pbi_2y_fact_Contribution[Received Date] ) )
VAR _MaxYear = YEAR ( MAX ( pbi_2y_fact_Contribution[Received Date] ) )
VAR _FirstWeekday = IF ( ISBLANK ( SELECTEDVALUE ( DayofWeek[nDay] ) ) , 1 , SELECTEDVALUE ( DayofWeek[nDay] ) ) // 0 = Sunday , 1 = Monday , etc
RETURN
ADDCOLUMNS (
    FILTER (
        CALENDARAUTO( ),
        AND ( YEAR ( [Date] ) >= _MinYear, YEAR ( [Date] ) <= _MaxYear )
    ),
    "Calendar Year", "CY " & YEAR ( [Date] ),
    "Month Name", FORMAT ( [Date], "mmmm" ),
    "Month Number", MONTH ( [Date] ),
    "Weekday", FORMAT ( [Date], "dddd" ),
    "Weekday number", WEEKDAY( [Date] ),
    "Week Start", [Date] - WEEKDAY([Date],2) + _FirstWeekday
)


Y una tabla DayOfWeek como se describe:

Screen Shot 2022-02-02 at 10.22.49 PM.png

Luego establecí una relación como la que describiste, creo. 😄

Screen Shot 2022-02-02 at 10.23.44 PM.png

Pero esto no parece funcionar, al seleccionar desde la segmentación de datos filtra todos los datos.

Si intento intercambiar la relación, me dice que tengo una dependencia circular.

Screen Shot 2022-02-02 at 10.27.03 PM.png

¿Podría aclarar un poco más su configuración?

Syndicate_Admin
Administrator
Administrator

@EricWafford ,

Traté de hacerlo y pareció funcionar.
Al calcular dinámicamente, generalmente usamos la medida para lograr esto, ya que la columna se almacena estáticamente y no cambia a medida que el usuario filtra.
Tengo tres tablas, una tabla de calendario, una tabla de hechos y una tabla de semanas para la rebanadora. Hay una relación de 1 a muchos entre la tabla de calendario y la tabla de hechos.
Cree las siguientes medidas:

week start day =
VAR _s =
    SWITCH(
        SELECTEDVALUE( 'WEEK'[WeekDay] ),
        "Mon", 1,
        "TUE", 2,
        "WEN", 3,
        "THU", 4,
        "FRI", 5,
        "SAT", 6,
        "SUN", 7
    )
VAR _wn =
    WEEKNUM( ( SELECTEDVALUE( 'Calendar'[Date] ) + 7 - _s + 1 ), 2 ) - 1
VAR _firstweekday =
    DATE( SELECTEDVALUE( 'Calendar'[Date].[Year] ), 1, 1 ) + _s - 5
RETURN
    _firstweekday + ( _wn - 1 ) * 7

La medida ablove se utiliza para devolver el día de inicio de la semana. La siguiente fórmula se coloca en el panel de filtros y el conjunto mostrar elementos es 1.

Measure = IF(SELECTEDVALUE('Calendar'[Date])=[week start day],1)

Resultado:

vchenwuzmsft_0-1643709272499.png


Pbix al final puedes referirte.

Saludos

Equipo de apoyo a la comunidad _ chenwu zhu

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

Gracias por la orientación, he encontrado un problema con su ejemplo, parece que solo funciona cuando el Año es 2021. Modifiqué su ejemplo para abarcar dos años y ahora, cuando el año es 2022, todo está apagado por un día.

Screen Shot 2022-02-02 at 1.00.26 PM.png

Proporcionamos datos durante 4 años, por lo que necesitaré que esto funcione durante varios años. Estoy mirando su fórmula, pero pensé que lo actualizaría sobre el progreso y vería si tenía alguna idea.

@EricWafford ,

Esto se debe a que el semanario de la primera mitad de la última semana del año anterior devolvió 53, mientras que el segundo semestre devolvió 1. Actualicé la medida para evitar esto.

week start day =
VAR _firstday =
    CALCULATE( MIN( 'Calendar'[Date] ), ALL() ) - 7
VAR _s =
    SWITCH(
        SELECTEDVALUE( 'WEEK'[WeekDay] ),
        "Mon", 0,
        "TUE", 1,
        "WEN", 2,
        "THU", 3,
        "FRI", 4,
        "SAT", 5,
        "SUN", 6
    )
VAR _firstweekstartday =
    _firstday - WEEKDAY( _firstday, 3 ) + _s
RETURN
    _firstweekstartday
        + ROUNDDOWN(
            VALUE( SELECTEDVALUE( 'Calendar'[Date] ) - _firstweekstartday ) / 7,
            0
        ) * 7

vchenwuzmsft_0-1643862618117.png

Saludos

Equipo de apoyo a la comunidad _ chenwu zhu

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

¡Gracias por la respuesta!
La corrección proporcionada parece resolver el problema, pero ahora he notado que el gráfico utilizado para demostrar solo muestra el valor de la cuenta para el primer día de una semana determinada, y no una suma de cada semana. El resultado deseado sería una suma semanal basada en este inicio dinámico de la semana.

Screen Shot 2022-02-02 at 10.43.00 PM.png

Creo que esto es del filtro Basado en su Medida que solo devuelve la "Fecha" que coincide con la Fecha de inicio, y no todas las Fechas con esa Fecha de inicio.

¿Hay alguna manera de alterar esto?

@EricWafford ,

Hacer que la relación entre el calendario y el hecho sea inactiva o eliminada.

sum_account =
CALCULATE(
    SUM( 'Fact Table'[Account] ),
    FILTER(
        ALL( 'Fact Table' ),
        'Fact Table'[Date] >= [week start day]
            && 'Fact Table'[Date] <= [week end day]
    )
)

Pbix al final se puede consultar.

Saludos

Equipo de apoyo a la comunidad _ chenwu zhu

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

¡Muchas gracias por el ejemplo! Lo examinaré esta noche. Ya estaba jugando con una idea similar, esto me ayuda a conectar los puntos.

Syndicate_Admin
Administrator
Administrator

@EricWafford , Como lo necesita para el eje y una columna no puede usar el valor de la segmentación de datos, debe estáticar las columnas para cada fecha de inicio de la semana y usar esas

Cualquier semana entre semana - Comience desde cualquier día de la semana
https://community.powerbi.com/t5/Community-Blog/Any-Weekday-Week-Decoding-Date-and-Calendar-2-5-Powe...

He visto su sugerencia y no veo cómo esto podría resolver mi necesidad. No estoy encontrando una manera de cambiar dinámicamente la columna seleccionada utilizada para filtrar mi tabla de hechos, que parece ser lo que esto requeriría. Esta tabla es excelente si escribe informes en los que puede elegir la fecha de inicio de la semana utilizada, pero necesito la capacidad del visor de informes para seleccionarla y cambiarla dinámicamente para todo el informe. ¿Me falta algo en tu sugerencia?

He recreado un ejemplo simple basado en su entrada y mi tabla de hechos y no veo cómo esto permitiría eso.

Screen Shot 2022-01-27 at 9.27.03 AM.png

tal como está, solo puedo elegir una columna para usar para basar la fecha de inicio, a menos que me falte algo.

¡Gracias por responder!


Le estoy dando una oportunidad a esto ahora, solo quiero asegurarme de que soy claro, usaría la tabla que está sugiriendo aquí en reemplazo de nuestra tabla actual de Fecha de inicio de la semana, y luego puedo crear una relación adecuada de 1<->M de la Tabla de fechas a la Tabla de contribuciones, y luego permitir que el usuario seleccione qué Columna de la fecha de inicio de la semana (XXX) como filtro?

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

April Fabric Community Update

Fabric Community Update - April 2024

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