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

Crear una nueva tabla a partir de la tabla existente (mediante comandos DAX)

Hola mis salvadores,
Espero que estén bien. Necesito crear una nueva tabla basada en el cálculo de la Tabla 1 Mi tabla se ve así
Tabla 1:

IdnoStore_NumberLento
AA1S1y
AA1S2n
AA1S3y
AA1S4y
AA1S5n
AA1S6y

Debido a la descarga lenta en las tiendas otras tiendas se ven afectadas y por lo tanto un nuevo coulmn necesita ser creado como a continuación mostrando el problema que causa las tiendas. Por ejemplo: S4 se ve afectado debido a la descarga lenta en s1 y s3, ya que ambas tiendas están marcadas como "y"
Tabla 1 (Actualizado)

IdnoStore_NumberLento Afectados por
AA1S1y
AA1S2nS1
AA1S3yS1
AA1S4yS1,S3
AA1S5nS1,S3,S4
AA1S6yS1,S3,S4


Ahora necesito codificar para Afectados por Columna para mostrar las tiendas y también crear una nueva tabla (Como a continuación) que registra cada tienda afectada por en una fila como esta

Tabla 2:

IdnoStore_NumberAfectados por
AA1S2S1
AA1S3S1
AA1S4S1
AA1S4S3
AA1S5S1
AA1S5S3
AA1S5S4
AA1S6S1
AA1S6S3
AA1S6S4

Mediante la creación de esta nueva tabla i m tratando de establecer una relación de uno a muchos de la que puedo extraer datos con fines de visulación. Gracias a la 🙂

1 ACCEPTED SOLUTION
AlB
Super User
Super User

@janarbaskar

En realidad, se puede hacer de una manera mucho, mucho más fácil si tiene una columna que especifica el orden en Table1 (o agrega un índice como sugiere @nandic). En mi toma anterior, de alguna manera (debió haber estado dormido) asumí que quería una solución que usaría la columna "Afectado por" en "Tabla1 (actualizado)". Esto sólo complica las cosas innecesariamente

Table2 =
GENERATE (
    Table1,
    SELECTCOLUMNS (
        CALCULATETABLE (
            DISTINCT ( Table1[Store_Number] ),
            Table1[Index] < EARLIER ( Table1[Index] ),
            Table1[Slow] = "y",
            ALLEXCEPT ( Table1, Table1[IDNO] )
        ),
        "Affected by", Table1[Store_Number]
    )
)

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

View solution in original post

11 REPLIES 11
AlB
Super User
Super User

@janarbaskar

En realidad, se puede hacer de una manera mucho, mucho más fácil si tiene una columna que especifica el orden en Table1 (o agrega un índice como sugiere @nandic). En mi toma anterior, de alguna manera (debió haber estado dormido) asumí que quería una solución que usaría la columna "Afectado por" en "Tabla1 (actualizado)". Esto sólo complica las cosas innecesariamente

Table2 =
GENERATE (
    Table1,
    SELECTCOLUMNS (
        CALCULATETABLE (
            DISTINCT ( Table1[Store_Number] ),
            Table1[Index] < EARLIER ( Table1[Index] ),
            Table1[Slow] = "y",
            ALLEXCEPT ( Table1, Table1[IDNO] )
        ),
        "Affected by", Table1[Store_Number]
    )
)

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

NewTable = OriginalTable

Acabo de enterarme...

nandic
Memorable Member
Memorable Member

@janarbaskar ,

La primera tabla se puede actualizar con la nueva columna "Afectado por". En Power Query, agregue el índice para esta tabla.
Después de eso agregue esta columna calculada:

Afectado por el valor de la zona de
CONCATENATEX (
SELECTCOLUMNS (
FILTRO (
Table_Stores,
Table_Stores[Lento ] - "y"
&& Table_Stores[Index] < EARLIER ( Table_Stores[Index] )
),
"Store", Table_Stores[Store_Number]
),
[Tienda],
","
)

Captura de pantalla a continuación:
20200923 concatenax.PNG



¿No entendía si ese es el resultado final o también necesitas la última mesa para hacer relación?

Salud
Nemanja

Anonymous
Not applicable

Hola nandic,
La solución de columna affecetd_by u gave se está ejecutando durante 30 minutos ya que mi conjunto de datos es enorme (en millones) hay una manera de no utilizar el filter() que i belive está aumentando el tiempo de ejecución

gracias de nuevo por su tiempo

Anonymous
Not applicable

hola nandic,
Lo sentimos por no hacer la pregunta claramente, necesito la parte de la tabla 2 donde cada tienda defectuosa se almacena como un registro.. Por ejemplo, ya que la tienda S4 se vio afectada por S1 y S3 y la nueva tabla que tiene que ser creada en líneas individuales de esta manera

AA1S4S1
AA1S4S3


