DAX错误:产生变量数据类型的表达式不能用于定义计算列

时间:2019-03-28 11:37:49

标签: excel powerbi formula dax

我又回来了,有一个新问题……我不明白这种力量,在excel哈哈上是如此容易。

出现以下错误:

  

产生变量数据类型的表达式不能用于定义   计算列。

SLASERV1 = IF('DIARIO Backlog de incidencias'[Prioridad];"";
IF(OR('DIARIO Backlog de incidencias'[Prioridad]="Crítica";'DIARIO Backlog de incidencias'[Prioridad]="Máxima");4-('DIARIO Backlog de incidencias'[Horas totales sin Pending]*24);
IF(OR('DIARIO Backlog de incidencias'[Prioridad]="Alta";'DIARIO Backlog de incidencias'[Prioridad]="High");8-('DIARIO Backlog de incidencias'[Horas totales sin Pending]*24);
IF(OR('DIARIO Backlog de incidencias'[Prioridad]="Media";'DIARIO Backlog de incidencias'[Prioridad]="Medium");24-('DIARIO Backlog de incidencias'[Horas totales sin Pending]*24);
IF(OR('DIARIO Backlog de incidencias'[Prioridad]="Baja";'DIARIO Backlog de incidencias'[Prioridad]="Low");48-('DIARIO Backlog de incidencias'[Horas totales sin Pending]*24)
)))))

POWER BI COLUMNS

enter image description here enter image description here

如何在excel中完成操作(列P是我需要的结果):

enter image description here

=IF(K3<>"";IF(E3="";"";
     IF(OR(E3="Crítica";E3="Máxima";E3="Urgent");4-(Q3*24);
        IF(OR(E3="Alta";E3="High");8-(Q3*24);
           IF(OR(E3="Media";E3="Medium");24-(Q3*24);
              IF(OR(E3="Baja";E3="Low");48-(Q3*24)
 ))))))

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

该错误似乎与第一个IF语句有关:

SLASERV1 = IF('DIARIO Backlog de incidencias'[Prioridad];"";

在某些情况下,您要返回文本,而在其他情况下,则要返回数字。

但是:嵌套IF这样的语句并不是最好的方法-SWITCH语句会更清晰。像这样:

SLASERV1 = 
VAR SLA_Horas = 
    SWITCH ( 
        'DIARIO Backlog de incidencias'[Prioridad],
        "Crítica", 4,
        "Máxima", 4, 
        "Alta", 8,
        "High", 8,
        "Media", 24,
        "Medium", 24,
        "Baja", 48,
        "Low", 48,
        BLANK()
    )
RETURN
    IF ( 
        ISBLANK ( SLA_Horas ),
        BLANK(),
        SLA_Horas - ( 'DIARIO Backlog de incidencias'[Horas totales sin Pending] * 24 )
    )

最好还是有一个单独的表格来维护优先级/ SLA时间。像这样:

enter image description here

在字段Prioridad上的此表和事实表之间创建关系,然后可以使用以下方法创建计算列:

SLASERV2 = RELATED ( SLA[SLA Hours] ) - ( 'DIARIO Backlog de incidencias'[Horas totales sin Pending] * 24 )

有关示例PBIX文件,请参见https://pwrbi.com/so_55396655/

答案 1 :(得分:0)

那个错误是不言自明的,不是吗?

Powerbi列期望使用单一数据类型,即数字或文本。不能两者都做。

如果只需要一列,则将else部分包裹在Format函数中,如下所示:

format(48-('DIARIO Backlog de incidencias'[Horas totales sin Pending]*24), "")

更多有关格式的信息:https://docs.microsoft.com/en-us/dax/format-function-dax

但是我建议您宁愿创建两列,一列带有标签,第二列带有数字