如何计算一个表中的某些记录,同时根据另一表中的日期值排除记录?

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

我的任务是统计要求确认各种文档的用户数量。 但数据是事件日志,数据模型不符合业务规则。

我对 PowerBI 或 DAX 不太熟悉,这个问题让我很费脑筋。

我要报告的系统是一个文档管理系统。一个

Document
经过两个工作流程。

  1. Authoring Workflow
    ,编辑者首先
    Edits
    ,然后
    Publishes
    文档。
  2. Acknowledgement Workflow
    ,其中
    Users
    被要求
    Acknowledge
    已发布的文档。此步骤可以同时或顺序重复多次。
  • 可以选择在每个文档中多次重复 #1 和 #2。

业务规则规定,一旦发布文档,之前的确认请求将被忽略,但表中的确认请求。

例如,如果文档已经历两次创作和确认周期,则第一次要求 5 位用户确认。第二次要求 2 位用户确认。还有另一个文档要求 1 个用户确认,请求的用户总数是 3。(2+1)而不是 8。(5+2+1)

所有数据都存在于报告中,并且定义了关系。业务逻辑可能不会更改,并且数据模型可能会添加列和表。只要它们是从现有数据中得出的。

提前非常感谢!

// Tables
Document: Id, Description
Activity: Workflow Id*, Type, User, Executed, Acknowledged
Workflow: Document Id*, Workflow Id, Type, 

样本数据

文件 |ID|描述| |-|-| |D1|文件一| |D2|文档二|

工作流程 |文档 ID|类型|工作流程 ID| |-|-|-| |D1|创作|W1| |D1|致谢|W2| |D1|致谢|W3| |D1|创作|W4| |D1|致谢|W5| |D2|创作|W6| |D2|致谢|W7|

活动 |工作流程 ID|类型|用户|已执行|确认| |-|-|-|-|-| |W1|已编辑|U1|2000 年 1 月 1 日|na(空)| |W1|已发布|U1|2000 年 1 月 3 日|na| |W2|请求确认|U2|1/4/2000|null| |W2|请求确认|U3|2000 年 1 月 4 日|2000 年 1 月 5 日| |W3|请求确认|U4|1/5/2000|null| |W3|请求确认|U5|2000 年 1 月 5 日|2000 年 1 月 5 日| |W3|请求确认|U6|2000 年 1 月 5 日|2000 年 1 月 5 日| |W4|已编辑|U1|2000 年 1 月 6 日|na(空)| |W4|已发布|U1|2000 年 1 月 7 日|na(空)| |W5|请求确认|U2|1/8/2000|null| |W5|请求确认|U6|2000 年 1 月 8 日|2000 年 1 月 9 日| |W6|已编辑|U1|2000 年 1 月 1 日|na(空)| |W6|已发布|U1|2000 年 1 月 3 日|na(空)| |W7|请求确认|U2|2000 年 1 月 5 日|2000 年 1 月 8 日|

工作流程

W4
应导致来自
W2
W3
的前 5 个请求被忽略。

预期结果:包含两个条形的条形图。

Total Requests     | === 3
Completed Requests | == 2
powerbi dax powerbi-desktop
1个回答
0
投票

基本上,您需要确定每个文档的最新“发布”活动以及最近的“确认”请求。

对于发布 您可以通过向工作流表添加计算列来完成此操作。像这样的东西应该可以工作

CALCULATE(
    MAX(Activity[Executed]),
    FILTER(
        Activity,
        Activity[Workflow Id] = EARLIER(Workflow[Workflow Id])
        && Activity[Type] = "Published"
    )
)

对于“确认”,创建另一个计算列

VAR CurrentWorkflowId = Activity[Workflow Id]
VAR DocumentId = LOOKUPVALUE(Workflow[Document Id], Workflow[Workflow Id], CurrentWorkflowId)
VAR MostRecentPublishDate = CALCULATE(
                                MAX(Workflow[MostRecentPublishDate]),
                                FILTER(
                                    Workflow,
                                    Workflow[Document Id] = DocumentId
                                )
                            )
RETURN IF(Activity[Type] = "Request Acknowledgement" && Activity[Executed] > MostRecentPublishDate, TRUE, FALSE)

然后你只需要创建两个度量来计算它们 请求总数

CALCULATE(
    COUNTROWS(Activity),
    Activity[IsRelevantAcknowledgment] = TRUE
)

以及总体致谢

CALCULATE(
    COUNTROWS(Activity),
    Activity[IsRelevantAcknowledgment] = TRUE,
    NOT ISBLANK(Activity[Acknowledged])
)

让我知道这是否有效

© www.soinside.com 2019 - 2024. All rights reserved.