如何将多个逻辑图层应用于度量以在DAX中创建另一个度量

时间:2015-12-17 17:59:34

标签: powerpivot dax powerbi

我的数据类似于以下内容:

Type   Compliant   Non Compliant
A      1           0
B      0           1
C      1           0

我有以下措施可以返回合规百分比:

sum(Table[Compliance])/(sum(Table[Compliance])+sum(Table[NonCompliant]))

这样的东西:

Type    Compliance %
A       74.45
B       53.36
C       29.88

到目前为止很棒,但现在我想按%范围和类型对百分比进行分类:

Type    Compliance %   Class
A       74.45          5
B       53.36          3
C       29.88          1

目前,我对每种类型都有一个度量,因为每个百分比的阈值不同:

Type A Category= CALCULATE(
SWITCH (
    TRUE (),
    [MeasureCompliancePCT] <= 0.25, 1,
    [MeasureCompliancePCT] <= 0.50, 2,
    [MeasureCompliancePCT] <= 0.61, 3,
    [MeasureCompliancePCT] <= 0.80, 4,
    5),Table[Type]="A"
)

虽然这有效,但这些调整后的措施难以使用,所以我尝试进行嵌套的SWITCH计算:

Class= CALCULATE(SUM(
SWITCH (
    TRUE (),
    [MeasureCompliancePCT] <= SWITCH(TRUE(), Table[Type]="A", -1,
                                             Table[Type]="B", -1),0,
    [MeasureCompliancePCT] <= SWITCH(TRUE(), Table[Type]="A", 0.25,
                                             Table[Type]="B", 0.49),1,
    [MeasureCompliancePCT] <= SWITCH(TRUE(), Table[Type]="A", 0.50,
                                             Table[Type]="B", 0.66),2,
    [MeasureCompliancePCT] <= SWITCH(TRUE(), Table[Type]="A", 0.61,
                                             Table[Type]="B", 0.78),3,
    [MeasureCompliancePCT] <= SWITCH(TRUE(), Table[Type]="A", 0.80,
                                             Table[Type]="B", 0.86),4,
    5)))

但到目前为止,我尝试过的公式组合都没有避免可怕的“单一值无法确定”错误。

我知道在语言中这一定是可能的,但是我缺少一些元素。如果只有表关系支持BETWEEN运算符......

1 个答案:

答案 0 :(得分:2)

不是尝试在度量中实现整个表,而是进行一些建模将会有很长的路要走。

再创建两个表:

一个,只有类型 -

Type
A
B
C

还有一个类型类乐队 -

Type    BandBegin   BandEnd Class
A       -1          0.25    1
A       0.25        0.5     2
A       0.5         0.61    3
A       0.61        0.8     4
A       0.8         10      5
B       -1          0.49    1
B       0.49        0.66    2
B       0.66        0.78    3
B       0.78        0.86    4
B       0.86        10      5

将Compliance表和Classes表连接到Type上的Types表。

现在你只需要创建两个措施:

CompliancePct:=SUM( Compliance[Compliant] ) / COUNTROWS( Compliance )

CorrectBand := CALCULATE( MAX(Classes[Class])
 , FILTER ( 
      Classes,
      Classes[BandBegin] <= Compliance[CompliancePct]
      && Classes[BandEnd] > Compliance[CompliancePct] 
      ) 
 )