如何将SAS中用于加密ID的函数复现实现到Power BI中
实现方案
完全可以实现,先拆解原SAS函数的执行逻辑,再给出Power BI两种常用场景的实现代码:
原SAS函数逻辑拆解
- 第一步:将
client_id从字符串转为10位数值,再转回字符串后清除所有空格,得到纯数字的id字符串 - 第二步:将清洗后的id字符串与固定盐值
3B9E336D986AFD0BD4E869869117B26DA9C2192A090878B6B9417C832DEDFAEE拼接 - 第三步:对拼接后的字符串做SHA256哈希
- 第四步:将哈希结果转为64位十六进制字符串输出
Power Query(M语言)实现(数据加载阶段用)
直接在Power Query编辑器里添加自定义列,粘贴以下代码即可,替换[client_id]为你表中的客户ID字段名:
let cleaned_id = Text.Remove(Text.From(Number.From([client_id])), " "), salt = "3B9E336D986AFD0BD4E869869117B26DA9C2192A090878B6B9417C832DEDFAEE", combined = cleaned_id & salt, hash = Binary.ToText(Text.ToBinary(combined, TextEncoding.Ascii), BinaryEncoding.Hex) in hash
DAX实现(建模/计算列阶段用)
如果需要在数据模型中用计算列实现,用以下DAX代码,同样替换'表名'[client_id]为你实际的字段:
加密ID = VAR cleaned_id = SUBSTITUTE(FORMAT(VALUE('表名'[client_id]), "0"), " ", "") VAR salt = "3B9E336D986AFD0BD4E869869117B26DA9C2192A090878B6B9417C832DEDFAEE" VAR combined = cleaned_id & salt RETURN CONVERT(SHA256(combined), STRING)
注意:如果你的
client_id本身就是无空格的纯数字字符串,可以省略清洗步骤,直接拼接盐值做哈希即可,和原SAS输出结果完全一致。
内容的提问来源于stack exchange,提问作者Marcelo Pires
相关产品推荐
相关产品推荐

