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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Anonymous
Not applicable

Código M dinámico

No tengo conocimiento sobre el código M. Estoy obteniendo una tabla Date de la base de datos SQL para power bi cube. Sus fechas van hasta el año 2024. Quiero limitarlo hasta el próximo 31 de marzo de la fecha actual dinámicamente.

Gracias

1 ACCEPTED SOLUTION

@seki56 ¡Creo que lo tengo!

let
    Source = Sql.Databases("DatabaseName"),
    AdventureWorksDW2012 = Source{[Name="AdventureWorksDW2012"]}[Data],
    dbo_DimDate = AdventureWorksDW2012{[Schema="dbo",Item="DimDate"]}[Data],
    #"Filtered Rows" = Table.SelectRows(dbo_DimDate, 
        each if [FullDateAlternateKey] <= #date(Date.Year(DateTime.LocalNow()), 3, 31) 
        then [FullDateAlternateKey] <= #date(Date.Year(DateTime.LocalNow()), 3, 31) 
        else [FullDateAlternateKey] <= #date(Date.Year(DateTime.LocalNow()) + 1, 3, 31)
    )
in
    #"Filtered Rows"

¡Pruébalo y avísame! 🙂

View solution in original post

18 REPLIES 18
littlemojopuppy
Community Champion
Community Champion

@seki56 sentimos este y la otra pregunta tomó un par de días para resolver. Le agradecería que marcar la solución tanto en esta como en la pregunta original.

¡Felices vacaciones!

PhilipTreacy
Super User
Super User

No @seki56

Sí, entiendo que tiene una tabla de fechas de SQL, pero si solo desea una lista finita de fechas desde hoy hasta el próximo 31 de marzo, ¿no es igual de fácil (¿más fácil?) crear esa lista en lugar de cargar una lista de fechas y luego manipularlas para excluir fechas/filas que no desea?

¿O tal vez hay más? ¿Está cargando algo más que fechas desde SQL? Si es así, ¿está hablando de la necesidad de filtrar las filas para mantener cualquier adicióna datos en cada registro, no sólo las fechas?

saludos

Phil



Did I answer your question? Then please mark my post as the solution.
If I helped you, click on the Thumbs Up to give Kudos.


Blog :: YouTube Channel :: Connect on Linkedin


Proud to be a Super User!


Anonymous
Not applicable

@PhilipTreacy

La tabla de fechas comienza a partir de 2015 y ya tiene campos necesarios para los cálculos, y las fechas pasadas son necesarias para el cálculo basado en Time Intelligence. El ejercicio futuro comienza a partir del 1 de abril. Con las fechas va hasta 2024 desordenar el cálculo de Time Intelligence, es por eso que necesito limitar la tabla de fechas en la fecha final del año FY con su otra información.

PhilipTreacy
Super User
Super User

No @seki56

Si solo necesita una lista de fechas desde ahora hasta el próximo 31 de marzo, puede crear esta lista en Power Query con este código M.

