powerbi - 如何在不使用桥接表的情况下拥有响应切片器值的动态轴,仅使用 DAX
问题描述
大家好,我有一张图表,我需要通过更改切片器值来更改 x 值(轴)(此切片器是黄色的,具有所有 Dims(x 值)),它来自DimList
表格。例如,目前图表是totalfreight
by custid
,但如果我empid
从黄色切片器检查图表值更改为totalfreight
by ,我需要empid
。这发生在所有切片器值上。
但我不喜欢桥接表或任何对性能有不良影响的方法,因为它FactTable
有十亿行,我在 SSAS、表格模型中对其进行建模并具有实时连接。提前致谢。
解决方案
我假设您指的是使用本文中描述的桥接表的方法。我同意鉴于模型中的数据量,您可能会面临一些性能问题。
首先,您应该尝试查看是否有其他 Power BI 前端功能可以直接在报表中使用,而无需更改数据模型。也许您可以使用 Power BI 书签、链接或自定义视觉对象?
如果没有,您可以在数据模型中使用另一种方法,它不依赖于桥接表。免责声明:我没有对此进行测试 - 可能涉及其他性能问题。
用您的各个维度中的所有成员构建一个新维度表。IE。创建所有 EmpID、CustID 等的联合。确保在单独的列中指明 ID 的类型。该表应如下所示:
DimensionId MemberId categoryid 1 categoryid 2 categoryid 3 custid 1 custid 2 custid 3 ...
让我们将此表命名为“所有维度”。该表不应与其他表有任何关系(这类似于参数表模式。
每当在“所有维度”表上选择某些内容时,更改您的度量以应用虚拟关系,以正确过滤事实表:
SUM('factSale'[Freight])
会成为:
SWITCH( SELECTEDVALUE('All Dimensions'[DimensionId]), "categoryid", CALCULATE(SUM('factSale'[Freight]), KEEPFILTERS(TREATAS(VALUES('All Dimensions'[MemberId]), 'factSale'[CategoryId])), "custid", CALCULATE(SUM('factSale'[Freight]), KEEPFILTERS(TREATAS(VALUES('All Dimensions'[MemberId]), 'factSale'[CustId])), "empid", CALCULATE(SUM('factSale'[Freight]), KEEPFILTERS(TREATAS(VALUES('All Dimensions'[MemberId]), 'factSale'[EmpId])), // ... etc. for all dimensions ... , // Fallback, when nothing is selected on 'All Dimensions' IF(NOT ISFILTERED('All Dimensions'[MemberId]), SUM('factSale'[Freight]) ) )
- 将 [DimensionId] 列放入切片器并使用 [MemberId] 列作为条形图上的轴。请注意,图表不会显示任何内容,除非在 [DimensionId] 切片器上过滤了一个项目。
说明:该SWITCH
语句确定是否对“所有维度”表的 [DimensionId] 列进行了任何选择。TREATAS
在这种情况下,使用该函数将过滤器应用于事实表,具体取决于已选择的维度。我们使用 KEEPFILTERS 来确保直接在各个维度上制作的任何现有过滤器都保持原样。
如果没有在 [DimensionId] 列上进行选择,我们希望回退到标准度量SUM('factSale'[Freight])
,但由于我们不想对 [MemberId] 列上的所有项目重复此度量,我们使用IF(NOT ISFILTERED( ...
来确保如果当前在图表轴上使用 [MemberId],我们只返回一个空白值。
推荐阅读
- javascript - 使用带有 Scryfall API 的 Axios 时出现问题
- javascript - 在 onsubmit 中执行 ajax 验证
- r - 跨组添加趋势线并在分组小提琴图或箱线图中设置刻度标签
- grpc - 在 grpc-node 中记录请求时间是否有任何选项?
- php - Cron + PHPMailer 邮件队列
- c++ - 查找输出流的当前基数
- python - 将带有对象的函数传递给 concurrent.futures.ProcessPoolExecutor()?
- php - 如何通过使下一项成为上一项的子项的一部分来移动数组?
- jquery - 动画宽度到指定百分比并在动画时显示从 0 到指定百分比的百分比
- r - R Shiny 不会在对话框上绘制条形图