Cómo actualizar dinámicamente MTD/QTD/YTD para SSAS MD

Un usuario Pregunto ✅

parar2k

Hola a todos,

Hasta ahora, esta es una comunidad muy útil y capaz de superar algunos de los desafíos que tengo al usar SSAS MD y PowerBI.

Ahora aquí hay uno interesante y estoy seguro de que también es fácil. Estamos planeando tener un tablero que mostrará MTD/QTD/YTD al conectarse a SSAS MD y queremos que este tablero se base siempre en la fecha de hoy. Tengo un cálculo en el cubo, pero el usuario debe seleccionar la fecha para obtener MTD/QTD/YTD. Lo que debo hacer para actualizar automáticamente todos estos gráficos en el tablero. Aquí están mis cálculos en el cubo que funciona cuando el usuario selecciona la fecha en la segmentación en PowerBI

Cálculo basado en la fecha seleccionada

MTD -> SUMA(MTD([Dates].[Calendar].MiembroActual), [Measures].[Transaction Count])

QTD -> SUMA(QTD([Dates].[Calendar].MiembroActual), [Measures].[Transaction Count])

YTD -> SUMA(YTD([Dates].[Calendar].MiembroActual), [Measures].[Transaction Count])

Período anterior basado en la fecha seleccionada en la segmentación

MTD Prev Period -> SUM(MTD(ParallelPeriod([Dates].[Calendar].[Month], 1, [Dates].[Calendar].Miembro actual)), [Measures].[Transaction Count])

QTD Período anterior -> SUMA (QTD (Período paralelo ([Dates].[Calendar].[Quarter], 1, [Dates].[Calendar].Miembro actual)), [Measures].[Transaction Count])

YTD Prev Period -> SUM(YTD(ParallelPeriod([Dates].[Calendar].[Year], 1, [Dates].[Calendar].Miembro actual)), [Measures].[Transaction Count])

Solución propuesta (solo dando un ejemplo de MTD)

SUMA( {StrToMiembro(«[Dates].[Calendar].[Month].&[«+vba!Format(NOW(),»yyyy»)+»]&[» + vba!Format(NOW(),»MM») + «]», LIMITADO)},[Measures].[Transaction Count] )

Estos son los desafíos que veo con este enfoque:

– Si now() está codificado en el campo calculado en el cubo, si el usuario selecciona otra fecha en la segmentación, siempre mostrará el MTD actual y puede ser engañoso.

– ¿Cómo lograr el período anterior basado en la fórmula anterior?

– Estoy seguro de que hay una mejor manera de lograr esto, ¿cuál es esa?

Gracias por adelantado.

PAGS

fbrossard

Vale @parry2k

Mantenga su cálculo de MTD, QTD, YTD basado en su [Dates].[Calendar] jerarquía utilizando currentMember.

Su tarjeta muestra «en blanco» porque su contexto de filtro no especifica ningún valor en su [Dates].[Calendar] jerarquía.

Para hacer eso dinámicamente:

1. cree un miembro y un conjunto dinámico para identificar su valor actual

CREATE MEMBER CURRENTCUBE.[Measures].[Now]
AS Now(), 
FORMAT_STRING = "YYYYMMDD", 
VISIBLE = 0 , DISPLAY_FOLDER = 'Calculation Members';
 
CREATE DYNAMIC SET CURRENTCUBE.[Today]
AS StrToMember("[Date].[Calendar YQMD].[Date].&[" + CSTR(YEAR([Measures].[Now]) * 10000 + Month([Measures].[Now]) * 100 + Day([Measures].[Now])) + "]"), DISPLAY_FOLDER = 'Named Sets';

2. Alcance su MTD, QTD, YTD y fuerce su [Dates].[Calendar] jerarquía cuando el nivel ordinal no es tan bueno como la profundidad:

SCOPE ([Measures].[Sales Amount YTD]); 
THIS = 
    CASE
        WHEN [Date].[Calendar YQMD].level.ordinal = 0 THEN
            SUM([Today],[Measures].[Sales Amount YTD])
        ELSE
            [Measures].[Sales Amount YTD]
    END; 
END SCOPE; 

SCOPE ([Measures].[Sales Amount MTD]); 
THIS = 
    CASE
        WHEN [Date].[Calendar YQMD].level.ordinal < 3 THEN
            SUM([Today],[Measures].[Sales Amount MTD])
        ELSE
            [Measures].[Sales Amount MTD]
    END; 
