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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Filtrar datos dimensionales en función de otros valores de dimensión sin utilizar hechos (en un esquema en estrella)

Hola a todos,


Tengo un (creo) problema complejo con el filtrado de una tabla / matriz que no contiene datos de hechos. Mi modelo es un esquema en estrella con tabla de hechos 'factura' y tablas dimensionales 'producto','cliente', 'inquilino' & 'fecha'. Mi requisito es establecer una segmentación de datos que filtre todas las tablas, matrices o elementos visuales en mi panel de PBI para un inquilino determinado. Mi problema es que mis dimensiones de producto y cliente también contienen ciertas métricas y tengo tablas / matrices en su lugar, que solo contienen datos dimensionales de una de ellas, por ejemplo, una tabla que solo contiene "ProductNumber", "ProductName" y "PurchasePrice" de la dimensión 'DimProduct'. Como no hay ninguna referencia a los hechos, no puedo filtrar estas tablas o matrices con la columna [TenantID] en la dimensión de inquilino.

He establecido una relación bidireccional inactiva entre producto-inquilino y cliente-inquilino, que no puedo activar ya que esto destruiría el esquema en estrella. Una segmentación de datos basada en una columna con la siguiente lógica filtra mi product-data-only-table como se desea, pero esto no incluye los datos del cliente: ProductDataFilter = LOOKUPVALUE(Tenant[Name],Tenant[TenantID],'Product'[TenantID]) .

Las soluciones con varias segmentaciones de datos o incluir hechos en la tabla y luego ocultarlos no son lo que estoy buscando, espero que ustedes puedan encontrar una solución suave para establecer una sola segmentación de datos que filtre todas mis tablas / matrices / elementos visuales para un determinado inquilino, independientemente de si hay una columna de hechos utilizada o no?


Espero que mis explicaciones sean suficientes.


Muchas gracias y saludos cordiales,

Kathrin

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

No @KBarlage ,

Puede probar la siguiente fórmula:

Estos son los pasos que puede seguir:

1. Crear medida.

Measure =
var _selected=SELECTCOLUMNS(ALLSELECTED(Tenant),"1",[tenant])
return
IF(MAX('Customer'[Tenant]) in _selected||MAX('Product'[tenant]) in _selected,1,0)

2. Resultado:

vyangliumsft_0-1624435854273.png

Saludos

Liu Yang

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

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Hola, tengo un problema similar. Quiero filtrar una tabla tenue con la otra. Ex. Si se selecciona un país en una segmentación de datos, los clientes que pertenecen a ese país solo deben rellenarse en segmentaciones de datos de clientes.
El origen de datos son datos del cubo SSAS, por lo que no puedo modificar la relación. Por favor, sugiera alguna solución.

TIA

Syndicate_Admin
Administrator
Administrator

No @KBarlage ,

Puede probar la siguiente fórmula:

Estos son los pasos que puede seguir:

1. Crear medida.

Measure =
var _selected=SELECTCOLUMNS(ALLSELECTED(Tenant),"1",[tenant])
return
IF(MAX('Customer'[Tenant]) in _selected||MAX('Product'[tenant]) in _selected,1,0)

2. Resultado:

vyangliumsft_0-1624435854273.png

Saludos

Liu Yang

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

Esto funciona como un encanto, gracias!

Syndicate_Admin
Administrator
Administrator

No @KBarlage ,

Estos son los pasos que puede seguir:

1. Crea meausre.

all flag =
var _selected=ALLSELECTED(Tenant[tenant])
var _product=SELECTCOLUMNS(FILTER('Product',[tenant] in _selected),"1",[product])
var _customer=SELECTCOLUMNS(FILTER('Customer',[tenant] in _selected),"1",[Customer])
return
IF(MAX('Product'[product]) in _product || MAX('Customer'[Customer]) in _customer,1,0)

2. Resultado.

vyangliumsft_0-1624007145966.png

Saludos

Liu Yang

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

Hola Liu Yang,

gracias de nuevo!

