Power BI,DAX,多对一和关系表

时间:2020-11-06 20:16:41

标签: powerbi dax

我以前在这里问过一个问题: DAX subquery measure?

有关如何为可视化创建特定度量列的说明。为了使示例简单,我将其保留在一个虚拟表中,并且DAX查询的运行情况非常好。

但是,实际上,度量列的可视化由多个联接表组成。 DAX查询的结果意外产生全零!因此,我将在此处重构示例以获得更多帮助...

要求

对于一个特定的“构建”,我想要计算多少个“应用”不等于“完成”。

数据模型

Builds
Build
App

Apps
App
Status

样本数据

构建

Build...........App
Build1..........App1
Build1..........App2
Build1..........App9
Build2..........App3
Build3..........App1
Build3..........App5
Build3..........App8
Build3..........App9

应用

App...........Status
App1..........UAT
App2..........Complete
App9..........New
App3..........Complete
App5..........UAT
App8..........Complete

关系

这种关系是许多Builds.App到ONE Apps.App。

可视化表

这是我的可视化-注意不同的表:

Builds.Build....Builds.App....Apps.Status
Build1..........App1..........UAT
Build1..........App2..........Complete
Build1..........App9..........New
Build2..........App3..........Complete
Build3..........App1..........UAT
Build3..........App5..........UAT
Build3..........App8..........Complete
Build3..........App9..........New

这是我要求的结果:

Builds.Build....Builds.App....Apps.Status....AppsNotCompleteForBuild
Build1..........App1..........UAT............2
Build1..........App2..........Complete.......2
Build1..........App9..........New............2
Build2..........App3..........Complete.......0
Build3..........App1..........UAT............3
Build3..........App5..........UAT............3
Build3..........App8..........Complete.......3
Build3..........App9..........New............3

尝试1 (不起作用!)

CALCULATE (
    COUNT ( Builds[App] ),
    FILTER (
        ALL ( Builds[Build], Builds[App] ),
        Builds[Build] = SELECTEDVALUE ( Builds[Build] )            
    ),
    FILTER (
        ALL ( Apps[Status] ),
        Apps[Status] <> "Complete"
    )
) + 0

尝试2 (不起作用!)

Measure 5 = CALCULATE (
    COUNT ( Builds[App] ),
    FILTER (
        ALL ( Builds[Build] ),
        Builds[Build] = SELECTEDVALUE ( Builds[Build] )            
    ),
    FILTER (RELATEDTABLE(Apps),
    Apps[Status] <> "Complete")
) + 0

尝试3 (不起作用!)

Measure5 = CALCULATE (
   COUNTAX(FILTER( Builds 
            ,  RELATED(Apps[Status]) <>"Complete"  
               && Builds[Build] = SELECTEDVALUE(Builds[Build])
             )  
     ,Builds[App])
) + 0

1 个答案:

答案 0 :(得分:1)

将这些表与Build和Apps之间的多对一关系使用

    User.findOne({ username: username })
    .then((result) => {
        if (!result) {
            return false;
        }
        console.log('result :>> ', result);
        user = result;
        token = jwt.sign(
            {
                username: result.username,
                userId: result._id.toString(),
            },
            'thistokenisasecret',
            { expiresIn: '1h' }
        );
        return bcrypt.compare(password, result.password);
    })
    .then((matching) => {
        if (matching) {
            req.session.user = username;
            req.session.save(() => {
                res.status(200).json({
                    token: token,
                    userId: user._id.toString(),
                    name: user.name,
                    username: user.username,
                });
            });
        } else
            throw errorHandling(
                'Login failed',
                422,
                'Login credentials false'
            );
    })

我们可以编写一个dax度量来计算每个构建中未处于“完成”状态的应用程序数量。由于应用程序只能具有一种状态,否则多对一关系就会中断,因此计数时就足以过滤出状态=“完成”。

app.use(
session({
    secret: 'todo',
    resave: false,
    saveUninitialized: false,
    store: store,
    cookie: {
        httpOnly: false,
        secure: false,
        maxAge: 3600000, // one hour
    },
})

有了这个公式,我们可以使用可视表获得此结果

enter image description here

编辑:这还将处理“应用程序”表中缺少“应用程序”的情况,而忽略它们

Builds = 
DATATABLE(
    "Build", STRING,
    "App", STRING,
    {
        { "Build1", "App1" },
        { "Build1", "App2" },
        { "Build1", "App9" },
        { "Build2", "App3" },
        { "Build3", "App1" },
        { "Build3", "App5" },
        { "Build3", "App8" },
        { "Build3", "App9" }
    }
)

Apps = 
DATATABLE(
    "App", STRING,
    "Status", STRING,
    {
        { "App1", "UAT" },
        { "App2", "Complete" },
        { "App9", "New" },
        { "App3", "Complete" },
        { "App5", "UAT" },
        { "App8", "Complete" }
    }
)