Check your eligibility for this 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700.
Get StartedDon't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.
Tengo una tabla de fechas.
Dentro de esta tabla de fechas tengo varias columnas calculadas (booleanas).
Hoy - (Verdadero/Falso)
Día hábil anterior - (Verdadero/Falso)
Semana actual - (Verdadero/Falso)
La semana pasada - (Verdadero/Falso)
Mes actual - (Verdadero/Falso)
Último mes - (Verdadero/Falso)
etc, etc....
He estado intentando esto de vez en cuando por un tiempo y parece que no puedo encontrar una solución para cada una de estas columnas.
Idealmente, podría crear una columna de orden de segmentación que diga algo como:
IF('Fechas'[Hoy] = VERDADERO, 1
IF('Fechas'[Día hábil anterior] = TRUE, 2
IF('Fechas'[Esta semana] = TRUE, 3
IF('Fechas'[Última semana] = TRUE, 4
IF('Fechas'[Este mes] = TRUE, 5
etc, etc....
Sin embargo, [Today] se superpone [This Week], por lo que ambas cosas son ciertas.
[Esta semana] se superpone [Este mes], y así sucesivamente... Por lo tanto, intentar crear una columna de orden de segmentación de datos no funciona exactamente.
Siento que debería poder usar SWITCH() de alguna manera, pero estoy perdido. ¿Pueden ayudarme aquí y poner una solución a mis constantes golpes de cabeza? ¡Muchas gracias!
Bien, después de prueba y muchos errores, pude hacer esto usando SWITCH, pero de una manera completamente diferente a la que imaginé inicialmente. De hecho, estoy emocionado de haber podido aprenderlo de esta manera porque esto me lleva en una nueva dirección de pensamiento con respecto a las segmentaciones de fechas dinámicas en relación con las medidas.
Solución:
Paso 1: Cree una tabla de selección de medidas:
MeasureSelection =
DATATABLE(
"MeasureName", STRING,
{
{"WTD Shipments"},
{"MTD Shipments"},
{"QTD Shipments"},
{"YTD Shipments"},
{"MoM Change"},
{"MoM % Change"},
{"QoQ Change"},
{"QoQ % Change"},
{"YoY Change"},
{"YoY % Change"}
}
)
Paso 2: Crear medida con variables que describen el desglose de la serie temporal en una medida específica, en este caso, elegí usar mi medida [Envíos]:
Dynamic Shipments =
VAR CurrentWeekShipments =
CALCULATE(
[Shipments],
FILTER(
ALL('Dates'),
'Dates'[Date] >= DATEADD('Dates'[Date], 1 - WEEKDAY(MAX('Dates'[Date]), 2), DAY) &&
'Dates'[Date] <= MAX('Dates'[Date])
)
)
VAR CurrentMonthShipments = CALCULATE([Shipments], DATESMTD('Dates'[Date]))
VAR PreviousMonthShipments = CALCULATE([Shipments], DATESMTD(DATEADD('Dates'[Date], -1, MONTH)))
VAR CurrentQuarterShipments = CALCULATE([Shipments], DATESQTD('Dates'[Date]))
VAR PreviousQuarterShipments = CALCULATE([Shipments], DATESQTD(DATEADD('Dates'[Date], -1, QUARTER)))
VAR CurrentYearShipments = CALCULATE([Shipments], DATESYTD('Dates'[Date]))
VAR PreviousYearShipments = CALCULATE([Shipments], DATESYTD(SAMEPERIODLASTYEAR('Dates'[Date])))
VAR MoMChange = CurrentMonthShipments - PreviousMonthShipments
VAR MoMPercentChange = IF(PreviousMonthShipments = 0, BLANK(), MoMChange / PreviousMonthShipments)
VAR QoQChange = CurrentQuarterShipments - PreviousQuarterShipments
VAR QoQPercentChange = IF(PreviousQuarterShipments = 0, BLANK(), QoQChange / PreviousQuarterShipments)
VAR YoYChange = CurrentYearShipments - PreviousYearShipments
VAR YoYPercentChange = IF(PreviousYearShipments = 0, BLANK(), YoYChange / PreviousYearShipments)
VAR SelectedMeasure = SELECTEDVALUE('MeasureSelection'[MeasureName]) // Adjust as needed for your measure selection mechanism
RETURN
SWITCH(
SelectedMeasure,
"WTD Shipments", CurrentWeekShipments,
"MTD Shipments", CurrentMonthShipments,
"QTD Shipments", CurrentQuarterShipments,
"YTD Shipments", CurrentYearShipments,
"MoM Change", MoMChange,
"MoM % Change", MoMPercentChange,
"QoQ Change", QoQChange,
"QoQ % Change", QoQPercentChange,
"YoY Change", YoYChange,
"YoY % Change", YoYPercentChange,
BLANK()
)
Paso 3: Agregue una segmentación de datos al lienzo y arrastre [MeasureName] desde la tabla 'MeasureSeleciton' que creó.
Paso 4: Agregue un gráfico de columnas apiladas (o un gráfico de su elección) al lienzo. Agregue el campo Fecha al eje X y la Medida de envíos dinámicos al eje Y. Ahora puede utilizar la segmentación de datos para filtrar las series temporales deseadas a través de la medida [Envíos dinámicos].
Paso adicional si lo desea:
Para que mi gráfico fuera más legible, opté por otra segmentación que me permitía cambiar la vista del gráfico según el día, la semana, el mes, el trimestre y el año. Simplemente creé un parámetro de campo a través de algunas columnas calculadas que creé dentro de mi tabla de fechas:
Date Graph Filter = {
("Date", NAMEOF('Dates'[Date]), 0),
("Week", NAMEOF('Dates'[WeekEnding]), 1),
("Month", NAMEOF('Dates'[MonthEnding]), 2),
("Quarter", NAMEOF('Dates'[QuarterEnding]), 3),
("Year", NAMEOF('Dates'[Year]), 4)
}
Agregué los campos a través de Power Query usando el lenguaje de consulta M:
WeekEnding = Date.EndOfWeek([Date])
MonthEnding = Date.EndOfMonth([Date])
QuarterEnding = Date.EndOfQuarter([Date])
YearEnding = Date.EndOfYear([Date])
Eventualmente, tengo la intención de crear una tabla de selección de medidas dinámicas maestras que me permita agregar una segmentación adicional al lienzo. Esta segmentación me permitiría examinar las medidas (medidas de Dyanmic como [Envíos de Dyanmic] y cambiar entre ellas a través de la segmentación en lugar de tener varias páginas e informes para cada medida dinámica.
Espero que esta documentación ayude a alguien en el futuro. Me costó un poco cogerle el tranquillo.
Esa podría ser una forma, también puede usar parámetros de campo. o considere la posibilidad de agrupar los cálculos si los cálculos se van a realizar en una vista de tabla
Quizás la mejor manera de hacerlo... y estoy escupiendo aquí... en lugar de crear cientos de medidas, puedo crear algunas medidas con las otras medidas contenidas en el VAR
es decir,
Cuarto de medida =
var QTD = qtd(ventas)
var QTDlastyear = sameperiodlastyear(QTD)
etc...
y luego, de alguna manera, create switch en la instrucción RETURN
Esencialmente, quiero que el Slicer tenga las opciones indicadas anteriormente ...
Hoy, AntBizday, Esta Semana, La Semana Pasada, etc...
Este Slicer se colocará en 2 informes diferentes...
Uno será el análisis comparativo... es decir, "¿Cómo me va esta semana en Ventas...?" vs "Hmm, ¿dónde estábamos el año pasado?"
el otro informe se basa en KPI. Tenemos objetivos diarios que cumplir, así como semanales, mensuales, trimestrales, etc. El objetivo final era disponer de una segmentación de datos para cambiar de vista rápidamente.
Estoy abierto a sugerencias. Desde el punto de vista de la eficiencia, pensé que la segmentación sería mucho más eficiente que tratar de crear cientos de medidas para cosas como SAMEPERIODLASTYEAR, y MTD, QTD, YTD, etc.
Creo que estoy confundido acerca de tu objetivo final,
es decir, cuando un día cumple con múltiples condiciones, como el miércoles. ¿Qué quieres conseguir con esta cortadora de fechas?
El mismo problema de siempre.... solapar. Así que en este caso,
'Hoy' no existe, ni tampoco 'Mes actual'
'CurrentWeek' muestra solo 1 día (porque es miércoles ayer (prevbizday) ya está tomado, lo que deja espacio para que solo se marque 1 día.... y así sucesivamente. He estado por este camino... Simplemente no conozco una solución viable.
Bien, si estoy entendiendo correctamente, una declaración Switch debería hacer el trabajo, ya que se detiene una vez que una afirmación es verdadera
Así que debería ser algo como esto
Switch(true(),
'Fechas'[Hoy] = VERDADERO, 1,
'Fechas'[Día hábil anterior] = TRUE, 2,
'Fechas'[Esta semana] = VERDADERO, 3,
'Fechas'[última semana] = VERDADERO, 4,
'Fechas'[Este mes] = VERDADERO, 5
Etc..
¿Mi respuesta te ayudó a resolver el problema? Por favor, acéptelo como la solución de lo que hace 🙂
La segmentación es para los grandes pelucones de C-Suite que no quieren tener las opciones o la comprensión de una segmentación de fechas relativa. Quieren ver un descenso con las selecciones antes mencionadas.
También voy a contarle al futuro aquí y apuesto a que solo van a pedir diferentes páginas de informes que muestren solo "esta semana", "este mes", "este trimestre", en cuyo caso la cortadora me beneficia desde el punto de vista de la eficiencia
Hola stevie, me preguntaba si probaste la opción de segmentación de fechas relativas, solo estoy tratando de comprender tu escenario un poco más para ayudarte
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.