Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago

Compra recencia con DirectQuery

Hola a todos,

Estoy tratando de calcular la actualidad de compra por meses utilizando datos de Google BigQuery a través de DirectQuery.

Para ello, he creado esta medida:

actualidad =
DÓNDE fechaAy = HOY()
DÓNDE díasDiff =
DATEDIFF( bc_customer[date_of_last_purchase], fechaAy, DÍA )
DÓNDE nada =
SI (
bc_customer[date_of_last_purchase],
INTERRUPTOR (
VERDADERO (),
díasDiff <= 30, "R5",
díasDiff <= 60, "R4",
díasDiff <= 120, "R3",
díasDiff <= 180, "R2",
díasDiff <= 360, "R1",
"R0"
),
"R0"
)
DEVOLUCIÓN
nada

Dónde
date_of_last_purchase = MAX(bc_order[order_created_date_time])

Puedo visualizar esto en una tabla de la siguiente manera:

rgjiang_0-1635509201409.png

Pero no puedo ver esto en un gráfico circular (ver más abajo) de modo que el pastel se divida en los diferentes contenedores de recencia, que es lo que quiero. En el gráfico circular, no puedo arrastrar la medida de actualidad a los Valores.

rgjiang_1-1635509428501.png

¿Tal vez necesitaría reescribir esta medida como una nueva columna? ¿Cómo lo haría? ¿O es otra cosa?

8 Replies

  • Para usarlo como una categoría en el visual, debe ser una columna calculada.

    Dado que es una columna calculada, puede confiar en el contexto de la fila en lugar de tener que tomar un MAX.

    recency =
    VAR daysDiff = DATEDIFF ( bc_order[order_created_date_time], TODAY (), DAY )
    VAR res =
        SWITCH (
            TRUE (),
            daysDiff <= 30, "R5",
            daysDiff <= 60, "R4",
            daysDiff <= 120, "R3",
            daysDiff <= 180, "R2",
            daysDiff <= 360, "R1",
            "R0"
        )
    RETURN
        res

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      Hay @AlexisOlson,

      muchas gracias por su respuesta. Desafortunadamente, dice

      OLE DB or ODBC error: [Expression.Error] We couldn't fold the expression to the data source. Please try a simpler expression.

      ¿Debería más bien dividir esta expresión o hay una manera más simple? Lo siento si estas preguntas son tontas, todavía estoy muy al comienzo de aprender Power BI.

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        No es una pregunta tonta, diferentes fuentes de datos tienen diferentes limitaciones de DirectQuery. Lo probé con un DirectQuery a un servidor Sql Server y funcionó, pero BigQuery es aparentemente diferente.

        Pruebe cada uno de estos para ver cuál es el factor de ruptura:

        TodayFunction = TODAY ()

        DateDifference = DATEDIFF ( DATE ( 2021, 1, 1 ), DATE ( 2021, 10, 29 ), DAY )

        SwitchFunction =
            SWITCH (
                TRUE (),
                bc_order[order_created_date_time] < DATE ( 2020, 1, 1 ), "Prev Years",
                bc_order[order_created_date_time] < DATE ( 2021, 1, 1 ), "2020",
                "2021"
            )

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      Hola Evelyn,

      gracias por ofrecer su ayuda!

      No estoy seguro de cómo lo haría porque no tengo permiso para importar los datos, y la importación de los datos también frustraría el propósito de usar DirectQuery de todos modos. Por lo tanto, el comportamiento sería diferente. DirectQuery, por otro lado, requiere un acceso mediante una clave privada. ¿O quiere decir que debo crear un duplicado estático y modificado?