我正在研究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个来计算百分比。
答案 0 :(得分:0)
实现目标的最简单方法是更改数据模型。
将您的数据转换为下表(我们称其为“聊天”):
我取消了“标签”数据的删除,并删除了所有空值-它们完全是不必要的。
然后,删除3个维度(tag1,tag2,tag3),并创建一个新维度“ Category”:
在category_id上连接“ Category”和“ Chat”以获取以下数据模型:
有了这样的结构,DAX现在非常容易:
措施1:
Category Count = COUNTROWS('Chat')
措施2:
Category Total = CALCULATE([Category Count], ALL('Chat'))
措施3:
Category % = DIVIDE( [Category Count], [Category Total])
结果:
工作原理:
DAX在很大程度上取决于数据模型的正确性。在这种情况下,聊天和类别之间的多对多关系建模不正确。取消数据透视图并添加适当的尺寸后,此错误已修复,DAX现在很容易。