[英]How to calculate a percentage on different values from same column with different criteria
我正在尝试在 SSRS 中编写一个查询(使用 SQL)来计算每个月的损益表销售额百分比(年份是用户在运行时选择的参数)。 但是,我必须用于数据的表格列出了所有年、月、帐户、美元等,如下所示:
ACCT_YEAR | ACCT_PERIOD | 帐户ID | CREDIT_AMOUNT |
---|---|---|---|
2021年 | 1个 | 4000 | 20000 |
2021年 | 2个 | 4000 | 25000 |
2021年 | 1个 | 5000 | 5000 |
2021年 | 2个 | 5000 | 7500 |
2021年 | 1个 | 6000 | 4000 |
2021年 | 2个 | 6000 | 8000 |
等等等等(ACCOUNT_ID =4000恰好是销售账号)
例如,我需要计算
CREDIT_AMOUNT when ACCT_YEAR = 2021, ACCT_PERIOD=1, and ACCOUNT_ID=5000
/
CREDIT_AMOUNT when ACCT_YEAR = 2021, ACCT_PERIOD=1, and ACCOUNT_ID=4000
* 100
然后,我将为 ACCT_YEAR 中的每个 ACCT_PERIOD 执行此操作。 希望这是有道理的......我想要的是这样的:
ACCT_YEAR | ACCT_PERIOD | 帐户ID | 百分比 |
---|---|---|---|
2021年 | 1个 | 5000 | 0.25 |
2021年 | 2个 | 5000 | 0.30 |
2021年 | 1个 | 6000 | 0.20 |
2021年 | 2个 | 6000 | 0.32 |
我正在尝试创建一个图表来显示大约 10 个不同帐户的销售额百分比(我知道他们的特定 account_ID 并将按这些 ID 进行过滤)并使用折线图小部件按月显示趋势。
我尝试过 CASE 场景、OVER 场景和嵌套子查询。 我觉得这应该很简单,但我很冷静,没有看到明显的解决方案。 有什么建议么? 谢谢!
您只需使用一个矩阵,其中父列组用于 ACCT_YEAR,子列组用于 ACCT_PERIOD。 然后你可以使用你的计算。 如果将文本框格式化为百分比,则不需要将其乘以 100。
文本框值: =IIF(ACCOUNT_ID=4000, Sum(CREDIT_AMOUNT), 0) = 0, 0, IIF(ACCOUNT_ID=5000, Sum(CREDIT_AMOUNT), 0) / IIF(ACCOUNT_ID=4000, Sum(CREDIT_AMOUNT), 0)
需要注意的一个重要行为是 window 函数在 where 子句之后应用。
因为您需要在任何 where 子句(将过滤掉帐户 4000)之前应用 window 函数,所以需要在一个 scope 中使用它们,而在另一个 scope 中使用 where 子句。
WITH
perc AS
(
SELECT
*,
credit_amount * 100.0
/
SUM(
CASE WHEN account_id = 4000 THEN credit_amount END
)
OVER (
PARTITION BY acct_year, accr_period
)
AS credit_percentage
FROM
your_table
)
SELECT
*
FROM
perc
WHERE
account_id IN (5000,6000)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.