在 Power BI 中,参数是一项被低估但极具潜力的功能!这里指的不是 Power Query 中的参数,而是曾经被称为“假设分析(What-if)”的参数,Power BI 中的字段参数。
参数为报告用户提供了一种模拟结果的能力,是一种灵活而强大的工具。比如,我们可以通过它模拟不同的成本、收入或其他变量。然而,当涉及到较大的数值范围时,传统参数设置可能会带来一些问题。接下来,我们通过一个案例来探讨如何优化参数的使用。
假设我们需要一个从 1 到 10000 的参数,步长为 1。这意味着会生成一张包含 10000 行的表,如下:
当将这些参数值加载到切片器中时,Power BI 无法显示所有 10000 个值。切片器会对数据进行采样,使得我们难以精准选择某个值。例如,当我们尝试将参数设置为 1125 时,它会自动变为 1120,这说明参数中并不存在 1125 这个值
假设我们希望用户能够模拟一个商品的成本,比如手表的价格。手表的价格可能从二手的 1 元到超级高端的奢华手表的 100000 元不等。如果我们想在报表中模拟手表成本,就不再是 10000 行,而是 100000 行!
问题在于,值越高,你对精度的要求就越低。如果一块手表的价格是 2 元或 8 元,这个差别很大,这是一个 300% 的差异!但是如果手表的价格是 96000 元或 96008 元,你可能根本不会在意。这只是 0.008% 的差异。
为了解决这个问题,你可以更改生成参数表的公式,使其在不同的数值范围内有不同的增量步长,然后通过 UNION
函数将它们合并,例如:
1. 对于较小的数值范围(如 1 到 20),步长可以设置为 1,保证高精度。
2. 对于中等数值范围(如 20 到 100),步长可以设置为 5。
3. 对于较大的数值范围(如 100 到 1000),步长可以设置为 20。
4. 对于非常大的数值范围(如 1000 到 500000),步长可以进一步增大到 1000。
以下是一个示例 DAX 表达式:
UNION (
GENERATESERIES ( 1 , 19 , 1 ) ,
GENERATESERIES ( 20 , 95 , 5 ) ,
GENERATESERIES ( 100 , 980 , 20 ) ,
GENERATESERIES ( 1000 , 9900 , 100 ) ,
GENERATESERIES ( 10000 , 95000 , 5000 ) ,
GENERATESERIES ( 100000 , 500000 , 10000 )
)
这张表总共只有 229 行,却覆盖了从 1 到 500000 的范围!
切片器可以轻松处理 229 个值,因此一切都可以选择。我可以非常精确地选择开头的值,例如 7。
可以选择 90、95 或 100。如果我们需要更精确,可以将步长改为 2 而不是 5。
由于数值是以指数增长的,所以你必须对滑块的行为保持谨慎。更多地关注选中的值,而不是滑块的位置。注意从 7 到 95 的差别。如果我将切片器放在中间,我得到 4000。
如果我再向右移动滑块,与之前从 7 到 95 移动的幅度相似,我现在从 4000 跳到了 6600。
这很合理。毕竟,选择值左边有 4000 个值,但右边有 496000 个值。如果再移动一点,我们就跳到了 45000!
这种方法的优点在于,随着值的增大,对精度的要求会降低。通过这种方式,我们可以在同一个切片器中容纳大量的值。
实际场景:
• 员工人数模拟:当公司部门员工少于 20 人时,精确到单人非常重要。但对于员工数约 10000 的部门,精确到个位数就没有实际意义。
• 商品价格模拟:购买 5000 元左右的商品时,用户可能并不在意具体价格是否是 5001 元或 5050 元。在这种情况下,设置步长为 100 更为实际。
通过非线性参数值,我们可以在 Power BI 中高效模拟广泛范围的数据,同时优化切片器性能并提升用户体验。这种方法非常适合需要同时兼顾高精度和大范围数据的场景,如成本预测、员工数量分析或商品价格模拟。赶快试试这个方法,为你的 Power BI 报告注入更多灵活性和实用性!
一更专业的数据分析师训练营一
🔍【企业咨询】:十大行业,十大领域,企业案例,咨询,培训,实施。
🔗 如何获取更多信息?扫描下方二维码具体咨询。
点击“阅读原文”获取更多资源