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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
BoCoKeith
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
v-rzhou-msft
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
v-rzhou-msft
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.

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

@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

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors