堆积条形图的

时间:2017-10-24 08:54:13

标签: sql sql-server powerbi

在我的项目中,我尝试编写查询来获取堆积条形图的数据。我找到了一个类似的类比,而不是解释我的数据库的模式(这将是冗长的),我可以稍后移植到我的数据库。

On this page,运行查询

SELECT * FROM [Products]

在表格中,如果我想为堆积条形图选择数据,如何形成查询?

  • 每个CategoryID一个栏
  • 在每个CategoryID中,我想要使用袋子,瓶子或罐子的产品数量(单位列中的子串)

很抱歉,我无法在此展示大量的研究工作,因为我甚至无法想象出SELECT子句会是什么样子。我试图检查我们是否可以在WHERE子句中使用AS,然后对其执行COUNT。但这似乎不是正确的语法。

我将通过PowerBI在MS SQL Server上运行实际查询

2 个答案:

答案 0 :(得分:1)

第一步是为袋子,瓶子和罐子制作旗帜。这可以在SQL或Power BI中完成。

对于SQL,请使用如下查询:

SELECT *
    ,   CASE
            WHEN Products.Unit LIKE '%bag%' THEN 'Bag'
            WHEN Products.Unit LIKE '%bottle%' THEN 'Bottle'
            WHEN Products.Unit LIKE '%jar%' THEN 'Jar'
            ELSE 'Other'
        END AS 'UnitFlag'
FROM dbo.Products

对于Power BI,使用DAX创建一个具有以下公式的新列:

UnitFlag = IF(IFERROR(SEARCH("bag", Products[Unit]), -1) > 1, "Bag",
    IF(IFERROR(SEARCH("Bottle", Products[Unit]), -1) > 1, "Bottle",
        IF(IFERROR(SEARCH("Jar", Products[Unit]), -1) > 1, "Jar",
            "Other"
        )
    )
)

然后只需配置堆叠图表,如下所示。

Graph

从这里开始,您可以更改几个设置以使图表看起来更好一些;例如,如果您不希望可见,则将X轴更改为分类而不是连续,并隐藏“其他”类别。

答案 1 :(得分:0)

听起来你想了解聚合:

select categoryID, 
       reverse(left(reverse(unit), charindex(' ',reverse(unit))-1)) as Unit_type, -- gets the last word of `UNIT`
       count(*) as Total_Products
from Products
group by categoryID, 
         reverse(left(reverse(unit), charindex(' ',reverse(unit))-1))

这将做的是按单元类型和categoryID计算所有行和组。试试吧,看看会发生什么。

我建议您尽早了解聚合,但这非常强大。