如何在Power BI矩阵中按维度组合统计用户计数?
原始数据表格
| Category | User | Date from | Date to |
|---|---|---|---|
| Cat A | User 1 | 01-12-2022 | 01-12-2022 |
| Cat B | User 1 | 01-12-2022 | 01-12-2023 |
| Cat C | User 1 | 01-12-2022 | |
| Cat A | User 2 | 01-06-2022 | 01-12-2022 |
| Cat B | User 2 | 01-12-2022 | |
| Cat A | User 3 | 01-12-2022 | |
| Cat C | User 3 | 07-08-2020 | 01-09-2022 |
目标输出矩阵
| 2020 | 2021 | 2022 | < ---用户Date from字段的最小年份 | |
|---|---|---|---|---|
| Cat A x Cat B | 0 | 0 | 2 | <-- 同时属于Cat A和Cat B的用户数 |
| Cat A x Cat C | 1 | 0 | 1 | <-- 同时属于Cat A和Cat C的用户数 |
| Cat B x Cat C | 0 | 0 | 1 | <-- 同时属于Cat B和Cat C的用户数 |
解决方案步骤
1. 生成类别两两组合辅助表
在Power BI建模选项卡中点击新建表,输入以下DAX公式生成不重复的类别两两组合:
Category Combinations = VAR AllCategories = VALUES('原始表'[Category]) RETURN SELECTCOLUMNS( FILTER( CROSSJOIN(AllCategories, AllCategories), '原始表'[Category] < [Category1] ), "Combination", '原始表'[Category] & " x " & [Category1] )
2. 计算用户的最小年份
在原始表中添加计算列,得到每个用户所有记录里Date from的最早年份:
User Min Year = CALCULATE( MIN(YEAR('原始表'[Date from])), ALLEXCEPT('原始表', '原始表'[User]) )
3. 创建核心统计度量值
新建度量值,用于统计同时属于两个类别且最小年份匹配的用户数:
Count Users in Combo = VAR SelectedCombo = SELECTEDVALUE('Category Combinations'[Combination]) VAR SplitCombo = PATHITEM(SUBSTITUTE(SelectedCombo, " x ", "|"), 1) & "," & PATHITEM(SUBSTITUTE(SelectedCombo, " x ", "|"), 2) VAR UsersInBothCats = CALCULATETABLE( VALUES('原始表'[User]), TREATAS(SPLIT(SplitCombo, ","), '原始表'[Category]), GROUPBY('原始表', '原始表'[User], "HasBoth", COUNTROWS(CURRENTGROUP())) = 2 ) VAR UsersWithMinYear = CALCULATETABLE( VALUES('原始表'[User]), '原始表'[User Min Year] = SELECTEDVALUE('原始表'[User Min Year]) ) RETURN COUNTROWS(INTERSECT(UsersInBothCats, UsersWithMinYear))
4. 构建矩阵可视化
- 将
Category Combinations表的Combination字段拖入矩阵行区域 - 将原始表的
User Min Year字段拖入矩阵列区域 - 将
Count Users in Combo度量值拖入矩阵值区域 - 在值字段的格式设置中,将“显示项无数据时”设为0
内容的提问来源于stack exchange,提问作者user23315322
相关产品推荐
相关产品推荐

