DAX:如何在位掩码列和table位值之间实现join/relationship的效果?

DAX: How to achieve the effect of a join/relationship between a bitmask column and a table of bit values?

我有一个 table CarHistoryFact(CarHistoryFactId、CarId、CarHistoryFactTime、CarHistoryFactConditions)跟踪汽车的历史状态。 CarHistoryFactConditions 是一个 25 位(二进制)int 列,它对汽车在给定时间点可能处于的 25 种不同状况的状态进行编码。

我有一个维度 table CarConditions,其中每个条件都有一行,以及它们的基数 10 位值。

我如何在事实和维度之间实现 "relationship",给出给定汽车的所有条件的列表

我可以想出位解析代码,但我不确定如何将它连接到维度 table 以在汽车时间获得当前适用的条件。

dax 中的位掩码解析可以在这里看到:

https://radacad.com/quick-dax-convert-number-to-binary

您可以创建一个 CROSSJOIN Table,其中所有记录被添加 25 次,然后过滤掉曾经不存在的

CarHistoryConditions = 
var temp = CROSSJOIN(CarHistoryFact ; CarConditions )
return FILTER(temp; MOD(TRUNC(CarHistoryFact [CarHistoryFactConditions] / CarConditions [bit]):2) = 1)

注意:我假设 CarHistoryFactConditions 和位是一个整数,而不是一串位。当然你可以改变它。

结果是 table 每辆车的条件行数。例如。一号车有 2 个条件,二号车有 5 个条件。你得到 7 行