Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
Hola a todos
Actualmente estoy atascado en este escenario. Tengo una tabla de matriz para categorías A-G. Hay formato condicional en los valores Num. Si para esa fecha el valor de Num es más bajo, entonces es verde y si el valor es más alto, entonces es rojo. El problema es que hay algunas fechas en los datos que tiene valor para sólo una o dos categorías (porque hay algunas otras columnas cuyos valores han cambiado para esa categoría en particular). Forex- 26 Feb 2020, algún otro valor de columna ha cambiado para G mientras que no hubo ningún cambio para el resto de las categorías en ese día, por lo tanto hay una entrada de datos para G con 7.1 que es verde. Idealmente, debe ser rojo, ya que es el más alto de todas las categorías. ¿Hay alguna manera en power bi en la que puedo usar el valor de fecha anterior si los datos no están allí. No quiero agregar una fila en la hoja de Excel de origen.
Para ex- 26 feb, A debe tener valor como 6.0, B-6.1, C-6.5, D-7.1, E- 6.8, F-5.9 (Usar valor de fecha anterior- 05 Feb 2020)
He buscado en el foro de la comunidad, así como googleed pero no capaz de encontrar una solución.
.
Cualquier ayuda sería muy apreciada.
Gracias.
Ayudaría si le diera una captura de pantalla de su pantalla de formato condicional. No dijiste cómo estabas determinando min/max. ¿Una medida, un resumen como abajo, etc.?
Pero puede cambiar el orden de la aplicación de los formatos con las flechas arriba /abajo a la derecha. Si es una medida, podría reescribir la medida para decir no importa qué, si solo hay un valor, es un valor MIN, no MAX. Necesitamos detalles.
Cómo obtener una buena ayuda rápidamente. Ayúdanos a ayudarte.
Cómo obtener respuestas a su pregunta rápidamente
Cómo proporcionar datos de ejemplo en el foro de Power BI
DAX is for Analysis. Power Query is for Data Modeling
Proud to be a Super User!
MCSA: BI ReportingHola @edhans ,
Disculpas por inconviniencia. Aquí está la captura de pantalla y la medida DAX que usé para el formato condicional.
Me parece que puede agregar una condición a su SWITCH para que si el MinVal - MaxVal (por lo tanto, sólo un valor), a continuación, devolver 2, que es lo que desea para su MinVal.
TMinMaxUnit =
VAR MinVal =
CALCULATE(
MIN( Sheet1[Num] ),
ALLEXCEPT(
Sheet1,
Sheet1[Date]
)
)
VAR MaxVal =
CALCULATE(
MAX( Sheet1[Num] ),
ALLEXCEPT(
Sheet1,
Sheet1[Date]
)
)
VAR CurrentVal = [TMinMax]
VAR Result =
SWITCH(
TRUE(),
MinVal = MaxVal, 2, <--- New condition to check for in SWITCH
CurrentVal = MinVal, 2,
CurrentVal = MaxVal, 1
)
RETURN
Result
DAX is for Analysis. Power Query is for Data Modeling
Proud to be a Super User!
MCSA: BI ReportingHola @edhans,
Gracias por su respuesta. Pero mi requisito es diferente. Quiero usar valores anteriores para las categorías si no hay ninguna entrada en la tabla de origen.
Para ex- 26 feb 2020, A debe tener valor como 6.0, B-6.1, C-6.5, D-7.1, E- 6.8, F-5.9 (Usar valor de fecha anterior- 05 Feb 2020)
Sin datos esto es difícil de hacer, pero algo en la línea de:
Current or Previous Value =
VAR varCurrentDate = Table[Date]
VAR varCurrentValue =
MAX( Table[Value] )
VAR varCurrentCategory =
MAX( Table[Category] )
VAR varPreviousValue =
MAXX(
FILTER(
ALL( Table ),
Table[Category] = varCurrentCategory
&& Table[Date] < varCurrentDate
),
Table[Value]
)
RETURN
IF(
ISBLANK( varCurrentValue ),
varPreviousValue,
varCurrentValue
)
Si necesita más ayuda, publique datos reales (de muestra) y los resultados esperados.
Cómo obtener una buena ayuda rápidamente. Ayúdanos a ayudarte.
Cómo obtener respuestas a su pregunta rápidamente
Cómo proporcionar datos de ejemplo en el foro de Power BI
DAX is for Analysis. Power Query is for Data Modeling
Proud to be a Super User!
MCSA: BI ReportingHola @edhans ,
Aquí está la muestra de datos-
Fecha | Categorías | Un | RC% |
03/01/2020 | A | 6.016 | 14 |
03/01/2020 | B | 6.097 | 5.5 |
03/01/2020 | C | 6.540 | 10 |
03/01/2020 | D | 7.090 | 15 |
03/01/2020 | E | 6.780 | 30 |
03/01/2020 | F | 5.905 | 16 |
03/01/2020 | G | 7.119 | 30 |
05/02/2020 | C | 6.540 | 10 |
05/02/2020 | E | 6.780 | 30 |
05/02/2020 | F | 5.905 | 16 |
05/02/2020 | A | 6.016 | 14 |
05/02/2020 | B | 6.097 | 5.5 |
05/02/2020 | D | 7.090 | 15 |
05/02/2020 | G | 7.119 | 20 |
26/02/2020 | G | 7.119 | 28 |
02/03/2020 | C | 6.540 | 10 |
02/03/2020 | E | 6.780 | 30 |
02/03/2020 | B | 6.097 | 5.5 |
02/03/2020 | A | 6.016 | 14 |
02/03/2020 | F | 5.905 | 12 |
02/03/2020 | D | 7.090 | 15 |
01/04/2020 | C | 6.540 | 10 |
01/04/2020 | E | 6.780 | 30 |
01/04/2020 | F | 5.905 | 12 |
01/04/2020 | B | 5.391 | 5.5 |
01/04/2020 | D | 7.090 | 15 |
01/04/2020 | G | 7.119 | 31 |
06/04/2020 | G | 7.119 | 20 |
09/04/2020 | A | 6.016 | 23 |
21/04/2020 | G | 7.119 | 25 |
03/05/2020 | A | 5.618 | 23 |
03/05/2020 | B | 5.391 | 5.5 |
03/05/2020 | C | 5.79 | 10 |
03/05/2020 | D | 7.090 | 15 |
03/05/2020 | G | 7.119 | 25 |
03/05/2020 | E | 6.78 | 30 |
03/05/2020 | F | 5.905 | 12 |
03/06/2020 | A | 5.618 | 23 |
03/06/2020 | B | 5.391 | 5.5 |
03/06/2020 | C | 5.79 | 10 |
03/06/2020 | D | 6.24 | 15 |
03/06/2020 | G | 7.119 | 25 |
03/06/2020 | E | 6.78 | 30 |
03/06/2020 | F | 5.905 | 12 |
08/06/2020 | A | 5.618 | 23 |
08/06/2020 | B | 5.391 | 5.5 |
08/06/2020 | C | 5.79 | 10 |
08/06/2020 | D | 6.24 | 15 |
08/06/2020 | G | 7.119 | 25 |
08/06/2020 | E | 6.78 | 30 |
08/06/2020 | F | 5.905 | 12 |
01/07/2020 | A | 5.618 | 26 |
01/07/2020 | B | 5.391 | 5.5 |
01/07/2020 | C | 5.79 | 10 |
01/07/2020 | D | 6.24 | 15 |
01/07/2020 | G | 7.119 | 25 |
01/07/2020 | E | 6.78 | 30 |
01/07/2020 | F | 5.905 | 12 |
Matriz actual-
Matrix esperada
resaltado en amarillo
Gracias.
Hola @spsingh - Ayer me he encargado de esto y no llegué muy lejos hasta que me di cuenta de lo que estaba pasando. Cuando intenté obtener la fecha actual y la categoría para el 26 de febrero, categoría A, no estaba recibiendo nada. Después de jugar en el estudio de DAX me di cuenta de que era sólo porque esa "célula" existía en la matriz, no existía en los datos. Así que hice un poco de modelado de datos en Power Query. El siguiente código M hace lo siguiente:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jZNBbsQgDEXvkvUoYAjGLDszbQ8xmvtfo4S0yg8Yq4sIKU8/9jPx67VERy744Jfb8lEfXj1xPWlb3rcLvR+05HqmNfX40XDa9qzv4bM+uWZ3OCQ/WzJLPeKQ/GrVik97lHv63b5LVM5scmHeEsCxKkClKlBlTkC1OQEeRwEQfcLRVWDndS4Hd3HuC3D0Baj1DFgRBnoZVujp6Etum3cMcOwYoFIU6L3RWAh8AJs9Xf4papR1+ntD5aQ4qBCPUZDzevpvERKm08okZxqo5gT40V7ngvuXrP1L/2tK285k3EJ0bPqw7cOWD6MPr2FDHzZ92PJhw0dMH7F9xPIRy0dMH7F8xPQhl1Uf7qm+Q3nuA3D0Aaj4ANW2Ps983j8=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Categories = _t, Num = _t, #"RC%" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type text}, {"Categories", type text}, {"Num", type number}, {"RC%", type number}}),
#"Changed Type with Locale" = Table.TransformColumnTypes(#"Changed Type", {{"Date", type date}}, "en-BS"),
#"Grouped Rows" = Table.Group(#"Changed Type with Locale", {"Date"}, {{"All Rows", each _, type table [Date=date, Categories=text, Num=number, #"RC%"=number]}}),
#"Added Missing Categories" =
Table.AddColumn(
#"Grouped Rows",
"Missing Categories",
each
let
varCurrentDate = [Date]
in
Table.Combine({
Table.AddColumn(
Table.FromList(
List.Difference(
{"A".."G"},
[All Rows][Categories]
),
Splitter.SplitByNothing(),
{"Categories"},
null,
ExtraValues.Error
),
"Date",
each varCurrentDate
),[All Rows]})
),
#"Expanded Missing Categories" = Table.ExpandTableColumn(#"Added Missing Categories", "Missing Categories", {"Categories", "Num", "RC%"}, {"Categories", "Num", "RC%"}),
#"Removed Other Columns" = Table.SelectColumns(#"Expanded Missing Categories",{"Date", "Categories", "Num", "RC%"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Removed Other Columns",{{"Categories", type text}, {"Num", type number}, {"RC%", type number}})
in
#"Changed Type1"
Así que devuelve una tabla que tiene este aspecto para el 26 de febrero como ejemplo:
Entonces era una simple cuestión de aplicar el patrón básico anterior, que en detalle es esta medida:
Total Num =
VAR varCurrentDate =
MAX( 'Table'[Date] )
VAR varCurrentCategory =
MAX( 'Table'[Categories] )
VAR varCurrentValue =
SUM( 'Table'[Num] )
VAR varPreviousDate =
MAXX(
FILTER(
ALL( 'Table' ),
'Table'[Num]
<> BLANK()
&& 'Table'[Date] < varCurrentDate
&& 'Table'[Categories] = varCurrentCategory
),
'Table'[Date]
)
VAR varPreviousValue =
SUMX(
FILTER(
ALL( 'Table' ),
'Table'[Date] = varPreviousDate
&& 'Table'[Categories] = varCurrentCategory
),
'Table'[Num]
)
VAR Result =
COALESCE(
varCurrentValue,
varPreviousValue
)
RETURN
Result
Eso devuelve esta matriz:
Para utilizar el código M anterior en el modelo, haga lo siguiente:
1) En Power Query, seleccione Nueva fuente y, a continuación, Consulta en blanco
2) En la cinta de opciones Inicio, seleccione el botón "Editor avanzado"
3) Retire todo lo que ve, luego pegue el código M que le he dado en esa caja.
4) Pulse Hecho
5) Consulte este artículo si necesita ayuda para usar este código M en su modelo.
Y aquí está el archivo PBIX para que pueda ver todo el trabajo.
DAX is for Analysis. Power Query is for Data Modeling
Proud to be a Super User!
MCSA: BI ReportingHola @edhans ,
Gracias por la solución. Tuve algunas dudas, cuando intento el código m con categorías como A,B,C ,D,E,F,G funciona perfectamente. Pero ¿qué pasa si mis categorías son como el nombre de empresas como ex- Apple, Blackberry , Casio, Huawei, Honor, Sony, Samsung a y no sólo como A-G.
Supongo que los cambios deben hacerse en
List.Difference(
"A"."." G",
[Todas las filas] [Categorías]
)
Lo intenté, pero no estoy consiguiendo cómo evitarlo. Sería genial si pudieras ayudarme en esto.
#"Added Missing Categories" =
Table.AddColumn(
#"Grouped Rows",
"Missing Categories",
each
let
varCurrentDate = [Date]
in
Table.Combine({
Table.AddColumn(
Table.FromList(
List.Difference(
{"A".."G"},
[All Rows][Categories]
),
Splitter.SplitByNothing(),
{"Categories"},
null,
ExtraValues.Error
),
"Date",
each varCurrentDate
),[All Rows]})
),
Saludos
Supriya
Hola @edhans ,
Pude resolverlo. Sólo tenía que especificar todos los nombres de las empresas en "" comas en List.Difference.
Ex-{
List.Difference(
"Apple", "Blackberry" , "Casio", "Huawei", "Honor", "Sony, Samsung",
[Todas las filas] [Categorías]
)
Pero ahora estoy atascado en la medida que se está utilizando. La tabla en la que estoy trabajando es tener más columna y hay una columna denominada Región que tiene 2 valores Rural y Urbano. Sin ninguna segmentación debanda está funcionando perfectamente, pero si uso la segmentación con columna Region, no estoy obteniendo el resultado deseado. Intenté usar ALLSELECTED, ALLEXCEPT en lugar de ALL('Table')pero no encontré una solución. Me estoy perdiendo algo. Podrías ayudarme en esto.
Además, tengo una versión anterior de Power BI- septiembre de 2019 y no tiene la función COALESCE, así que acabo de usar la instrucción Switch a continuación-
Resultado de VAR (VAR)
SWITCH(
FALSE(),
ISBLANK(varCurrentUnitRate),varCurrentUnitRate
,ISBLANK(varPreviousValue),varPreviousValue)
)
Medi-
Total Num =
VAR varCurrentDate =
MAX( 'Table'[Date] )
VAR varCurrentCategory =
MAX( 'Table'[Categories] )
VAR varCurrentValue =
SUM( 'Table'[Num] )
VAR varPreviousDate =
MAXX(
FILTER(
ALL( 'Table' ),
'Table'[Num]
<> BLANK()
&& 'Table'[Date] < varCurrentDate
&& 'Table'[Categories] = varCurrentCategory
),
'Table'[Date]
)
VAR varPreviousValue =
SUMX(
FILTER(
ALL( 'Table' ),
'Table'[Date] = varPreviousDate
&& 'Table'[Categories] = varCurrentCategory
),
'Table'[Num]
)
VAR Result =
COALESCE(
varCurrentValue,
varPreviousValue
)
RETURN
Result
saludos
Supriya
Empezaría un nuevo subproceso para que podamos separar la M del problema DAX. Vas a tener que dar más información. Danos el modelo que tiene la columna Región y cómo se relaciona. Además, ¿qué quieres decir con que no te está dando el resultado deseado? ¿Qué está dando? Puede ser tan simple como agregar un filtro para la región (eliminar más probable).
También actualizaría a la última computadora de escritorio disponible. Es julio de 2020 a menos que esté en el servidor de informes, en cuyo caso es junio de 2020. ¡Tantas nuevas características y errores corregidos en los últimos 10 meses!
DAX is for Analysis. Power Query is for Data Modeling
Proud to be a Super User!
MCSA: BI ReportingHola @edhans,
Muchas gracias por su respuesta. He iniciado un nuevo hilo para la medida DAX y he intentado dar todos los detalles que se necesitarían. Aquí está el enlace a la post-
Actualmente estoy atascado en este problema. Sería genial si pudieras ayudarme en esto.
Gracias.
Saludos
Supriya
@Anonymous de dos maneras
DAX is for Analysis. Power Query is for Data Modeling
Proud to be a Super User!
MCSA: BI ReportingHola @spsingh ,
Por favor, siga los pasos a continuación para lograrlo:
1. Cree una tabla de categorías
2. Cree una medida con la siguiente fórmula y arrastre los campos Categorías [Categorías], Tabla[Fecha] y Medir a Matriz( Filas:Tabla[Fecha] Columnas: Categorías[Categorías]Valores: Medida)
Measure =
var _curdate=MAX('Table'[Date])
var _predate=CALCULATE(MAX('Table'[Date]),FILTER(ALL('Table'),'Table'[Date]<_curdate&&'Table'[Categories]=MAX('Categories'[Categories])&&NOT(ISBLANK('Table'[Num]))))
var _prenum=CALCULATE(MAX('Table'[Num]),FILTER(ALL('Table'),'Table'[Date]=_predate&&'Table'[Categories]=MAX('Categories'[Categories])))
var _curnum=CALCULATE(MAX('Table'[Num]),FILTER(ALL('Table'),'Table'[Date]=_curdate&&'Table'[Categories]=MAX('Categories'[Categories])))
return if(ISBLANK(_curnum),_prenum,_curnum)
he creado un archivo pbix de ejemplo con los pasos anteriores, se puede obtener desde este enlace.
Saludos
Rena