Power BI: enmascarar datos basados en una función personalizada
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":
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):
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:
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.
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.
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)"