Power BI自定义函数实现保密列数据掩码需求
Power BI 自定义一致性数据掩码函数实现
需要在Power BI的Power Query转换步骤末尾调用自定义函数,仅对指定的敏感列执行数据掩码处理。要求掩码输出具备一致性——相同的原始值必须生成相同的掩码结果,以支持后续聚合运算。此前查阅相关资料未实现预期效果,示例调用代码如下:
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"
效果说明
- 原始效果:列中显示未处理的敏感原始文本
- 预期效果:敏感文本被转换为固定格式的掩码字符串,相同原始值对应完全一致的掩码结果,确保聚合运算准确性
自定义掩码函数 FnMaskText
以下是满足需求的自定义函数,基于哈希算法生成一致性掩码,可直接在Power Query中创建:
FnMaskText = (inputText as nullable text, salt as text) as nullable text => let // 处理空值情况 IfNull = if inputText = null then null else let // 结合盐值生成唯一哈希,避免不同表中相同值掩码重复 CombinedText = inputText & salt, // 生成SHA256哈希并转为十六进制字符串 Hash = Binary.ToText(Hash.SHA256(Text.ToBinary(CombinedText)), BinaryEncoding.Hex), // 截取哈希前12位,转换为固定格式的掩码(比如XXX-XXX-XXXX) MaskedPart = Text.Range(Hash, 0, 3) & "-" & Text.Range(Hash, 3, 3) & "-" & Text.Range(Hash, 6, 4) in MaskedPart in IfNull
函数说明
inputText:需要掩码的目标列值salt:自定义盐值,用于区分不同表/场景下的相同原始值,避免掩码冲突- 核心逻辑:通过SHA256哈希保证相同输入生成固定输出,再格式化为易读的掩码样式,空值直接返回null
使用步骤
- 在Power BI的「转换数据」界面,进入「主页」选项卡,点击「新建源」→「空查询」
- 将查询重命名为
FnMaskText,打开高级编辑器,替换为上述函数代码 - 返回需要处理的表,在转换步骤末尾添加「添加列」→「自定义列」,调用函数:
FnMaskText([Confidential Column], "你的自定义盐值") - 可根据需求删除原始敏感列,仅保留掩码列
内容的提问来源于stack exchange,提问作者WhoamI
相关产品推荐
相关产品推荐

