Microsoft Power BI hack para mejores visualizaciones de datos :

Tomado de Melissa Dekorte, Enterprise DNA Expert en Enterprise DNA
Para convertir un código M utilizado como lenguaje de programación en Power BI, en una tabla de fechas sigamos los siguientes pasos, para un acertado modelamiento en Inteligencia de Negocios es indispensable contar con la tabla de fechas bien definida.

Consulta de función invocada y consulta de tabla de fechas con Power BI
actual lider del cuadrante

Esta es la consulta de tabla de fechas y la consulta de función invocada.

Power BI table query

Power BI table query

Si observa el panel Pasos aplicados a la derecha, solo hay un paso. Muestra el origen de esa consulta.

Power BI

Por lo tanto, si desea desarrollar el código M para esta tabla de fechas, tendría que cambiar entre la función y la consulta de tabla para ver los cambios que aplique.

Esto significa que es más complicado lidiar con los errores causados por cualquiera de los cambios. Esto dará lugar a un error en la propia consulta de tabla, entonces tendría que buscar a través de líneas de código para corregir el error.

La página siguiente muestra la consulta de fecha que devuelve una tabla en lugar de una función.

table query

Mirando los pasos aplicados a la derecha, verá que hay varios pasos enumerados esta vez.

table query

This means that as you develop your date table M code, you’ll immediately see the results of your changes in this table query.

More importantly, whenever your change results in an error, you can easily identify the step that caused the error. This makes it easier to resolve the issue.

Applying The M Code en Microsoft Power BI

The date table M code can be found in the Enterprise DNA Forum. It’s under the topic Extended Data Table Power Query M Function within the M Code Showcase.

table query

El código M está todo el camino hasta la parte superior. Resaltaré todo el código y lo copiaré.

table query

A continuación, crearé una nueva consulta en blanco.

Screen Shot 2020 10 13 at 12.20.26 PM

Abriré mi Editor avanzado y pegaré ese código.

table query

Puesto que veo que no se han detectado errores, voy a hacer clic en hecho.

Permítanme cambiar el nombre de esto y llamarlo Fechas.

table query

Esta consulta devuelve una función, pero lo que quiero es una tabla.

table query

Para realizar los cambios necesarios, volveré al Editor avanzado.

Convertir la función en una tabla

Para que esto devuelva una tabla en lugar de una función, tendría que realizar algunos cambios en el código M en el Editor avanzado.

Mirando el código M, puedo ver fácilmente al menos dos entornos basados en el número de instrucciones let.

table query

Cada instrucción let tiene su propia cláusula in, que se puede encontrar en la parte inferior.

table query

Podría pensar que sería más fácil eliminar esta última cláusula en la cláusula para convertir esto en una tabla.

table query

Pero no voy a hacer eso. En su lugar, voy a comentar que hacia fuera agregando dos barras diagonales delante de la última cláusula in.

Screen Shot 2020 10 13 at 1.34.48 PM

También voy a hacer eso por la primera declaración let. Esto lo hace inactivo.

table query

Debajo de la instrucción let interna, voy a crear una sección para declarar mis parámetros porque todavía necesito pasar esos parámetros a este código.

Voy a marcar dónde deben ser declaradas esas variables.

table query

Ahora voy a copiar la primera variable de la instrucción let externa y pegarla en el espacio.

table query

En mi conjunto de datos, los datos históricos no van más allá de 2017. Por lo tanto, para pasar el valor a la variable StartDate, puedo usar la fecha intrínseca. Pondré el 1 de enero, luego terminaré la línea con una coma.

table query

A continuación, copiaré y pegaré la siguiente variable, que es EndDate.

table query

Sé que EndDate requeriría previsión. Es por eso que quiero que este EndDate siempre sea el final del próximo año.

Ya tengo una variable dentro de mi código M para CurrentDate, así que voy a hacer referencia a eso.

table query

Una vez más, usaré la fecha intrínseca. Extraeré Date.Year y usaré CurrentDate como el valor del año +1. También quiero que la fecha sea el 31 de diciembre.