Pero muchas gracias por el código de columna calculado que desgined utilizando alguna otra lógica . Su lógica es simple y elegante

Gracias de nuevo

Hola @janarbaskar

Esto sería más fácil en PQ, pero si lo desea en DAX, puede crear una tabla calculada. Table1 en el código es realmente lo que se muestra como Table1 actualizado:

Table1B =
GENERATE (
    SUMMARIZE ( Table1, Table1[IDNO], Table1[Store_Number] ),
    VAR affectedBy_ =
        CALCULATE ( DISTINCT ( Table1[Affected by] ) )
    VAR numItems_ =
        IF (
            LEN ( affectedBy_ ) = 0,
            0,
            LEN ( affectedBy_ ) - LEN ( SUBSTITUTE ( affectedBy_, ",", "" ) ) + 1
        )
    VAR baseT_ =
        GENERATESERIES ( 1, numItems_ )
    VAR resT_ =
        ADDCOLUMNS (
            baseT_,
            "NewColumn",
                VAR itemNum_ = [Value]
                VAR pos1_ =
                    IF (
                        itemNum_ = 1,
                        0,
                        FIND (
                            UNICHAR ( 160 ),
                            SUBSTITUTE ( affectedBy_, ",", UNICHAR ( 160 ), itemNum_ - 1 ),
                            1,
                            0
                        )
                    )
                VAR pos2_ =
                    VAR foundAt_ =
                        FIND (
                            UNICHAR ( 160 ),
                            SUBSTITUTE ( affectedBy_, ",", UNICHAR ( 160 ), itemNum_ ),
                            1,
                            0
                        )
                    RETURN
                        IF ( foundAt_ = 0, LEN ( affectedBy_ ) + 1, foundAt_ )
                VAR extracted_ =
                    MID ( affectedBy_, pos1_ + 1, pos2_ - pos1_ - 1 )
                RETURN
                    extracted_
        )
    RETURN
        SELECTCOLUMNS ( resT_, "NewColumn", [NewColumn] )
)

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Anonymous
Not applicable

Sólo wow :O... Mi affected_by código de columna por @nandic no ha terminado de ejecutarse todavía se actualizará y probará esto una vez que esté hecho...

Una vez más sólo wow y gracias.. Ustedes son leyendas

@janarbaskar

Y lo mismo en PQ (mucho más simple). Copie el código M siguiente en una consulta vacía para ver los pasos. "Tipo cambiado" es su Tabla1, el procesamiento comienza en "Añadido Personalizado"

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcnQ0VNJRCgYRlUCsFKsDFzMCEnkQSSRRY6hKVFETuKgOUAWShCncEKCEDlAdkpwZsiawXCwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [IDNO = _t, Store_Number = _t, #"Slow " = _t, #"Affected by" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"IDNO", type text}, {"Store_Number", type text}, {"Slow ", type text}, {"Affected by", type text}}),
    
    #"Added Custom" = Table.AddColumn(#"Changed Type", "NewColumn", each Text.Split([Affected by],",")),
    #"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "NewColumn"),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Slow ", "Affected by"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Columns", each ([NewColumn] <> ""))
in
    #"Filtered Rows"

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

nandic
Memorable Member
Memorable Member

@AlB, 🙌 🙌🙌 🙌,🙌¡bien hecho para la solución dax!
Si no hubiera ninguna columna "Affected by" (creada con dax), ¿sería posible crear una solución completa basada solo en Power Query (lenguaje M)?
En otras palabras, ¿sería posible crear la columna "Afectado por" mediante Power Query?
Gracias

@nandic

Claro, PQ puede hacer muchas cosas. Copie esto en una consulta en blanco para ver los pasos. Probablemente sería lento para las mesas grandes aunque

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcnQ0VNJRCgYRlUqxOnABIyCRhyxgjK7CBF3AFF2LGURFLAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [IDNO = _t, Store_Number = _t, Slow = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"IDNO", type text}, {"Store_Number", type text}, {"Slow", type text}}),

    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
    #"Added Custom" = Table.AddColumn(#"Added Index", "Affected by", each Text.Combine(Table.SelectRows(#"Added Index", (inner)=>inner[IDNO]=[IDNO] and inner[Slow]="y" and inner[Index]<[Index])[Store_Number], ",")),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Index"})
in
    #"Removed Columns"

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

CNENFRNL
Community Champion
Community Champion

@janarbaskar , desde la perspectiva de Power Query, la Tabla 1 (Actualizada) y la Tabla 2 son idénticas, pero solo mediante transformaciones diferentes.

Tengo dificultades para entender lo que quieres. 🤔


Thanks to the great efforts by MS engineers to simplify syntax of DAX! Most beginners are SUCCESSFULLY MISLED to think that they could easily master DAX; but it turns out that the intricacy of the most frequently used RANKX() is still way beyond their comprehension!

DAX is simple, but NOT EASY!

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.