Power BI: enmascarar datos basados ​​en una función personalizada

Resuelto WhoamI asked hace 9 meses • 1 respuestas

Quiero que mis columnas "Confidenciales" estén enmascaradas en Power BI. Estoy buscando cualquier función personalizada que pueda ayudarme para poder usarla para llamar al final de mis pasos de transformación y simplemente enmascara la columna en la que se llama.

(Leí algunos artículos en Google pero nada funcionó como se explica).

Algo como a continuación donde la columna Enmascarada debería estar "enmascarada":

ingrese la descripción de la imagen aquí

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCskvUChOTS5KLVGK1YlW8i8tgnIV0vKLcktzEq0UXG19neOMwNKeJak5OanJJaWJOQoBRfkFqUUllUqxsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Confidential Column" = _t]),
    #"Invoked Custom Function" = Table.AddColumn(Source, "Masked column", each FnMaskText([Confidential Column], "TestTable"))
in
    #"Invoked Custom Function"

Esperaría que el resultado fuera consistente (para poder seguir aplicando agregaciones):

ingrese la descripción de la imagen aquí

WhoamI avatar Feb 16 '24 17:02 WhoamI
Aceptado

Hay dos enfoques que puede adoptar aquí. Podrías usar una función hash como la implementada por Alexis aquí:

https://community.fabric.microsoft.com/t5/Power-Query/SHA256-in-Power-Query-and-DAX-Performance-Analysis-Tools/td-p/2231130

Alternativamente, dados sus datos de origen como este:

ingrese la descripción de la imagen aquí

Cree una segunda tabla (no es necesario cargarla) que simplemente duplique su primera consulta y seleccione solo la columna en cuestión y los distintos valores de esa columna junto con un índice agregado.

ingrese la descripción de la imagen aquí

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCskvUChOTS5KLVGK1YlW8i8tgnIV0vKLcktzEq0UXG19neOMwNKeJak5OanJJaWJOQoBRfkFqUUllUqxsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Confidential Column" = _t]),
    Custom1 = Source&Source&Source,
    #"Removed Other Columns" = Table.SelectColumns(Custom1,{"Confidential Column"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Added Index" = Table.AddIndexColumn(#"Removed Duplicates", "Index", 0, 1, Int64.Type)
in
    #"Added Index"

Luego, simplemente combine la tabla 1 con la tabla 2 y expanda la columna de índice como su máscara. Puede usar cualquier cosa en su índice siempre que sea única por fila.

ingrese la descripción de la imagen aquí

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCskvUChOTS5KLVGK1YlW8i8tgnIV0vKLcktzEq0UXG19neOMwNKeJak5OanJJaWJOQoBRfkFqUUllUqxsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Confidential Column" = _t]),
    Custom1 = Source&Source&Source,
    #"Merged Queries" = Table.NestedJoin(Custom1, {"Confidential Column"}, #"Query1 (2)", {"Confidential Column"}, "Query1 (2)", JoinKind.LeftOuter),
    #"Expanded Query1 (2)" = Table.ExpandTableColumn(#"Merged Queries", "Query1 (2)", {"Index"}, {"Masked"})
in
    #"Expanded Query1 (2)"
davidebacci avatar Feb 16 '2024 11:02 davidebacci