如何将多个逻辑层应用于一个 Measure 以在 DAX 中创建另一个 Measure
How to apply multiple logical layers to a Measure to create another Measure in DAX
我的数据类似如下:
Type Compliant Non Compliant
A 1 0
B 0 1
C 1 0
我有以下措施 returns 合规百分比:
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)))
但到目前为止,我尝试过的公式组合都无法避免可怕的 "single value cannot be determined" 错误。
我知道这在语言中一定是可能的,但我缺少一些元素。如果只有 table 关系支持 BETWEEN 运算符...
与其尝试在一项措施中实施整个 table,一点点建模会大有帮助。
再创建两个 table:
一个,只有类型 -
Type
A
B
C
还有一个符合您的类型 class 乐队 -
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
将您的合规性 table 和 类 table 加入到类型 table 中。
现在您只需要创建两个度量:
CompliancePct:=SUM( Compliance[Compliant] ) / COUNTROWS( Compliance )
CorrectBand := CALCULATE( MAX(Classes[Class])
, FILTER (
Classes,
Classes[BandBegin] <= Compliance[CompliancePct]
&& Classes[BandEnd] > Compliance[CompliancePct]
)
)
我的数据类似如下:
Type Compliant Non Compliant
A 1 0
B 0 1
C 1 0
我有以下措施 returns 合规百分比:
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)))
但到目前为止,我尝试过的公式组合都无法避免可怕的 "single value cannot be determined" 错误。
我知道这在语言中一定是可能的,但我缺少一些元素。如果只有 table 关系支持 BETWEEN 运算符...
与其尝试在一项措施中实施整个 table,一点点建模会大有帮助。
再创建两个 table:
一个,只有类型 -
Type
A
B
C
还有一个符合您的类型 class 乐队 -
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
将您的合规性 table 和 类 table 加入到类型 table 中。
现在您只需要创建两个度量:
CompliancePct:=SUM( Compliance[Compliant] ) / COUNTROWS( Compliance )
CorrectBand := CALCULATE( MAX(Classes[Class])
, FILTER (
Classes,
Classes[BandBegin] <= Compliance[CompliancePct]
&& Classes[BandEnd] > Compliance[CompliancePct]
)
)