Empuje la tabla de fecha dinámica con la API de Power BI

Un usuario Pregunto ✅

larsbb

Para un proyecto, estamos enviando datos a través de la API de Power BI mediante las siguientes operaciones:

https://docs.microsoft.com/en-us/rest/api/power-bi/pushdatasets

Nos gustaría utilizar la lógica de tiempo (YTD, Sameperiodlastyear) en nuestro informe y, por lo tanto, necesitamos una ‘tabla de fechas’. Ver: https://docs.microsoft.com/en-us/power-bi/desktop-date-tables

La solución que creamos no nos permite crear un conjunto de datos utilizando Power BI Desktop, por lo que necesitamos crear el conjunto de datos utilizando la API.

¿Hay alguna forma de crear una tabla de fechas dinámica en un ‘¿Push dataset ‘(un conjunto de datos creado por la API)? La mejor manera sería crear una tabla calculada con una declaración DAX como CALENDARAUTO ().

Como último recurso, podríamos enviar una tabla de fechas con las fechas reales en las filas, pero si es posible, quiero usar una tabla calculada.

phil_harris

Hola,

Sí, esto es un verdadero dolor en el cuello. El Push DataSet no parece poder aplicar un atributo «IsDateTable» a un conjunto de datos.

También intenté usar Medidas para crear las columnas, usando CALENDARAUTO (), sin embargo, esto tampoco parece funcionar.

Como una solución de pirateo para esto, genero una tabla usando la API, luego simplemente genero las columnas en el código: ex: De hecho, aún más está roto, ya que no puede «ordenar» un objeto visual por una columna no visual, como está a menudo se requiere para Mes, u otros campos Alfa, ya que el orden predeterminado es Alph ion el visual. Seguro que me gustaría que esto funcionara un poco mejor.

Dado que no puede designar una tabla como una «Tabla de fecha especial», debe agregar explícitamente una relación a la fecha y las columnas.

Código de pirateo simple:

var dataRowsReq = new PostRowsRequest ();

// PSH – Debido a que no puedo hacer que CALENDARAUTO () DAX funcione, los generaré aquí …
int monthIdx = 0;
int quarterIdx = 0;
var calPrev = new CalendarPbi ();
var dateStart = new DateTime (2015, 1, 1);
var dateEnd = new DateTime (2021, 12, 31);
var fechas = nueva lista ();
para (var dt = dateStart; dt <= dateEnd; dt = dt.AddDays (1))
{
var cal = new CalendarPbi ();
cal.Date = dt.ToString («MM / dd / aaaa»);
cal.Year = String.Format («CY {0: yyyy}», dt);
cal.Month = String.Format («{0: aaaa MM}», dt); // PBI BrainDead – Necesito ordenar aquí …
cal.Quarter = String.Format («{0: yyyy} Q {1}», dt, ((dt.Month + 2) / 3));

// Ordenar Idxss …
if (mes cal.! = mes cal. anterior)
{
monthIdx ++;
}

if (cal.Quarter! = calPrev.Quarter)
{
quarterIdx ++;
}
cal.MonthIdx = monthIdx;
cal.QuarterIdx = quarterIdx;

fechas.Añadir (cal);
calPrev = cal;
}

