cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

SAMEPERIODLASTYEAR() calc en blanco cuando se utiliza la segmentación de tiempo MTD/QTD/YTD

Tengo tres tablas de calendario: DimDate es la tabla de dimensiones en el almacén que trae fechas a las tablas de hechos, Calendario se creó para poder definir un valor de "Inicio de semana" y YTD/QTD/MTD es para filtrar en intervalos de tiempo distintos.

Estoy tratando de crear tarjetas KPI que miden la suma de los ingresos durante el período seleccionado (en este caso MTD) y luego la suma de ingresos durante el mismo período de tiempo, pero en el año anterior. Mi fórmula DAX es:

Revenue Prior = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Calendar'[Date]))

Cuando tiro los datos de Ingresos Anteriores a una tarjeta y filtro con Calendario[Fecha] funciona perfectamente, pero cuando tiro YTD/QTD/MTD/WTD[Selección] me da un error (en blanco). No estoy seguro de cuál podría ser el problema ya que las tres tablas de fechas deben estar conectadas correctamente entre sí. ¿Me estoy perdiendo algo obvio?

img.png

img2.png

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

@cbb4 Los datos de muestra ayudarían enormemente. Precaución, sin embargo, cuando te alejas fuera de los límites muy confinados de las funciones de inteligencia del tiempo las cosas empiezan a ponerse raras.

Estas son algunas medidas típicas de inteligencia de fecha escritas en forma de grupos de cálculo (abajo) Estas funcionarán con fechas de calendario o fechas fiscales y son mucho más flexibles que las funciones de inteligencia de tiempo predeterminadas. Usted puede encontrar esto útil - https://community.powerbi.com/t5/Community-Blog/To-bleep-With-Time-Intelligence/ba-p/1260000

Además, mira si mi Time Intelligence the Hard Way proporciona una forma diferente de lograr lo que estás buscando.

https://community.powerbi.com/t5/Quick-Medidas-Galería/Time-Intelligence-quot-The-Hard-Way-quot-**bl...

YTD

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[CalendarYear] = MAX('Dates'[CalendarYear]) &&

'Fechas'[Fecha] <= MAX('Fechas'[Fecha])))

Mtd

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[CalendarYear] = MAX('Dates'[CalendarYear]) &&

'Dates'[MonthNumberOfYear] = MAX('Dates'[MonthNumberOfYear])

&& 'Fechas'[Fecha] <= MAX('Fechas'[Fecha])))

Qty

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[CalendarYear] = MAX('Dates'[CalendarYear]) &&

'Fechas'[CalendarQuarter] = MAX('Dates'[CalendarQuarter]) &&

'Fechas'[Fecha] <= MAX('Fechas'[Fecha])))

Py

VAR __MaxDate = MAX('Fechas'[Fecha])

VAR __MinDate = MIN('Fechas'[Fecha])

devolución

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[Fecha] >=

FECHA (AÑO(__MinDate)-1,MONTH(__MinDate),DAY(__MinDate)) &&

'Fechas'[Fecha] <=

FECHA (AÑO(__MaxDate)-1,MES(__MaxDate),DÍA(__MaxDate)))))

PY YTD

VAR __MaxDate = MAX('Fechas'[Fecha])

devolución

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[CalendarYear] =

MAX('Fechas de pedido'[CalendarYear])-1 &&

'Fechas'[Fecha] <=

FECHA(

AÑO(__MaxDate)-1,

MES(__MaxDate),

DÍA(__MaxDate))))

Yoy

SELECTEDMEASURE()

- CALCULATE(SELECTEDMEASURE(),'Date Intelligence Group'[Nombre] = "PY")

YOY %

DIVIDIR(

CALCULATE(SELECTEDMEASURE(),'Date Intelligence Group'[Nombre] ="YOY"),

CALCULATE(SELECTEDMEASURE(),'Date Intelligence Group'[Nombre] ="PY"))

Las medidas equivalentes que utilizan funciones dax time intelligence son las siguientes:

  • Corriente: SELECTEDMEASURE()
  • YTD: CALCULATE(SELECTEDMEASURE(), DATESYTD('Order Dates'[Date]))
  • MTD: CALCULATE(SELECTEDMEASURE(), DATESMTD('Order Dates'[Date]))
  • QTD: CALCULATE(SELECTEDMEASURE(), DATESQTD('Order Dates'[Date]))
  • PY: CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR('Fechas del pedido'[Fecha]))
  • PY YTD: CALCULATE(SELECTEDMEASURE(),SAMEPERIODLASTYEAR('Order Dates'[Date]),'Time Intelligence Group'[Name]= "YTD")
  • YOY: SELECTEDMEASURE()-CALCULATE(SELECTEDMEASURE(),'Time Intelligence Group'[Name] = "PY")
  • YOY %: DIVIDE(CALCULATE(SELECTEDMEASURE(),'Time Intelligence Group'[Name] ="YOY"),CALCULATE(SELECTEDMEASURE(),'Time Intelligence Group'[Name] ="PY"))

View solution in original post

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

No hay @cbb4

"Cuando extrae los datos de Ingresos Anteriores a una tarjeta y filtro con Calendario[Fecha] funciona perfectamente, pero cuando tiro YTD/QTD/MTD/WTD[Selección] me da un error (en blanco) ."

