La pregunta era sobre cómo cambiar la numeración del primer día de la semana de 0 a 1 . Tenga en cuenta que esto no cambia el inicio real del día de la semana. En esta tabla de fechas, el inicio de la semana siempre será el lunes. Se trata simplemente de referirse al lunes como el Día 1 en lugar del Día 0.
Este proceso no es necesariamente complejo, pero necesita una comprensión básica de cómo está estructurado el lenguaje M. Si es miembro de LuckyTemplates, puede consultar el . La introducción toca el tema.
Permítanme comenzar yendo a Power Query . Ya he copiado la función M de la tabla de fechas aquí.
Obtuve la función M de la categoría M Code Showcase en LuckyTemplates Forum . El código se encuentra bajo el tema .
Si abro el Editor avanzado , este es el código.
Hay mucho código M allí, lo que podría distraer.
Creación de una consulta de prueba
Dado que suceden demasiadas cosas dentro de la función M, voy a comenzar con una nueva consulta en blanco .
Voy a nombrar esta consulta de prueba .
A continuación, voy a abrir el Editor avanzado .
Debido a que voy a crear una función, agregaré un par de paréntesis y eliminaré todo el código predeterminado allí.
Para iniciar la función, voy a declarar un parámetro opcional .
A continuación, voy a agregar una variable. Llamaré a esta variable WDStartNum ya que representará el número de inicio del día de la semana. También necesito declarar su tipo, así que escribiré number .
Estoy declarando el tipo para evitar errores. Si lo dejo como cualquier tipo, esto significa que podría pasar una tabla o un valor de fecha en lugar de solo pasar números.
El siguiente paso es agregar la cláusula let y la cláusula in .
Bajo la cláusula let, necesito un nombre de variable. Así que voy a llamar a esta variable WDStart .
Ahora, necesito probar si se ha pasado el WDStartNum . Si pasa, no equivaldrá a nulo . Así que voy a declarar que si WSDartNum no es igual a nulo, quiero que se devuelva un valor .
En cuanto a la cláusula in, quiero que se pase el mismo paso. Así que simplemente pondré WDStart allí, que es el nombre que le dimos a nuestra variable anteriormente en la cláusula let.
Una vez que presione Listo, se creará la función. Así que intentaré pasar un valor a través de esa función.
Voy a intentar escribir la letra "a".
Recuerda que antes declaré que el valor debe ser un número. Debido a que reconoce que el valor que ingresé no cumple con este requisito, no me permitirá ingresar ese parámetro.
Así que voy a eliminar eso y dejaré el espacio en blanco.
Una vez que hago clic en Invocar, devuelve un valor de 0.
Volviendo a mi consulta original, indica que si el valor no es igual a nulo, se debe devolver WSDartNum. Si es igual a nulo, se debe devolver un 0.
Entonces ese 0 es correcto.
Esta vez, intentaré pasar un valor cambiando el número en TestQuery. Es cierto que devuelve un "1" una vez que presiono enter.
Ahora, déjame intentar pasar 2020 en TestQuery. Una vez que presiono enter, también regresa 2020.
Evidentemente, no quiero que esto suceda. Como quiero un valor que represente el comienzo de la semana, quiero que aparezca un 0 o un 1. Esto significa que necesito crear otra prueba para ver si el número ingresado es un 0 o un 1. Puedo usar la función List.Contains para esto.
Uso de List.Contains
Creé una consulta en blanco e ingresé List.Contains sin usar un paréntesis.
Una vez que presiono enter, puedo ver la documentación sobre esa función.
List.Contains indica si la lista contiene un valor.
Por lo tanto, requiere una lista como primer parámetro, y luego se agrega un valor después de eso. Si ese valor se encuentra dentro de la lista, devuelve verdadero. De lo contrario, devolverá falso.
Volveré a abrir el Editor avanzado para poder realizar los cambios necesarios en mi consulta.
En lugar de probar si un valor no es igual a nulo, usaré List.Contains .
Ahora, daré una lista de valores que se aplicarán a esta función.
Usaré corchetes como inicializador de lista. Dentro de esos corchetes, pondré 0, 1. Agregaré una coma después de cerrar ese corchete.
Para el segundo parámetro, usaré WSDartNum. Luego, agregaré el paréntesis de cierre.
Con esto en su lugar, significa que un 0 o 1 debería darme el WStartNumber. Si se coloca algo que no sea 0 o 1, debería obtener un resultado de 0.
Permítanme probar eso poniendo 2020 en TestQuery. Como era de esperar, esto devuelve un "0" (cero).
Eso es porque el valor 2020 no está en la lista.
Agregar el parámetro en la función M
Ahora que estoy seguro de que el código funciona, finalmente puedo colocarlo dentro de la tabla de fechas real y la función M. Abriré el Editor avanzado y luego copiaré la lógica .
Luego pasaré a la consulta de la tabla de fechas.
Abriré la función M original a través del Editor avanzado .
Luego, voy a pegar mi código allí. Asegurémonos de que haya una coma al final de la línea.
A continuación, voy a resaltar y copiar el nombre de mi parámetro .
Entonces voy a agregar ese parámetro aquí .
Tenga en cuenta que primero debo agregar una coma al final de la línea existente, luego debo declarar que este parámetro es opcional . Luego puedo colocar WDStartNum y agregar el tipo .
Agregué el parámetro y también incrusté la lógica. Pero también necesito asegurarme de obtener los resultados esperados. Así que voy a buscar la línea de código que cubre el día de la semana.
Luego, agregaré + WDStart .
Haré clic en Listo para cerrar el editor. Entonces, voy a invocar la consulta.
Para StartDate, pondré el 1 de enero de 2020, luego usaré el 31 de diciembre de 2020 como EndDate.
Usaré "7" como el mes de inicio del año fiscal, luego pondré "0" como el WDStartNum.
Haré clic en Invocar. Ahora, tengo la tabla de fechas.
Le cambiaré el nombre para asegurarme de que se pueda identificar fácilmente.
Ahora, comprobaré los resultados.
Esta es mi columna DayOfWeek .
Muestra que el lunes ha regresado como 0.
Volviendo a la pregunta en el foro, necesito cambiar el número del inicio de la semana a 1 en lugar de 0. Así que cambiaré eso en la medida.
Cuando presiono enter, el lunes ahora será el día 1 en lugar del día 0.
Mirando el rango de números, ahora va del 1 al 7 en lugar del 0 al 6.
¿Qué sucede si paso un valor nulo?
Luego, el Día de la semana del lunes vuelve a ser 0.
Así es como puede agregar un parámetro adicional directamente en la función M en su consulta de tabla de fechas. El proceso no es nada complejo, como mencioné anteriormente. Siempre que tenga una fuente para el código M, es bastante fácil desde allí.
Nuevamente, siempre puede consultar el curso Transformaciones y modelado de datos avanzados en Online si no tiene antecedentes sobre cómo funcionan los códigos M.