分析以下DAX语句为什么DIVIDE函数无法在表格中显示正常值:全损益_BASIC = //基础度量值,决定维度的基本处理逻辑,被其他度量值引用 var basic=SUM('f17_产品损益'[本年累计]) var v1=CALCULATE(SUM('f17_产品损益'[本年累计]),'f17_产品损益'[最终报表项编码]="PROD_PL_91004") //制造毛利 var v2=CALCULATE(SUM('f17_产品损益'[本年累计]),'f17_产品损益'[最终报表项编码]="PROD_PL_92003") //设备收入 var v3=CALCULATE(SUM('f17_产品损益'[本年累计]),'f17_产品损益'[最终报表项编码]="PROD_PL_91006") //销售毛利 var v4=CALCULATE(SUM('f17_产品损益'[本年累计]),'f17_产品损益'[最终报表项编码]="PROD_PL_91002") //净销售收入 var v5=CALCULATE(SUM('f17_产品损益'[本年累计]),'f17_产品损益'[最终报表项编码]="PROD_PL_91018") //贡献利润 var res=SWITCH(MAX('sort_产品_SPDT全损益'[report_item_sn]), 3,DIVIDE(v1,v2), //制造毛利率 5,DIVIDE(v3,v4), //销售毛利率 10,DIVIDE(v5,v4), //贡献利润率 basic ) return res
时间: 2024-02-27 12:52:52 浏览: 171
根据这个DAX语句,`DIVIDE`函数可能无法在表格中显示正常值的原因是与数据类型的不一致有关。`DIVIDE`函数在计算两个数的商时,返回一个浮点数值。但是,如果参与计算的数据列是整数类型,那么结果可能会被截断或舍入,导致意外结果。
具体来说,如果`v2`或`v4`的值为零,则`DIVIDE`函数将返回`null`。如果表格中的数据类型是整数类型,则`null`值可能被解释为零,从而导致意外结果。例如,如果`v2`或`v4`的值为零,下面的语句将无法正确计算制造毛利率或贡献利润率:
```
DIVIDE(v1,v2) // 制造毛利率
DIVIDE(v5,v4) // 贡献利润率
```
为了避免这个问题,您可以使用`ROUND`函数对结果进行舍入,或者将参与计算的数据列的数据类型更改为浮点数类型。例如,下面的语句使用`ROUND`函数对结果进行舍入,以确保在表格中正确显示:
```
ROUND(DIVIDE(v1,v2), 2) // 制造毛利率
ROUND(DIVIDE(v5,v4), 2) // 贡献利润率
```
另外,如果要确保`DIVIDE`函数返回的值不被解释为零,您也可以在函数中添加一个默认值。例如,下面的语句使用`IF`函数将`null`值替换为一个默认值:
```
DIVIDE(v1, IF(v2 = 0, 1, v2)) // 制造毛利率,假设默认值为1
DIVIDE(v5, IF(v4 = 0, 1, v4)) // 贡献利润率,假设默认值为1
```
在这种情况下,如果`v2`或`v4`的值为零,它们将被替换为默认值1,从而避免了`DIVIDE`函数返回`null`值的问题。
阅读全文