DAX 衡量标准来计算每个销售文件的合规百分比

问题描述 投票:0回答:1

我正在尝试在 PowerBI 中创建 DAX 度量。以下是我的表格结构:

销售:

创建日期。 sales_doc_no。 交货日期

订单:

销售文档编号。 交货日期

日期:

创建日期

销售到订单是 sales_doc_no 上的多对一关系 Sales to Date 是创建日期上的多对一关系

我正在尝试计算 DAX 度量: compliant_sales_doc_count ,它是销售文档级别的合规销售文档与总销售文档的比率

Sales_Compliant_Count = 
var CompliantDocs = CALCULATE(
DISTINCTCOUNTNOBLANK(sales[doc_no]),
FILTER(orders,
    DATEDIFF(
        'orders'[delivery_date],
        LOOKUPVALUE('sales'[created_date], 'sales'[doc_no], 'orders'[doc_no]),
        DAY
    ) < 14
)
)
RETURN
CompliantDocs

Sales_nonCompliant_Count = 
var NonCompliantDocs = CALCULATE(
DISTINCTCOUNTNOBLANK(sales[doc_no]),
FILTER(orders,
    DATEDIFF(
        'orders'[delivery_date],
        LOOKUPVALUE('sales'[created_date], 'sales'[doc_no], 'orders'[doc_no]),
        DAY
    ) >= 14
    )
)
RETURN
NonCompliantDocs

当我尝试计算比率时,它会导致交叉连接,因为任何一个值都可以为空。我尝试使用合并,isblank,但交叉连接仍然保持不变。

我的最终目标是通过以下方式创建视觉效果:

sales_doc_no(来自订单表)。 创建日期(来自日期表)。 交货日期(来自订单表)。 sales_company_count。 sales_non_compile_count。 合规_百分比

powerbi dax
1个回答
0
投票

我认为你对你设计关系的方式的背景有疑问。

您可能需要调整您的措施,如下所示:

Sales_Compliant_Count = 
VAR CompliantDocs = 
    CALCULATE(
        DISTINCTCOUNT('Sales'[sales_doc_no]),
        FILTER(
            'Orders',
            'Orders'[delivery_date] <> BLANK() && 
            'Sales'[created_date] <> BLANK() &&
            DATEDIFF(
                'Sales'[created_date],
                'Orders'[delivery_date],
                DAY
            ) < 14
        )
    )
RETURN
CompliantDocs

然后:

Sales_NonCompliant_Count = 
VAR NonCompliantDocs = 
    CALCULATE(
        DISTINCTCOUNT('Sales'[sales_doc_no]),
        FILTER(
            'Orders',
            'Orders'[delivery_date] <> BLANK() && 
            'Sales'[created_date] <> BLANK() &&
            DATEDIFF(
                'Sales'[created_date],
                'Orders'[delivery_date],
                DAY
            ) >= 14
        )
    )
RETURN
NonCompliantDocs

以及合规百分比的最终衡量标准:

Compliance_Percentage = 
VAR TotalDocs = 
    DISTINCTCOUNT('Sales'[sales_doc_no])

VAR CompliantDocs = [Sales_Compliant_Count]
VAR NonCompliantDocs = [Sales_NonCompliant_Count]

RETURN
IF(
    TotalDocs = 0,
    BLANK(),
    CompliantDocs / TotalDocs * 100
)
© www.soinside.com 2019 - 2024. All rights reserved.