You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

使用步骤

  1. 在Power BI的「转换数据」界面,进入「主页」选项卡,点击「新建源」→「空查询」
  2. 将查询重命名为FnMaskText,打开高级编辑器,替换为上述函数代码
  3. 返回需要处理的表,在转换步骤末尾添加「添加列」→「自定义列」,调用函数:FnMaskText([Confidential Column], "你的自定义盐值")
  4. 可根据需求删除原始敏感列,仅保留掩码列

内容的提问来源于stack exchange,提问作者WhoamI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:42:41