let
    Source = 
    
            if DateTime.Date(DateTime.LocalNow()) >= #date(Date.Year(DateTime.LocalNow()),3,31)
            
            then List.Generate(() => DateTime.Date(DateTime.LocalNow()) , each _ <= #date(Date.Year(DateTime.LocalNow())+1, 3, 31), each Date.AddDays( _ , 1))

            else List.Generate(() => DateTime.Date(DateTime.LocalNow()) , each _ <= #date(Date.Year(DateTime.LocalNow()), 3, 31), each Date.AddDays( _ , 1))
in
    Source

saludos

Phil


Si respondí a su pregunta por favor marque mi post como la solución.
Si mi respuesta ayudó a resolver su problema, déle un kudos haciendo clic en Thumbs Up.



Did I answer your question? Then please mark my post as the solution.
If I helped you, click on the Thumbs Up to give Kudos.


Blog :: YouTube Channel :: Connect on Linkedin


Proud to be a Super User!


Anonymous
Not applicable

@PhilipTreacy

Ya tengo la tabla Date que es generada por la base de datos hasta 2024 Quiero limitarla al próximo 31 de marzo a partir de la fecha actual dinámicamente. Si la fecha actual es hoy, debe terminarse el 3/31/2021 y si la fecha actual 4/1/2021 debe ser 3/31/2022.

Ahí @seki56.

Trabajé esto usando AdventureWorks... espero que esto te ayude a 🙂

#"Filtered Rows" = Table.SelectRows(dbo_DimDate, each [FullDateAlternateKey], if [FullDateAlternateKey] < #date(Date.Year(Date.From(DateTime.LocalNow())), 3, 31) then [FullDateAlternateKey] < #date(Date.Year(Date.From(DateTime.LocalNow())), 3, 31) else [FullDateAlternateKey] < #date(Date.Year(Date.From(DateTime.LocalNow())) + 1, 3, 31))
Anonymous
Not applicable

@littlemojopuppy

Usé el código de la siguiente manera

= Table.SelectRows(dbo_DimDate , each [Date], if [Date] < #date(Date.Year(Date.From(DateTime.LocalNow())), 3, 31) then [Date] < #date(Date.Year(Date.From(DateTime.LocalNow())), 3, 31) else [Date] < #date(Date.Year(Date.From(DateTime.LocalNow())) + 1, 3, 31))

Pero estoy recibiendo el siguiente error

Expression.Error: Hay un identificador desconocido. ¿Usó la abreviatura [field] para un _[field] fuera de una expresión 'each'?

¿Puede publicar una captura de pantalla de todos los pasos de transformación en el Editor avanzado desde Power Query junto con una captura de pantalla del error?

Anonymous
Not applicable

@littlemojopuppy

esta es la base de datos

s2.PNG

Anonymous
Not applicable

¿Puede publicar una vista de todos los pasos de transformación desde el Editor avanzado? (Hay un botón en la cinta de opciones en Power Query). Si tiene cosas como cadenas de conexión, direcciones IP o cualquier cosa sensible, probablemente desee ocultarlas primero.

Anonymous
Not applicable

@seki56 disculparme por el retraso... tenía que comprar una tienda de comestibles con la esposa.

Cosas como esta es la razón por la que no me gusta el código M. 🙄 ¡Dame un par de minutos para jugar con él!

Anonymous
Not applicable

@littlemojopuppy

De acuerdo

@seki56 ¡Creo que lo tengo!

let
    Source = Sql.Databases("DatabaseName"),
    AdventureWorksDW2012 = Source{[Name="AdventureWorksDW2012"]}[Data],
    dbo_DimDate = AdventureWorksDW2012{[Schema="dbo",Item="DimDate"]}[Data],
    #"Filtered Rows" = Table.SelectRows(dbo_DimDate, 
        each if [FullDateAlternateKey] <= #date(Date.Year(DateTime.LocalNow()), 3, 31) 
        then [FullDateAlternateKey] <= #date(Date.Year(DateTime.LocalNow()), 3, 31) 
        else [FullDateAlternateKey] <= #date(Date.Year(DateTime.LocalNow()) + 1, 3, 31)
    )
in
    #"Filtered Rows"

¡Pruébalo y avísame! 🙂

Anonymous
Not applicable

Estimado @littlemojopuppy

Funcionó, gracias por tu ayuda. Apreciamos mucho su esfuerzo.

littlemojopuppy
Community Champion
Community Champion

Así que te encendí a esta idea en tu otro post. El código M tampoco es mi traje más fuerte.

¿Qué pasa si intenta algo como Fecha <- #Date(Date.Year(Date.From(DateTime>LocalNow())) + 1, 3, 31) para que no tenga que mantenerlo? Probablemente no sea sintácticamente perfecto, pero la idea debería funcionar.

Esto funcionará para fechas > 31 de marzo, pero no funcionará para fechas anteriores. Va a tener que incluir un if para determinar si la fecha es anterior o igual al 31 de marzo. Que no puedo ayudar con... Lo siento.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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