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

Asignación de ingresos a lo largo de varios meses/días

Tengo campañas con pueden ejecutarse desde 1 día hasta varios meses.

Cada campaña tiene ingresos.

Cada campaña tiene una fecha de inicio y finalización.

Aquí hay algunos datos de muestra

Campaña

Empezar

Fin

Importe

971673

10/01/2020

26/10/2020

110000

726270

05/05/2020

09/05/2021

140000

898094

04/08/2021

26/08/2022

190000

972604

31/12/2020

13/10/2021

30000

652157

29/02/2020

20/10/2020

80000

955895

01/05/2020

31/08/2021

150000

556421

25/05/2020

24/05/2021

185000

Quiero poder asignar ingresos a lo largo de los meses, incluso cuando hay meses parciales al comienzo y / o al final del período de la campaña.

Me encontré con este post de @Fowmy .

https://community.powerbi.com/t5/Community-Blog/Split-Amount-Across-Months-Using-Power-Query/ba-p/18...

Su solución Power Query parece hacer exactamente lo que quiero. Descargué su PBIX e intenté que la solución funcionara con mis datos. Soy un novato relativo y había un problema específico que no podía resolver. Su fuente de datos es una hoja de cálculo de Excel. Mis datos ya están en Power BI. Intenté todo lo que se me ocurrió para cambiar el origen para apuntar a mi tabla de Power BI, pero fallé.

Ben_G_0-1656769518068.png

He publicado un comentario para fowmy pidiendo ayuda, pero tengo una fecha límite para el cliente para cumplir, así que también estoy pidiendo ayuda a la comunidad en general.

Mi petición a los expertos aquí es doble:

Uno: ¿puede ayudarme a cambiar el origen de datos para leer desde Power BI?

Dos: ¿hay una manera más fácil / mejor de hacer esto?

Cualquier ayuda sería muy apreciada.

Mi versión actualizada del PBIX de fowmy está vinculada aquí.

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Hola

En sus imágenes, ¿a qué nivel de granularidad le gustaría ir: nivel de día o solo nivel de mes? Para 961673, muestre claramente cuánta cantidad debe aparecer para cada mes. Por favor, explique también cómo llegó a la cantidad para cada mes.

Hola @Ashish_Mathur
Así que modelé los datos primero en Excel para saber exactamente el resultado que quería.

En esta hoja de cálculo vinculada (Month Year verify v2) he resaltado los datos para 961673 mostrar lo que estoy buscando obtener.
Nivel de granularidad: me gustaría poder ir a los valores diarios (como en la hoja de cálculo). Tengo una tabla de fechas en mi solución completa.
PBIX actualizado (Allocation2). Estoy buscando agregar código M actualizado a la consulta 'Campaign_calcs'.

Ben_G_0-1657176173249.png

Gracias por cualquier ayuda con el código M actualizado o una solución DAX (en un worls perfecto tendría una medida que haría el cálculo 🤞)

Ben_G

Hola

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Untitled.png

@Ashish_Mathur

Disculpas por la lenta respuesta. Acabo de regresar de unas semanas de vacaciones.

Descargaré su PBIX y echaré un vistazo.

Muchas gracias.

Ben G

Syndicate_Admin
Administrator
Administrator

@DataInsights

Gracias de nuevo por su aportación. Ahora he creado una tabla a partir de la tabla Campañas.

dejar

Source = Table.SelectColumns(Campaigns,{"Campaign","Start","End","Amount"})

en

Fuente

Columnas:

  • Campañas es texto
  • Inicio y fin son fechas
  • La cantidad es un número entero

Tratando de usar su M-code, estoy luchando para descubrir cómo eliminar las transformaciones, etc.

Si hay algún chnace podrías volver a trabajar tu código para que se ejecute directamente después de mi fuente = table.selectcolumn... (es decir, comenzando con el paso "Función personalizada invocada"?) Estaría enormemente agradecido.

Gracias de antemano.

Syndicate_Admin
Administrator
Administrator

@DataInsights

