marc_hll
Hola,
La siguiente relación virtual no funcionó, ¿es porque CustomerName no es una cantidad?
¿Cómo corregir esto?
Nombre del cliente =
v-lionel-msft
Hola @marc_hll,
1.
CustomerName(Measure) =
CALCULATE(
MAX(FactInternetSales[CustomerName]),
TREATAS( VALUES(DimCustomer[CustomerKey]), FactInternetSales[CustomerKey] )
)
2.
Measure =
CALCULATE(
MAX(FactInternetSales[CustomerName]),
TREATAS( VALUES(FactInternetSales[CustomerKey]), DimCustomer[CustomerKey] )
)
Atentamente,
Lionel Chen
Si esta publicación ayudaentonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.
v-lionel-msft
Hola @marc_hll,
1.
CustomerName(Measure) =
CALCULATE(
MAX(FactInternetSales[CustomerName]),
TREATAS( VALUES(DimCustomer[CustomerKey]), FactInternetSales[CustomerKey] )
)
2.
Measure =
CALCULATE(
MAX(FactInternetSales[CustomerName]),
TREATAS( VALUES(FactInternetSales[CustomerKey]), DimCustomer[CustomerKey] )
)
Atentamente,
Lionel Chen
Si esta publicación ayudaentonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.
watkinnc
A PESAR de que aparentemente está sumando texto, TREATAS necesita una de las columnas resultantes como entrada.
Nombre del cliente =
pablodbrown
En respuesta a watkinnc
@watkinnc
No estoy seguro de haber entendido lo que dices, pero esta afirmación es, en el mejor de los casos, engañosa.
«CALCULAR(
Los argumentos en TREATAS son columnas de tablas no relacionadas que desea «conectar» como una expresión de filtro (potencialmente una relación virtual uno a muchos o uno a uno, aunque la documentación en realidad simplemente define la primera entrada como «una expresión que da como resultado una tabla»)
En otras palabras, la «columna de salida» no necesita ser incluido en la expresión TRATAS en absoluto. En mi ejemplo,
Fact Customer Name = CALCULATE(
MAX(FactInternetSales[CustomerName]),
TREATAS(VALUES(FactInternetSales[CustomerKey]), DimCustomer[CustomerKey]))
La «columna de salida» o resultado es diferente de los argumentos utilizados en la expresión TREATAS. Por supuesto, lo mismo sería cierto si se usara una medida de [Sum of Sales] por ejemplo (que sería la suma de una columna llamada ‘Tabla'[Sales])
En mi humilde opinión, la forma más fácil de entender TREATAS es pensar en ello como el establecimiento de una relación virtual de «uno» a muchos o «uno» a uno entre dos tablas que no están relacionadas en el modelo real (mediante el uso de VALORES o DISTINCT en el primer argumento – o FILTRO, etc.).
TREATAS bien puede ser más sofisticado de lo que pretendo, pero esta forma de pensar me facilita el uso de la función (que hago mucho).
watkinnc
En respuesta a pablodbrown
Trata las columnas de la tabla de entrada como columnas de otras tablas. Para cada columna, filtra los valores que no están presentes en su columna de salida respectiva.
Sintaxis
PARÁMETRO ATRIBUTOS DESCRIPCIÓN
Expresión |
La expresión que genera el conjunto de columnas a reasignar. |
|
nombre de columna | repetible |
El nombre de la columna de salida. |
Valores devueltos
Una tabla que contiene todas las filas en columna(s) que también están en Expresión.
Compatibilidad
- BI de energía
Lanzamiento actual
- SSAS tabular
- SSA 2017
- SSA 2019
- Azure como
Lanzamiento actual
- SSDT
Lanzamiento actual
» Mostrar compilaciones verificadas
Observaciones
TREATAS asigna el linaje de datos de las columnas devueltas por la expresión usando las columnas en los siguientes argumentos. El resultado se puede asignar a una variable, porque TREATAS no es un modificador de filtro. El primer argumento debe ser una expresión de tabla.
La función TRATAMIENTO funciona en Excel desde la versión 1809. Sin embargo, IntelliSense no informa sobre la función y es posible que Microsoft aún no la admita en Excel.
manikumar34
@marc_hll,
Estás haciendo una suma en valores de cadena. Intenta usar
DISTINCT o COUNT o DISTINCTCOUNT.
Y los valores de cadena no se pueden mostrar en gráficos como gráficos de barras, circulares, etc. Solo puede mostrarlos en tablas o matriciales, intente usar COUNT o DISTINCTCOUNT si desea mostrar los números.
Saludos,
Manikumar
marc_hll
En respuesta a manikumar34
Probé los tres, DISTINCT no funcionó, no obtuve ningún resultado, quería devolver una cadena en una tabla
El COUNT/DISTINCTCOUNT funciona pero como números
¿Me estoy perdiendo de algo?
marc_hll
En respuesta a marc_hll
Adjunté una muestra, intenté cambiar DISTINCT a VALUES pero aún no funciona
¿Cómo traigo CustomerName a la tabla DimCustomer usando una relación virtual? Cualquier ayuda es muy apreciada
https://1drv.ms/u/s!AjxzXMIO4yRIhSyLtp_PdyRqw4wu?e=u9cItr
pablodbrown
En respuesta a marc_hll
@marc_hll
¿Qué estás tratando de hacer exactamente? ¿Cuál es su resultado esperado?
VALUES y DISTINCT devuelven una lista de valores, que no pueden ser la salida de una medida. Una medida debe devolver un solo valor. Puede usar VALUES o DISTINCT para crear una nueva tabla, por ejemplo, o como parte de una expresión de filtro en una medida.
marc_hll
En respuesta a pablodbrown
Este es el resultado esperado de la relación virtual, creé usando la columna pero recibo el error «Se proporcionó una tabla de valores múltiples donde se esperaba un valor único
Tal vez mi sintaxis sea incorrecta, veo que muchos blogs/publicaciones usan SUM con TREATAS/INTERSECT pero mi necesidad es una cadena (no una cantidad)
¿Puedes descargar el pbix de muestra?
pablodbrown
En respuesta a marc_hll
@marc_hll
No se puede tener una lista como resultado de una medida. Si necesita una cadena de valores, debe usar CONCATENATEX.
Para su caso, intente usar MAX en lugar de SUM en su medida
marc_hll
En respuesta a pablodbrown
Todavía no pude obtenerlo, ¿debería eliminar CALCULAR ya que no estoy calculando nada aquí? Solo estoy tratando de obtener un valor de cadena que es CustomerName con filtro/relación virtual. ¿Hay otra manera?
pablodbrown
En respuesta a marc_hll
@marc_hll
Usando el archivo que incluiste anteriormente, esto es lo que obtienes usando TREATAS en esta medida:
Fact Customer Name = CALCULATE(
MAX(FactInternetSales[CustomerName]),
TREATAS(VALUES(FactInternetSales[CustomerKey]), DimCustomer[CustomerKey]))
Habiendo dicho eso, podría simplemente crear una relación entre su Dim Customer [Customer key] y tu FactInternetSales [Customer key] en la vista del modelo. Si luego agrega una tabla visual usando Dim Customer [Customerkey] y el FactInternetVentas[CustomerName] obtendrás el mismo resultado (y así es como deberías hacerlo realmente). Entonces no se necesita ninguna medida.
marc_hll
En respuesta a pablodbrown
@PaulDBBrown
Gracias por la respuesta, intenté crear su medida en la tabla DimCustomer pero no pude replicar la misma que la suya. En cambio, me pongo todo Peter. ¿Tenía una relación CustomerKey conectada en la parte posterior?
pablodbrown
En respuesta a marc_hll
@marc_hll
ok, entonces ahora entiendo lo que estás tratando de hacer. No busca una medida, sino una columna calculada.
¿Hay alguna razón por la que necesite que estas tablas no estén relacionadas?
De lo contrario, crearía una nueva tabla de dimensiones (en lugar de Dim Customer) haciendo referencia a la tabla FactInternetSales en Power Query (seleccione su tabla FactInternetSales haciendo clic derecho en la consulta de la tabla y seleccione «referencia»), elimine todas las columnas excepto CustomerID y CustomerName, seleccione CustomerID y elimine los duplicados, y cárguelos en su modelo. Cree una relación entre la nueva tabla de dimensiones y su tabla de hechos uniendo los campos para CustomerId en una relación de uno a varios y listo (incluso puede ocultar el campo CustomerName en su tabla FactInternetSales).
No necesita una columna calculada si sigue este método (que también es en realidad una «mejor práctica»).
Si realmente necesita que las tablas no estén relacionadas, ¿puede explicar el contexto? ¿Qué estás tratando de lograr y por qué?
Gracias.