Una vez más, estoy terminando esa línea con una coma.

La siguiente variable es un parámetro opcional denominado FYStartMonth.

table query

Así que voy a copiar ese nombre y pegarlo.

table query

Observe que un subrayado rojo apareció debajo de FYStartMonth debajo de la variable en la que acabo de pegar.

table query

Esto se debe a que sus nombres coinciden. No era un problema cuando estaban en entornos separados. Pero los nombres de variables dentro de un solo entorno tienen que ser únicos. Esto significa que necesito cambiar el nombre de la nueva variable que acabo de pegar.

Instead of calling it FYStartMonth, I’m going to call it FYStartMonthNum.

table query

I’m not going to assign a value for this variable, so I’m just going to put null.

table query

Because I changed the name of the variable, I also have to change the name wherever this parameter was referenced.

table query

Going back to the variable, I’ll close that line by adding a comma at the end.

Screen Shot 2020 10 13 at 4.50.10 PM

The next parameter is the optional Holidays list. I’m going to copy and paste that in as well, and will also declare it as null.

Screen Shot 2020 10 13 at 10.45.52 PM

The same thing goes for the WDStartNum. I’ll copy and paste it, then declare it as null.

Screen Shot 2020 10 13 at 10.47.24 PM

To mark where the date table code starts, I’m going to add another comment here.

Screen Shot 2020 10 13 at 10.49.37 PM

Once I press Done, you’ll see that the query now returns the right type.

Screen Shot 2020 10 13 at 10.51.03 PM

I now have a table instead of a function.

Screen Shot 2020 10 13 at 10.52.47 PM

Inside the Applied Steps pane, I can also see all the steps that make up the query.

Screen Shot 2020 10 13 at 10.53.57 PM

If I want to make any changes on the date table, it’s easy enough to use the ribbon to modify or add steps. For each change that I make, I will also see the results in the query immediately.

Turning The Table Query Back Into A Function

Let’s say I want to turn the date table query back into a function. It’s just a matter of tweaking a few things within the M code to reverse the changes I made earlier.

I’ll go back into the Advanced Editor and remove the slashes before the outer let statement.

Screen Shot 2020 10 13 at 10.56.50 PM

Next, I’m going to remove the slashes before the in statements.

Screen Shot 2020 10 13 at 11.03.32 PM

A continuación, comentaré el bloque de variables que agregué anteriormente. Así que voy a añadir una barra y un asterisco aquí.

Screen Shot 2020 10 13 at 11.08.50 PM

A continuación, un asterisco y una barra diagonal después del bloque de variables.

Screen Shot 2020 10 13 at 11.09.47 PM

¿Recuerdas cuando cambié esta línea de código anteriormente debido a FYStartMonthNum?

Screen Shot 2020 10 13 at 11.11.19 PM

Voy a copiar esa línea de código. A continuación, agregaré una nueva línea y la pegaré.

Screen Shot 2020 10 13 at 11.15.42 PM

Voy a cortar el primero (que es donde hice los cambios en el nombre de la variable anteriormente).

Screen Shot 2020 10 13 at 11.16.53 PM

Luego, en el segundo, encontraré los nombres de las variables editadas.

Screen Shot 2020 10 13 at 11.18.09 PM

Y los volveré a convertir en FYStartMonth.

Screen Shot 2020 10 13 at 11.23.38 PM

Una vez que presione Listo, la consulta de tabla se convertirá una vez más en una función.

Screen Shot 2020 10 13 at 11.24.59 PM

Conclusión

Una vez más, le he mostrado lo convenientes que son los códigos M, especialmente en casos como estos, donde convertimos una función en una consulta de tabla, y viceversa. Siempre y cuando tenga acceso al código M que tenemos en enterprise DNA Forum, puede usarlo en escenarios como estos en el futuro.

También puede navegar a través de otros códigos M que puede utilizar en otras situaciones en la exposición de código M en el foro de ADN empresarial. Es una comunidad colaborativa, por lo que puede leer los comentarios de otras ideas de nuestros expertos y miembros.