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
Anonymous
Not applicable

Duplicar los valores en una matriz sin introducir datos en la hoja de Excel

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.

.MatrixPC.PNG

Cualquier ayuda sería muy apreciada.

Gracias.

13 REPLIES 13
edhans
Super User
Super User

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.?

edhans_0-1594075599881.png

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



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting
Anonymous
Not applicable

Hola @edhans ,

Disculpas por inconviniencia. Aquí está la captura de pantalla y la medida DAX que usé para el formato condicional.

TMinMax - SUM(Sheet1[Num])
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(), CurrentVal ? MinVal,2, CurrentVal ? MaxVal,1) RETURN Result
Conditional.PNG

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


Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting
Anonymous
Not applicable

Hola @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



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting
Anonymous
Not applicable

Hola @edhans ,

Aquí está la muestra de datos-

FechaCategoríasUnRC%
03/01/2020A6.01614
03/01/2020B6.0975.5
03/01/2020C6.54010
03/01/2020D7.09015
03/01/2020E6.78030
03/01/2020F5.90516
03/01/2020G7.11930
05/02/2020C6.54010
05/02/2020E6.78030
05/02/2020F5.90516
05/02/2020A6.01614
05/02/2020B6.0975.5
05/02/2020D7.09015
05/02/2020G7.11920
26/02/2020G7.11928
02/03/2020C6.54010
02/03/2020E6.78030
02/03/2020B6.0975.5
02/03/2020A6.01614
02/03/2020F5.90512
02/03/2020D7.09015
01/04/2020C6.54010
01/04/2020E6.78030
01/04/2020F5.90512
01/04/2020B5.3915.5
01/04/2020D7.09015
01/04/2020G7.11931
06/04/2020G7.11920
09/04/2020A6.01623
21/04/2020G7.11925
03/05/2020A5.61823
03/05/2020B5.3915.5
03/05/2020C5.7910
03/05/2020D7.09015
03/05/2020G7.11925
03/05/2020E6.7830
03/05/2020F5.90512
03/06/2020A5.61823
03/06/2020B5.3915.5
03/06/2020C5.7910
03/06/2020D6.2415
03/06/2020G7.11925
03/06/2020E6.7830
03/06/2020F5.90512
08/06/2020A5.61823
08/06/2020B5.3915.5
08/06/2020C5.7910
08/06/2020D6.2415
08/06/2020G7.11925
08/06/2020E6.7830
08/06/2020F5.90512
01/07/2020A5.61826
01/07/2020B5.3915.5
01/07/2020C5.7910
01/07/2020D6.2415
01/07/2020G7.11925
01/07/2020E6.7830
01/07/2020F5.90512

Matriz actual-

MatrixPC.PNG

Matrix esperada

resaltado en amarillo

ExpectedMatrix.PNG

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:

  1. Busca todas las "categorías que faltan" para cada fecha, suponiendo que si existe una categoría para una fecha, las seis deben existir.
  2. Crea una tabla basada en la fecha y la categoría que falta
  3. Anexa eso a la tabla original. Los valores serán NULL, que es lo que queremos.
  4. El paso que lo hace es el paso "Añadidas categorías que faltan". Todo lo demás son transformaciones básicas de la interfaz de usuario.
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:

edhans_0-1594222143961.png

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:

edhans_1-1594222241846.png

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.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting
Anonymous
Not applicable

Hola @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

Anonymous
Not applicable

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!



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting
Anonymous
Not applicable

Hola @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-

https://community.powerbi.com/t5/DAX-Commands-and-Tips/Measure-to-copy-the-the-values-of-previous-da...

Actualmente estoy atascado en este problema. Sería genial si pudieras ayudarme en esto.

Gracias.

Saludos

Supriya

@Anonymous de dos maneras

  1. Codificar su lista de forma similar - "Apple", "Blueberry", "Grape" - utilizar que para reemplazar mi "A"." G".
  2. Haga su lista dinámica y refiérase a ella en mi consulta original. Supongamos, por ejemplo, que su lista provendría de una lista de productos vendidos.
    1. Cree una referencia a la lista de ventas del producto vendido. - Clic derecho, Referencia
    2. Haga clic con el botón derecho en la columna de la lista de productos, Eliminar otra columna
    3. Haga clic con el botón derecho en la columna de la lista de productos, Eliminar duplicados
    4. Haga clic con el botón derecho en la columna de la lista de productos, Desglose
    5. Ahora sus productos están en una lista. Llame a esa lista "Fruits" (o lo que sea)
    6. En mi consulta, reemplace "A"." G" con frutas. Eso será un puntero a la nueva lista que acaba de crear.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Hola @spsingh ,

Por favor, siga los pasos a continuación para lograrlo:

1. Cree una tabla de categorías

Create category tableCrear 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)

Create a measure Crear una medida he creado un archivo pbix de ejemplo con los pasos anteriores, se puede obtener desde este enlace.

Saludos

Rena

Community Support Team _ Rena
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

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