END SCOPE; 

También puede modificar su cubo y establecer un valor predeterminado para su dimensión de fecha.

Anónimo

En respuesta a fbrossard

Hola,

Probé su código y tengo un problema con el conjunto con nombre de hoy. Cuando lo uso en la fórmula Sum, aparece el siguiente error: “Error de OLE DB: error de OLE DB u ODBC: la conversión falló al convertir el valor nvarchar ‘Hoy’ al tipo de datos tinyint.; 22018.”

Hice algunas pruebas y no puedo usar un conjunto con nombre en una suma.

Me he perdido algo ?

Gracias

parar2k

En respuesta a fbrossard

Gracias por la solución, pero veo un desafío con esto. Si el usuario coloca una segmentación de fechas en el informe y selecciona una fecha, siempre mostrará MTD/YTD para hoy.

Puede ser que necesite modificar la solución para que funcione.

Gracias,

PAGS

fbrossard

En respuesta a parar2k

En absoluto, mostrará el MTD, YTD para la fecha seleccionada.

Cuando no se selecciona una fecha, se calcula automáticamente en el día de hoy o en la fecha/período que seleccione.

PowerBI_Dymanmic_MTD_YTD_SSAS_MD.png

Creo que puede lograr lo que busca si nunca usa la función MDX NOW().

Simplemente codifique sus medidas calculadas usando el [Dates].[Calendar].currentMember como lo ha hecho y hágalos bien para elegir manualmente la fecha.

Luego, en su dimensión de fecha, agregue una nueva columna llamada [Days from today] y convertirlo en DATEDIFF(DAY,clave de fecha,OBTENER LA FECHA()).

Luego en su Power BI puede seleccionar el [Days from today] filtre en su página de informe y configúrelo en = 0 (o 1 para ayer)

parar2k

En respuesta a Phil_Seamark

Hola Jolly,

Me alegro de que hayas propuesto esta solución que ya probé. cuando pongo el [Date From Today] en el filtro, no muestra automáticamente MTD/QTD/YTD.

Solo para probar, agregué un cortador de fechas en PowerBI y filtré en [Days From Today] y veo que la segmentación de fechas muestra la fecha correcta en función de la [Days From Today] pero MTD/QTD/YTD solo se actualizará cuando realmente seleccione la fecha en la segmentación, no estoy seguro si me estoy perdiendo algo aquí.

Gracias,

PAGS

En respuesta a parar2k

¿Qué tipo de visual estás usando para tu MTD? ¿Está tratando de mostrar un solo valor? ¿O está tratando de mostrar esto como una tendencia a lo largo del tiempo?

parar2k

En respuesta a Phil_Seamark

Solo lo estoy mostrando como una tarjeta. ¡Gracias!

parar2k

En respuesta a parar2k

Independientemente del desafío que tengo en este momento para mostrar el MTD, pero mencionaste un punto interesante sobre la tendencia del MTD. Dado que estaremos filtrando datos cuando [Days From Today] = 0, todo el mes anterior no cumplirá con el requisito de filtro y será excluido. ¿Otro desafío, creo?

Gracias,

PAGS

En respuesta a parar2k

Creo que he resuelto esto enfrentando un problema similar. Mi solución fue basar mis medidas calculadas en la clave de la Dimensión de fecha y no en ningún atributo. Esto podría significar usar la función Descendientes MDX para desplegar a los niños para resumir. No he jugado con esto usando MTD/QTD, etc. pero debería funcionar igual.

por ejemplo, en su medida calculada, estructure su MDX para que solo use la clave, que es más probable que esté en el nivel de fecha. En su dimensión de fecha, busque la columna con el icono de llave.

parar2k

En respuesta a Phil_Seamark

Desafortunadamente, no tuve éxito, usé el campo datekey en la función MTD() pero aún no tuve éxito. No estoy seguro de qué más probar o puede haber algo que no funciona en mi extremo.

Gracias,

PAGS

parar2k

En respuesta a parar2k

Cualquier aporte adicional o ayuda de alguien.

Gracias,

PAGS

parar2k

En respuesta a parar2k

¿Alguien más que pueda ayudar con esto? Parece que es un requisito muy básico, no puedo avanzar con el panel de PowerBI hasta que se resuelva. Espero que alguien pueda proporcionar una solución.

Gracias,

PAGS

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *