如何计算具有不同条件的同一列的不同值的百分比

How to calculate a percentage on different values from same column with different criteria

我正在尝试在 SSRS 中编写一个查询(使用 SQL)来计算每个月的损益表销售额百分比(年份是用户在运行时选择的参数)。但是,我必须用于数据的 table 列出了所有年、月、帐户、美元等,看起来像这样:

ACCT_YEAR ACCT_PERIOD ACCOUNT_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 ACCOUNT_ID PERCENTAGE
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 子句之后应用。

因为您需要在 之前应用 window 函数 任何 where 子句 (这将filter account 4000 out),它们需要在一个范围内使用,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)