// Paginar la carga en PowerBI …
var inc = 10000;
var skip = 0;
var cnt = 0;
while (cnt {
dataRowsReq.Rows = fechas.Skip (omitir) .Take (inc) .Cast ().Listar();
client.Datasets.PostRowsInGroup (workspaceId, datasetId, TABLE_NAME_CALENDAR, dataRowsReq);

cnt + = inc;
saltar + = inc;
}

phil_harris

Hola,

Sí, esto es un verdadero dolor en el cuello. El Push DataSet no parece poder aplicar un atributo «IsDateTable» a un conjunto de datos.

También intenté usar Medidas para crear las columnas, usando CALENDARAUTO (), sin embargo, esto tampoco parece funcionar.

Como una solución de pirateo para esto, genero una tabla usando la API, luego simplemente genero las columnas en el código: ex: De hecho, aún más está roto, ya que no puede «ordenar» un objeto visual por una columna no visual, como está a menudo se requiere para Mes, u otros campos Alfa, ya que el orden predeterminado es Alph ion el visual. Seguro que me gustaría que esto funcionara un poco mejor.

Dado que no puede designar una tabla como una «Tabla de fecha especial», debe agregar explícitamente una relación a la fecha y las columnas.

Código de truco simple:

var dataRowsReq = new PostRowsRequest ();

// PSH – Debido a que no puedo hacer que CALENDARAUTO () DAX funcione, los generaré aquí …
int monthIdx = 0;
int quarterIdx = 0;
var calPrev = new CalendarPbi ();
var dateStart = new DateTime (2015, 1, 1);
var dateEnd = new DateTime (2021, 12, 31);
var fechas = nueva lista ();
para (var dt = dateStart; dt <= dateEnd; dt = dt.AddDays (1))
{
var cal = new CalendarPbi ();
cal.Date = dt.ToString («MM / dd / aaaa»);
cal.Year = String.Format («CY {0: yyyy}», dt);
cal.Month = String.Format («{0: aaaa MM}», dt); // PBI BrainDead – Necesito ordenar aquí …
cal.Quarter = String.Format («{0: yyyy} Q {1}», dt, ((dt.Month + 2) / 3));

// Ordenar Idxss …
if (mes cal.! = mes cal. anterior)
{
monthIdx ++;
}

if (cal.Quarter! = calPrev.Quarter)
{
quarterIdx ++;
}
cal.MonthIdx = monthIdx;
cal.QuarterIdx = quarterIdx;

fechas.Añadir (cal);
calPrev = cal;
}

// Paginar la carga en PowerBI …
var inc = 10000;
var skip = 0;
var cnt = 0;
while (cnt {
dataRowsReq.Rows = fechas.Skip (omitir) .Take (inc) .Cast ().Listar();
client.Datasets.PostRowsInGroup (workspaceId, datasetId, TABLE_NAME_CALENDAR, dataRowsReq);

cnt + = inc;
saltar + = inc;
}

larsbb

En respuesta a phil_harris

¡Gracias por tu respuesta @phil_harris! Acepté su respuesta como la solución, aunque sabemos que esta no es la funcionalidad que necesitamos.

Hola @larsbb,
No creo que sea posible utilizar las funciones de Dax en la API power bi rest. (tal vez pueda usar el lenguaje de programación para generar una tabla de fechas y convertir su formato y enviarlo al conjunto de datos. Aviso: esta tabla de fechas debe actualizarse manualmente)
En mi opinión, me gustaría sugerirle que intente usar power bi desktop para crear un informe con una tabla de calendario dinámica y publicarlo en el servicio power bi. Después de estos pasos, puede usar rest api para crear nuevas tablas de datos y enviar datos a ese conjunto de datos.

Saludos,

Xiaoxin Sheng

larsbb

En respuesta a v-shex-msft

Hola @ v-shex-msft, gracias por la respuesta. Que quieres decir con «tal vez pueda usar el lenguaje de programación para generar una tabla de fechas y convertir su formato y enviarlo al conjunto de datos«?

«Me gustaría sugerirle que intente usar power bi desktop para crear un informe con una tabla de calendario dinámica y publicarlo en el servicio power bi. Después de estos pasos, puede usar rest api para crear nuevas tablas de datos y enviar datos a ese conjunto de datos «.

Pensé en esto, pero no creo que sea posible. Estamos creando conjuntos de datos de forma programática en función de los usuarios que inician sesión en una aplicación. El informe se clona en función de una plantilla de informe. Por lo tanto, no podemos crear manualmente la tabla de fechas en Power BI Desktop.

En respuesta a larsbb

Hola @larsbb,

>> ¿Qué quieres decir con «quizás puedas usar el lenguaje de programación para generar una tabla de fechas y convertir su formato y enviarlo al conjunto de datos»?

Significa que puede crear una tabla basada en funciones de bucle (para, mientras) para generar una tabla de calendario desde la fecha de inicio hasta la fecha de finalización, luego convertir esta tabla para que corresponda con la fórmula de la tabla del conjunto de datos push.

>> Pensé en esto pero no creo que sea posible.

De hecho, verifico dos veces la API del conjunto de datos push y descubro que solo le permite usar en el conjunto de datos push. Para un conjunto de datos que se publica a partir del informe, parece que no le permite trabajar con la API de reposo del conjunto de datos push.
Saludos,
Xiaoxin Sheng

Deja un comentario

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