Sin embargo, todavía tengo dos problemas más, para que sea lo más completo posible. Siento molestar de nuevo.

1) Se vuelve slighlty más complejo, ya que mi valor de segmentación de datos es una columna de nombre que no se hace referencia en las otras tablas. Por lo tanto, necesito filtrar para esta columna de nombre, pero la marca todavía debe contener la referencia a la columna de identificador. El problema debe verse en el archivo recién adjunto a continuación.

He intentado trabajar con Lookupvalue() como el siguiente, pero esto no funcionará:

todos marcan nuevo =
var _selected=ALLSELECTED(Tenant[Nombre])
var _selectedID = LOOKUPVALUE(Tenant[TenantID],Tenant[Name],_selected)
var _product=SELECTCOLUMNS(FILTER('Product',[TenantID] en _selectedID),"1",[ProductID])
var _customer=SELECTCOLUMNS(FILTER('Customer',[TenantID] en _selectedID),"1",[CustomerID])
devolución
IF(MAX('Product'[ProductID]) en _product || MAX('Customer'[CustomerID]) en _customer,1,0)

2) El nuevo indicador "all" solo filtra los datos del cliente mediante el uso del esquema en estrella. Como la marca es una medida dentro de la dimensión de producto, al usar esto en la tabla de solo cliente, filtraría la tabla de solo cliente (= "Tabla de clientes" en nuestro modelo) solo por hechos relacionados con los clientes (al menos hasta donde entiendo el esquema de estrella). Sin embargo, podría haber clientes que no tengan ningún hecho (= facturas) relacionados con ellos dentro de un período de tiempo determinado. Todavía me gustaría mostrar estos clientes en la tabla de solo cliente.

¿Crees que hay alguna manera de establecer esta medida en mi tabla de métricas, de modo que everyhting se filtre correctamente? Pensando en ello, esto podría simplemente no ser posible, ya que siempre tendré que usar el esquema de estrella. Por lo tanto, volvería al sistema de dos banderas en cada una de las tablas de clientes y la tabla de productos. Pero tal vez usted tiene otra buena idea para hacer mi modelo menos complejo? 🙂

Gracias de nuevo!

Kathrin

Archivo PBIX

Syndicate_Admin
Administrator
Administrator

No @KBarlage ,

Puede usar Flag como marcador para filtrar datos de dimensión en función de otros valores de dimensión.

He creado algunos datos:

Tabla de facturas:

vyangliumsft_0-1623916790911.png

Tabla de clientes:

vyangliumsft_1-1623916790913.png

Tabla de productos:

vyangliumsft_2-1623916790913.png

Estos son los pasos que puede seguir:

1. Crea meausre.

Flag =
var _selected=ALLSELECTED(Customer[Customer])
var _product=SELECTCOLUMNS(FILTER(ALL(invoice),[customer] in _selected),"1",[product])
return
IF(MAX('Product'[product]) in _product,1,0)

2. Coloque [Flag] en Filtro y establezca is=1, aplique el filtro.

vyangliumsft_3-1623916790916.png

3. Resultado:

vyangliumsft_4-1623916790918.png

Saludos

Liu Yang

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

Hola Liu Yang,

muchas gracias por su respuesta! Su solución funciona muy bien y puedo usar esto como solución alternativa, mi problema todavía es un poco más complejo.

Tengo una tercera dimensión, Inquilino, que necesita filtrar las otras dos dimensiones (incluso cuando no se usan hechos en un objeto visual). Hay una referencia de inquilino en ambas tablas de dimensiones.

Puedo usar fácilmente su solución creando una marca en cada una de las dimensiones (cliente y producto). Sin embargo, como quiero habilitar el autoservicio con el conjunto de datos, preferiría una solución aún más simple.

¿Hay alguna manera de filtrar las tres tablas que se muestran en mi PBIX (tabla de hechos, tabla de clientes y tabla de productos) con una sola medida / columna en una sola segmentación de datos?

PBIX

Gracias de antemano!

Kathrin

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

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