Learn from the best! Meet the four finalists headed to the FINALS of the Power BI Dataviz World Championships! Register now
Hola
Tengo una tabla de fechas de dimensión con un dateid (aaaammdd) y una tabla de moneda con campos: dateid, currency, value.
Quiero agregar 4 columnas a la tabla de fechas, 1 para cada moneda con el valor de esa fecha.
Debido a cálculos posteriores con los valores en el nivel de fila, quiero columnas calculadas en lugar de medidas.
El truco, la tabla de fechas está en el modelo original y la tabla de monedas está en un modelo semántico.
Cada vez que intento algo con una columna calculada, obtengo el siguiente error:
Se ha producido un error inesperado (archivo 'tmmdmodeltm.cpp', línea 11112, función 'MDModelTM::CreateHierIterRequestImpl').
Parece que las fórmulas que pruebo no están disponibles en este escenario.
Las columnas se conectan a través de DateId en ambas tablas.
Hola @StanRuigrok ,
¿Puedo preguntar si ha resuelto este problema? Por favor, háganos saber si tiene más problemas, estaremos encantados de ayudarle.
Gracias.
Hola @StanRuigrok ,
Gracias por ponerse en contacto con Microsoft Fabric Community.
Gracias @Kedar_Pande @Ilgar_Zarbali @danextian @Nadeera para la pronta respuesta.
Quería comprobar si tuvo la oportunidad de revisar la información proporcionada y resolver el problema. Por favor, háganos saber si necesita más ayuda. Estaremos encantados de ayudarle.
Gracias.
No se pueden crear columnas calculadas que hagan referencia a tablas de diferentes modelos semánticos. Se trata de una limitación estricta en Power BI.
La única solución es combinar los valores de moneda en la tabla de fechas durante la transformación de datos mediante Power Query, antes de que los datos se carguen en el modelo.
Esto no funcionará mientras la tabla Date sea local y la tabla Currency provenga de un modelo semántico de Power BI (DirectQuery para conjuntos de datos PBI/AAS).
En esa configuración, las columnas calculadas (y las tablas calculadas) no pueden hacer referencia a columnas de una tabla de modelo semántico remoto. Solo las medidas pueden cruzar ese límite en el momento de la consulta. El error críptico que está viendo es el síntoma de esa limitación.
Lo que puedes hacer en su lugar
1)
Llevar la moneda local (recomendado si realmente necesita columnas a nivel de fila)
Importe los datos de moneda en el mismo modelo (desde el origen original o un flujo de datos).
Una vez que ambas tablas sean locales, agregue 1 columna por moneda:
USD :=
ID de VAR = 'Fecha'[DateId]
DEVOLUCIÓN
CALCULAR (
MAX ( 'Moneda'[Valor] ),
'Currency'[DateId] = id,
'Moneda'[Moneda] = "USD"
)
Repita para EUR / GBP / etc. (envuelva con COALESCE (..., 0) si necesita espacios en blanco como ceros).
2)
Hazlo en Power Query (materializar en la actualización)
Si puede llegar al origen de moneda en Power Query, combine Moneda de fecha ↔ en DateId y expanda las columnas necesarias (o divierta Moneda a forma ancha: una columna por código). Esto proporciona columnas físicas sin DAX.
3)
Manténgase remoto y use medidas (sin columnas de fila)
Si no es posible mover la tabla, cree medidas en lugar de columnas, por ejemplo:
USD :=
CALCULAR (
MAX ( 'Moneda'[Valor] ),
'Moneda'[Moneda] = "USD"
)
Estos funcionarán en toda la relación, pero no tendrá columnas calculadas a nivel de fila para una lógica de columna calculada adicional.
Las columnas calculadas no se pueden extraer de una tabla de modelo semántico remoto. Para obtener 4 columnas de moneda en la tabla Date, importe la tabla Currency en el mismo modelo (o a través de PQ/dataflow) y, a continuación, agregue las columnas DAX, o materialice la combinación en Power Query. Las medidas son la única opción entre modelos si debe mantener la moneda remota.
Espero que ayude. Si es así, por favor felicita y acéptalo como una solución.
Hola @StanRuigrok
¿Por qué agregaría esas columnas relacionadas con la moneda a la tabla de fechas cuando podría crear una relación? Y suponiendo que haya más de una moneda para cada fecha, una columna calculada no le permitirá traer todas esas filas por separado.
Hola Dane,
La tabla de divisas se construye de la siguiente manera:
fecha - moneda - valor.
De hecho, la tabla Currnecy tiene múltiples monedas, lo que significa que los dateid no son únicos. Hay una tercera tabla (de hechos), que también contiene múltiples dateid.
Si los conecto por dateid, la cardinalidad será muchas, muchas.
Así que hay 2 situaciones posibles:
Tabla de facturas (>1 fechas) -> Fecha (única) -> Moneda (>1 fechas)
Fecha (única) <- Tabla de facturas (>1 fechas) - > moneda (>1fechas).
La tabla de facturas contiene la moneda y el importe. Quiero multiplicar la cantidad por el valor.
Pensé que si creo una tabla de fechas con 4 columnas adicionales, 1 para cada moneda y valor en esa fecha, la multiplicación será fácil, pero debido a que 1 es una tabla del modelo estándar y la otra del modelo semántico, tengo problemas.
Hola. Las columnas calculadas no pueden hacer referencia a tablas de modelos diferentes. Solo la medida puede hacerlo.
Tienes dos opciones
1. Si usa Power BI Desktop, use Power Query para combinar esas columnas.
2. Debe llevar la tabla de divisas al mismo modelo que la tabla de fechas (modelo original como mencionó). a continuación, puede crear una columna de cálculo mediante la fórmula LOOKUPVALUE.
Vea la fórmula de ejemplo:
@StanRuigrok , Intente usar
DAX
MonedaUSD =
CALCULAR(
SELECTEDVALUE(CurrencyTable[Value]),
CurrencyTable[Currency] = "USD",
CurrencyTable[DateId] = DateTable[DateId]
)
Hola. Las columnas calculadas no pueden hacer referencia a tablas de modelos diferentes. Solo la medida puede hacerlo.
Tienes dos opciones
1. Si usa Power BI Desktop, use Power Query para combinar esas columnas.
2. Debe llevar la tabla de divisas al mismo modelo que la tabla de fechas (modelo original como mencionó). a continuación, puede crear una columna de cálculo mediante la fórmula LOOKUPVALUE.
Vea la fórmula de ejemplo: