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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Semih87
Helper I
Helper I

Contar clientes con una suma total de ventas superior a 0 en un intervalo de tiempo seleccionado

Hola

Me gustaría contar el recuento diferenciado de clientes donde la suma total de ventas es mayor que 0 en un intervalo de tiempo seleccionado (es posible que un importe de ventas para un pedido sea negativo, debido a una devolución). Aquí la estructura del conjunto de datos:

FechaID de pedido

ID de cliente

Ventas
01.01.20201A50o
01.01.20202B60o
02.01.20201A-50o
03.01.20203C100o
04.01.20204A30o
05.01.20205B10o

Supongamos contar los clientes para el intervalo de tiempo entre 02.01.2020 - 04.01.2020 donde las ventas totales de los clientes son mayores que 0. La respuesta correcta sería:

Cliente A -50o +30o -20o -> no contar

Cliente C a 100o -> para contar

La medida debe calcular 1 como la respuesta correcta.

Ya tengo una medida que funciona correctamente, pero me enfrento al problema de que Power BI Service no puede calcular esa medida debido a la falta de disponibilidad de memoria:
"Ha alcanzado la asignación de memoria máxima permitida para su nivel. Considere la posibilidad de actualizar a un nivel con más memoria disponible."

PBI Service.png

Aquí la medida subyacente:

Measure = 
COUNTROWS(
   FILTER(
      ADDCOLUMNS(
           SUMMARIZE(
               FACT_TABLE,
               FACT_TABLE[CUSTOMER_ID]
           )
           ,"SumSales",CALCULATE(SUM(FACT_TABLE[Sales]))
      )
      ,[SumSales]>0
   )
)

Entonces intenté usar una conexión directa para resolver este problema, pero luego tengo el siguiente mensaje de error:
Maximum.png

¿Alguien tiene una idea de cómo cambiar la medida para que funcione correctamente?

Saludos

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Hola amitchandak,

Tengo un desafío similar. Me gustaría saber cuántos clientes han tenido o superado los ingresos de 2500 € en los últimos 12 meses. He creado una medida para resumir primero los ingresos de los últimos 12 meses:

Rev. Últimos 12 meses =
DÓNDE MaxDate = ..MAX(Datumstabelle[Fecha])
DÓNDE MinDate = EDATE( MaxDate , -12 )
DÓNDE Resultado =
CALCULAR(
[Act. Ventas YTD],
FILTRO( TODO(Datumstabelle[fecha]),
Datumstabelle[Date] <= MaxDate &&
Datumstabelle[Date] > MinDate )
)
DEVOLUCIÓN
Resultado
¿Hay alguna manera de identificar ahora el número de clientes que han tenido > = 2500 € en los últimos 12 meses? ¿O necesito agregar una columna en la propia tabla? Muchas gracias.
Bien
westwrightj
Resolver III
Resolver III

Otra opción similar a la de amitchandak es utilizar variables - A algunas personas les gusta ser muy procedurial por lo que esto funcionaría así

En la medida dax siguiente ha resumido la tabla para que sea una fila por cliente con sus ventas totales. En la segunda variable filtramos esa tabla a solo filas donde las ventas totales son mayores que 0

En la medición real contamos las filas en la segunda variable.

Si bien esto podría ser un enfoque torpe, si empiezas a construir medidas muy complejas, esto podría ayudarte a realizar un seguimiento de las cosas muy bien.

Number of Customer Greater Than 0 = 

/*Create a summary table */
var Summary_Table = SUMMARIZE('Test Table', 'Test Table'[CustomerID], "Total Sales", SUM('Test Table'[Sales]))
var Summary_Table_GreaterThan0 = FILTER(Summary_Table, [Total Sales] > 0)

return

/*Count the number of rows in the table*/

CALCULATE(COUNTROWS(Summary_Table_GreaterThan0))

Hola @westwrightj ,

gracias por su respuesta. Estoy de acuerdo en que el uso de variables ayuda mucho a leer mejor las medidas y, en algunos casos, también puede mejorar el rendimiento. Pero en mi caso, no hay aumento de rendimiento mediante el uso de variables.

Saludos

Hola @Semih87 ,

Debe actualizar la capacidad compartida con capacidad premium para resolver este problema, ya que ha utilizado recursos que superan el límite superior o necesita optimizar el origen de datos subyacente para que la consulta devuelva menos datos.

Si este post ayuda, entonces considera Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Saludos

Dedmon Dai

Tiene razón, el problema es que una de las funciones DAX utiliza demasiada capacidad de memoria. Al final, cambié los datos subyacentes para que el cálculo se pueda hacer de una manera eficiente.

amitchandak
Super User
Super User

@Semih87 , Trate así

Measure = 
COUNTROWS(
   FILTER(
           SUMMARIZE(
               FACT_TABLE,
               FACT_TABLE[CUSTOMER_ID]
           ,"SumSales",CALCULATE(SUM(FACT_TABLE[Sales]))
      )
      ,[SumSales]>0
   )
)

es una consulta directa. Hay un límite en el límite de consultas de datos base.

Hola @amitchandak ,

gracias por su respuesta. Intenté su enfoque y obtener otro resultado (equivocado) - en realidad debería ser el mismo. Sin embargo, el uso de SUMMARIZE solo no se recomienda por motivos de rendimiento. Consulte la entrada del blog de @marcorussohttps://www.sqlbi.com/articles/best-practices-using-summarize-and-addcolumns/. Recomienda siempre favorecer la versión ADDCOLUMNS.

Saludos

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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