Gracias por su ayuda. Sigo teniendo problemas.

La solución actualizada especifica

'Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("XY/LDQQhDENbQ...'

Lo que estaba tratando de hacer era leer de una tabla existente y seleccionar columnas específicas,

Ejemplo:

  • Nombre de la tabla = Campañas
  • Nombre de columna = Campaña - Texto
  • Nombre de columna = Fecha de inicio - Fecha
  • Nombre de columna = Fecha de finalización - Fecha
  • Ingresos por nombre de columna - Número

Entonces, para la fuente, por ejemplo, usando table.addrows o table.addcolumns, me gustaría poder especificar las filas / columnas específicas y posiblemente agregar otras. ¿Puede ayudarme a especificar la fuente?

Volviendo a una vista de nivel superior, eche un vistazo a esta hoja de cálculo. En ella tengo pestañas con:

  • Datos
  • Tabla de cálculo
  • Mesa plana
  • Tabla dinámica

En un mundo perfecto en Power BI, me gustaría poder crear una tabla plana (vinculada a mi tabla de fechas) que luego podría usar para crear una matriz en mis paneles. ¿Podrías ayudarme con eso? Encontré la solución de Foumy que pensé que funcionaría, pero lo que estoy pidiendo aquí sería una mejor solución desde mi perspectiva.

Gracias de antemano por cualquier ayuda.

Syndicate_Admin
Administrator
Administrator

@Ben_G,

Pruebe esto en Power Query. Tuve que agregar la columna Días a la tabla Campaña para que la solución funcionara. Luego, copié el código M que comienza con el paso "Función personalizada invocada" y lo pegué en la tabla Campaña.

¡Gran solución, @Fowmy!

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("XY/LDQQhDENbQZxHGycQSGpB038bCyzzYSUORvaT49aiVy41xSMyMUggGLqrcn0CMw4AHyDE82ixSpE6HCj1t2JKPiRPIu+EucFzd4zyFbJVIRPwHfDegQGwUOLXWZzukrQjRYW1dkNI/D3kXhXsr0TVXOfpd4Wtut8M3YEZlddiyU/W9MmeXw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Campaign = _t, Start = _t, End = _t, Amount = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Campaign", Int64.Type}, {"Start", type date}, {"End", type date}, {"Amount", Int64.Type}}),
    #"Replaced Value" = Table.ReplaceValue(#"Changed Type",null,556421,Replacer.ReplaceValue,{"Campaign"}),
    #"Added Custom2" = Table.AddColumn(#"Replaced Value", "Days", each Duration.Days([End] - [Start]) + 1),
    #"Changed Type3" = Table.TransformColumnTypes(#"Added Custom2",{{"Days", Int64.Type}}),
    #"Invoked Custom Function" = Table.AddColumn(#"Changed Type3", "Months", each fnPeriod([Start], [End])),
    #"Expanded Months" = Table.ExpandTableColumn(#"Invoked Custom Function", "Months", {"fDate", "fDay"}, {"fDate", "fDay"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Expanded Months",{{"fDate", type date}, {"fDay", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type1", "Monthly Amount", each [Amount]/[Days] * [fDay]),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Month-Year", each Date.EndOfMonth([fDate])),
    #"Removed Other Columns" = Table.SelectColumns(#"Added Custom1",{"Campaign", "Monthly Amount", "Month-Year"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Removed Other Columns",{{"Monthly Amount", type number}, {"Month-Year", type date}})
in
    #"Changed Type2"

Helpful resources

Announcements
August 2022 update 768x460.jpg

Check it Out!

Click here to learn more about the August 2022 updates!

August 1 episode 9_no_dates 768x460.jpg

The Power BI Community Show

Watch the playback when Priya Sathy and Charles Webb discuss Datamarts! Kelly also shares Power BI Community updates.

Power Platform Conf 2022 768x460.jpg

Join us for Microsoft Power Platform Conference

The first Microsoft-sponsored Power Platform Conference is coming in September. 100+ speakers, 150+ sessions, and what's new and next for Power Platform.

Top Solution Authors