cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
New Member

Contar clientes por producto en la estructura de pedido/línea de elementos

Creo que me estoy perdiendo algo fundamental. Dado este modelo de datos PowerBI:

BoCoKeith_0-1597078242491.png

Estoy tratando de construir una matriz que muestre el número de clientes que han comprado un producto en particular. El contenido de la tabla se muestra a continuación, pero, créeme por ahora, no todos los clientes compraron cada producto. Aquí está mi definición de matriz y los resultados:

BoCoKeith_3-1597078787160.png

("Clientes" es un recuento distinto.)

Cuenta el número de *pedidos* correctamente para cada producto, pero no el número de *clientes*. Asumí que las relaciones de mesa arreglarían esto para mí, pero tal vez no? ¿Necesito desnormalizar CustomerId en LineItem?

Aquí está el script SQL que usé para compilar y rellenar las tablas.

DROP TABLE IF EXISTS dbo.temp_LineItem;
DROP TABLE IF EXISTS dbo.temp_Order;
DROP TABLE IF EXISTS dbo.temp_Product;
DROP TABLE IF EXISTS dbo.temp_Customer;
GO

CREATE TABLE dbo.temp_Customer(
    CustomerId INT NOT NULL PRIMARY KEY,
    CustomerName VARCHAR(100) NOT NULL
);

CREATE TABLE dbo.temp_Product(
    ProductId INT NOT NULL PRIMARY KEY,
    ProductName VARCHAR(100) NOT NULL
);

CREATE TABLE dbo.temp_Order(
    OrderId INT NOT NULL PRIMARY KEY,
    CustomerId INT NOT NULL REFERENCES dbo.temp_Customer(CustomerId),
    OrderDate DATE NOT NULL
);

CREATE TABLE dbo.temp_LineItem(
    LineItemId INT NOT NULL PRIMARY KEY,
    OrderId INT NOT NULL REFERENCES dbo.temp_Order(OrderId),
    ProductId INT NOT NULL REFERENCES dbo.temp_Product(ProductId),
    Quantity INT NOT NULL
);

INSERT dbo.temp_Customer(CustomerId, CustomerName)
VALUES (1, 'Best Products Ever'), (2, 'My Company'), (3, 'Widgets Inc');

INSERT dbo.temp_Product(ProductId, ProductName)
VALUES (1, 'Widget'), (2, 'Doodad'), (3, 'Gizmo');

INSERT dbo.temp_Order(OrderId, CustomerId, OrderDate)
VALUES (1, 1, '1/1/2020'), (2, 1, '2/1/2020'), (3, 2, '1/15/2020'), (4, 2, '2/15/2020'), (5, 3, '3/1/2020');

INSERT dbo.temp_LineItem(LineItemId, OrderId, ProductId, Quantity)
VALUES (1, 1, 1, 1), (2, 1, 2, 1),
       (3, 2, 1, 1), (4, 2, 2, 1), (5, 2, 3, 1),
       (6, 3, 2, 1);
GO

SELECT * FROM dbo.temp_Customer;
SELECT * FROM dbo.temp_Product;
SELECT * FROM dbo.temp_Order;
SELECT * FROM dbo.temp_LineItem;

1 ACCEPTED SOLUTION
Community Support
Community Support

Hola @BoCoKeith

Si cambia la relación de uno a ambos, encontrará que la respuesta es correcta.

1.png2.png

Pero no se recomienda ambas direcciones en Power BI. Así que usted puede tratar de utilizar la medida o fusionar para lograr su objetivo.

Medida:

Discount CustomerID = CALCULATE(DISTINCTCOUNT(temp_Order[CustomerId]),CROSSFILTER(temp_LineItem[OrderId],temp_Order[OrderId],Both))

Resultado:

3.png

Combinar:

Seleccione Combinar consultas como nuevo.

4.png1. Combinar temp_Product y temp_LineItem por columna ProductID en cada tabla

2. Combine la nueva tabla y temp_Order por la columna OrderID en cada tabla.

5.png

La tabla Final es la siguiente.

6.png

Resultado:

7.png


Puede descargar el archivo pbix desde este enlace: Contar clientes por producto en orden/estructura de línea

Saludos

Rico Zhou

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

View solution in original post

3 REPLIES 3
Community Support
Community Support

Hola @BoCoKeith

Si cambia la relación de uno a ambos, encontrará que la respuesta es correcta.

1.png2.png

Pero no se recomienda ambas direcciones en Power BI. Así que usted puede tratar de utilizar la medida o fusionar para lograr su objetivo.

Medida:

Discount CustomerID = CALCULATE(DISTINCTCOUNT(temp_Order[CustomerId]),CROSSFILTER(temp_LineItem[OrderId],temp_Order[OrderId],Both))

Resultado:

3.png

Combinar:

Seleccione Combinar consultas como nuevo.

4.png1. Combinar temp_Product y temp_LineItem por columna ProductID en cada tabla

2. Combine la nueva tabla y temp_Order por la columna OrderID en cada tabla.

5.png

La tabla Final es la siguiente.

6.png

Resultado:

7.png


Puede descargar el archivo pbix desde este enlace: Contar clientes por producto en orden/estructura de línea

Saludos

Rico Zhou

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

View solution in original post

Una respuesta muy completa e informativa. Gracias.
Super User IV
Super User IV

@BoCoKeith, mejor combinar el orden temporal y la línea de orden temporal en power BI

https://radacad.com/append-vs-merge-in-power-bi-and-power-query



Did I answer your question? Mark my post as a solution! Appreciate your Kudos!!
Dashboard of My Blogs !! YouTube Channel !! Connect on Linkedin

Proud to be a Super User!

Helpful resources

Announcements
secondImage

Happy New Year from Power BI

This is a must watch for a message from Power BI!

December Update

Check it Out!

Click here to read more about the December 2020 Updates!

Community Blog

Check it Out!

Click here to read the latest blog and learn more about contributing to the Power BI blog!

Get Ready for Power BI Dev Camp

Get Ready for Power BI Dev Camp

Mark your calendars and join us for our next Power BI Dev Camp!.

Top Solution Authors