DAX:使用ALL进行计算不会删除枢轴过滤器

时间:2019-05-17 09:50:26

标签: dax

我正在研究BI(通过Analysis Service),其中包含有关聊天的信息。一个聊天可以属于多个类别(最多1,2或3)。我在聊天和类别之间具有多对多关系,并且在事实表的每一行中都有3个维度,其中包含类别信息:tag1,tag2,tag3。 我需要计算每个类别的百分比。例如。如果我有以下行:

**chat_id tag1 tag2 tag3**

1       cat1 null null

2       cat2 cat1 cat3

3       cat1 cat4 null

然后对于cat1,百分比公式为: 100 * 3/6

for cat2: 1/6

for cat3: 1/6

for cat4: 1/6

用户应该可以将其他任何尺寸应用为过滤器。 问题是我无法在这些公式中计算分母。

我的想法是计算带有非空白标签1,非空白标签2,标签3的行数,然后将它们求和。 我试图对tag1使用以下DAX:

*nonblanktag1:=CALCULATE(COUNT([chat_id]);FILTER(ALL('Chat');'Chat'[tag1]<>BLANK()))*

问题在于它不会覆盖枢轴过滤器。例如,如果我将类别添加为维度,它将显示类似的内容(在Management Studio中):

**category nonblanktag1**

cat1     2

cat2     1

cat3     null

cat4     null

而我到处都需要6个来计算百分比。

1 个答案:

答案 0 :(得分:0)

实现目标的最简单方法是更改​​数据模型。

将您的数据转换为下表(我们称其为“聊天”):

enter image description here

我取消了“标签”数据的删除,并删除了所有空值-它们完全是不必要的。

然后,删除3个维度(tag1,tag2,tag3),并创建一个新维度“ Category”:

enter image description here

在category_id上连接“ Category”和“ Chat”以获取以下数据模型:

enter image description here

有了这样的结构,DAX现在非常容易:

措施1:

Category Count = COUNTROWS('Chat')

措施2:

Category Total = CALCULATE([Category Count], ALL('Chat'))

措施3:

Category % = DIVIDE( [Category Count], [Category Total])

结果:

enter image description here

工作原理:

DAX在很大程度上取决于数据模型的正确性。在这种情况下,聊天和类别之间的多对多关系建模不正确。取消数据透视图并添加适当的尺寸后,此错误已修复,DAX现在很容易。