Bueno, el comportamiento anterior es obvio cuando sabes cómo funcionan los calcs de información de tiempo y los calendarios adecuados en PBI :)) Al filtrar la tabla más a la izquierda también estás colocando filtros (a través de la inyección de filtros, no a través de la expansión de la tabla, que es importante entender) implícitamente en Calendar. A continuación, si usa las funciones de información de tiempo, solo funcionan en la tabla Calendario y no pueden llegar a la otra tabla que todavía filtra Calendario. Por lo tanto, la intersección de lo que hace la función y los filtros procedentes de la otra tabla termina en un conjunto vacío y, por lo tanto, los espacios en blanco.

Mi pregunta sería la siguiente: ¿Por qué te unes al "YTD/..." mesa a Calendario? En mi opinión, debería ser una mesa desconectada. Si ese fuera el caso, no tendrías este problema en absoluto. Sólo tendría que codificar las medidas correctamente en un modelo de este tipo (tal vez usando grupos de cálculo para detener la proliferación de medidas).

Tenía la impresión de que el "YTD/..." tabla tendría que estar conectado al calendario o de lo contrario no funcionará. Si quería ver los valores del mes a la fecha y selecciono "MTD" sin la conexión a Calendario no pasa nada.

Syndicate_Admin
Administrator
Administrator

@cbb4 Los datos de muestra ayudarían enormemente. Precaución, sin embargo, cuando te alejas fuera de los límites muy confinados de las funciones de inteligencia del tiempo las cosas empiezan a ponerse raras.

Estas son algunas medidas típicas de inteligencia de fecha escritas en forma de grupos de cálculo (abajo) Estas funcionarán con fechas de calendario o fechas fiscales y son mucho más flexibles que las funciones de inteligencia de tiempo predeterminadas. Usted puede encontrar esto útil - https://community.powerbi.com/t5/Community-Blog/To-bleep-With-Time-Intelligence/ba-p/1260000

Además, mira si mi Time Intelligence the Hard Way proporciona una forma diferente de lograr lo que estás buscando.

https://community.powerbi.com/t5/Quick-Medidas-Galería/Time-Intelligence-quot-The-Hard-Way-quot-**bl...

YTD

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[CalendarYear] = MAX('Dates'[CalendarYear]) &&

'Fechas'[Fecha] <= MAX('Fechas'[Fecha])))

Mtd

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[CalendarYear] = MAX('Dates'[CalendarYear]) &&

'Dates'[MonthNumberOfYear] = MAX('Dates'[MonthNumberOfYear])

&& 'Fechas'[Fecha] <= MAX('Fechas'[Fecha])))

Qty

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[CalendarYear] = MAX('Dates'[CalendarYear]) &&

'Fechas'[CalendarQuarter] = MAX('Dates'[CalendarQuarter]) &&

'Fechas'[Fecha] <= MAX('Fechas'[Fecha])))

Py

VAR __MaxDate = MAX('Fechas'[Fecha])

VAR __MinDate = MIN('Fechas'[Fecha])

devolución

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[Fecha] >=

FECHA (AÑO(__MinDate)-1,MONTH(__MinDate),DAY(__MinDate)) &&

'Fechas'[Fecha] <=

FECHA (AÑO(__MaxDate)-1,MES(__MaxDate),DÍA(__MaxDate)))))

PY YTD

VAR __MaxDate = MAX('Fechas'[Fecha])

devolución

CALCULATE(SELECTEDMEASURE(),

FILTRO (ALL('Fechas'),

'Fechas'[CalendarYear] =

MAX('Fechas de pedido'[CalendarYear])-1 &&

'Fechas'[Fecha] <=

FECHA(

AÑO(__MaxDate)-1,

MES(__MaxDate),

DÍA(__MaxDate))))

Yoy

SELECTEDMEASURE()

- CALCULATE(SELECTEDMEASURE(),'Date Intelligence Group'[Nombre] = "PY")

YOY %

DIVIDIR(

CALCULATE(SELECTEDMEASURE(),'Date Intelligence Group'[Nombre] ="YOY"),

CALCULATE(SELECTEDMEASURE(),'Date Intelligence Group'[Nombre] ="PY"))

Las medidas equivalentes que utilizan funciones dax time intelligence son las siguientes:

  • Corriente: SELECTEDMEASURE()
  • YTD: CALCULATE(SELECTEDMEASURE(), DATESYTD('Order Dates'[Date]))
  • MTD: CALCULATE(SELECTEDMEASURE(), DATESMTD('Order Dates'[Date]))
  • QTD: CALCULATE(SELECTEDMEASURE(), DATESQTD('Order Dates'[Date]))
  • PY: CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR('Fechas del pedido'[Fecha]))
  • PY YTD: CALCULATE(SELECTEDMEASURE(),SAMEPERIODLASTYEAR('Order Dates'[Date]),'Time Intelligence Group'[Name]= "YTD")
  • YOY: SELECTEDMEASURE()-CALCULATE(SELECTEDMEASURE(),'Time Intelligence Group'[Name] = "PY")
  • YOY %: DIVIDE(CALCULATE(SELECTEDMEASURE(),'Time Intelligence Group'[Name] ="YOY"),CALCULATE(SELECTEDMEASURE(),'Time Intelligence Group'[Name] ="PY"))

View solution in original post

Esto es genial. ¡Gracias por compartir! Me sumergiré más en estas medidas para ver si puedo hacer que funcionen. Si no, reuniré algunos datos de ejemplo para compartir.

Helpful resources

Announcements
PBI User Groups

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group!

MBAS on Demand

Microsoft Business Applications Summit sessions

On-demand access to all the great content presented by the product teams and community members! #MSBizAppsSummit #CommunityRocks

Get Ready for Power BI Dev Camp

Power BI Dev Camp - June 24th

Mark your calendars and join us for our next Power BI Dev Camp!