-
DAX: 将数字转化为二进制,以及从二进制转化为数字
- 先用GENERATESERIES函数生产一系列数字,Binary Mapping = GENERATESERIES(1,512)
- 再用如下公式生成二进制数据
-
1
2
3
4
5
6
7
8
9
10
11
12
Number to Binary v1 =
VAR Number = 'Binary Mapping'[Value]
RETURN
MOD(TRUNC(Number / 256) ,2) &
MOD(TRUNC(Number / 128) ,2) &
MOD(TRUNC(Number / 64) ,2) &
MOD(TRUNC(Number / 32) ,2) &
MOD(TRUNC(Number / 16) ,2) &
MOD(TRUNC(Number / 8) ,2) &
MOD(TRUNC(Number / 4) ,2) &
MOD(TRUNC(Number / 2) ,2) &
MOD(Number,2)
- 如果需要显示更长的二进制编码呢,可用使用return 表达式来添加更多行,也可以使用concatenate 函数来实现
-
1
2
3
4
5
6
7
8
9
10
11
12
13
Number to Binary V2 =
VAR Number = 'Binary Mapping'[Value]
VAR Bits = 16
VAR BitPositions = GENERATESERIES(1,Bits-1)
RETURN
CONCATENATEX(
BitPositions ,
MOD( TRUNC ( Number / POWER(2,[value]) ) , 2),
,
[Value]
,DESC
)
& MOD(Number,2)
- 现在要将Binary value 转化为十进制的数字
-
2
3
4
5
6
7
8
9
10
11
Binary to Number =
VAR BinaryToConvert = "101"
VAR Bits = MAXX('Binary Mapping',LEN('Binary Mapping'[Number to Binary v1]))
VAR PaddedValue = RIGHT(REPT("0",Bits) & BinaryToConvert,Bits)
RETURN
MINX(
FILTER(
'Binary Mapping',
'Binary Mapping'[Number to Binary v1] = PaddedValue),
'Binary Mapping'[Value]
)
四行公式,最后的结果如下: