在特定时间获取不同的用户计数 MDX QUERY
Posted
技术标签:
【中文标题】在特定时间获取不同的用户计数 MDX QUERY【英文标题】:Get Distinct User Count Over Particular Time MDX QUERY 【发布时间】:2021-02-20 05:14:12 【问题描述】:我需要一些 mdx 帮助。
立方体详情:
Measures.Users -> 对用户的不同计数。
我想找到这个查询的 mdx 等效项:
Select a.shopId , Month(TransactionDate) Month_Transaction,
Year(TransactionDate) Year_Transaction,
count(distinct b.UserID) UniqueUserCount
FROM [dbo].[shop] a
JOIN users b ON a.UserID = b.UserID
where TransactionDate >= '2018-01-01'
Group by a.shopId ,Month(TransactionDate), Year(TransactionDate)
这是我迄今为止所拥有的,无论日期如何,它都会产生唯一计数。我想要日期范围内的唯一计数。请让我知道如何实现这一目标?
SELECT
[Date].[Month].&[2020]&[2020-Q3]&[2020-09],
[Date].[Month].&[2020]&[2020-Q4]&[2020-10],
[Date].[Month].&[2020]&[2020-Q4]&[2020-11],
[Date].[Month].&[2020]&[2020-Q4]&[2020-12]
ON COLUMNS, NON EMPTY
[ShopLocations].[Hierarchy].[Shop]
ON ROWS
FROM [ShopperCube]
where (Measures.Users)
【问题讨论】:
内置的不同计数度量提供了最大的灵活性。听起来您已经有一个 Measure.Users 了?用户的度量组是否与您的日期和商店位置维度相关联? 有没有办法使用计算列来做到这一点?我认为用户度量组未连接到日期。 应该是可以连接的。我将在多对多革命论文中应用 Distinct Count 模式,以获得更灵活且运行速度更快的无代码解决方案:sqlbi.com/whitepapers/many2many @MikeHoney 您最初的评论帮助我解决了问题。谢谢。 不用担心 - 转发为答案,因为我的多巴胺命中。 【参考方案1】:内置的非重复计数度量提供了最大的灵活性。听起来您已经有一个 Measure.Users 了?用户的度量组是否连接到您的 Date 和 ShopLocations 维度?
为了帮助实现这一点,我将回顾多对多革命论文中的不同计数模式。这种方法提供了一种更灵活且运行速度可能更快的无代码解决方案:
https://sqlbi.com/whitepapers/many2many
【讨论】:
【参考方案2】:您可以使用DistinctCount MDX 函数。
官方文档不是很清楚,但是,一般原则是:您将“Set”传递给此函数以获取不同的值。
一个示例 MDX
WITH SET MySet AS
[Dim User].[User Id].Children
MEMBER Measures.SetDistinctCount AS
DISTINCTCOUNT(MySet)
SELECT Measures.SetDistinctCount, Measures.Amount ON 0
, [Dim Date].[Date Key].AllMembers ON 1
FROM [Mine]
为了验证这一点,以下是我的设置:
查询结果
另外,给出创建表和处理不同数据的示例 sql:
IF OBJECT_ID('FactTransaction') IS NOT NULL
DROP TABLE FactTransaction
GO
CREATE TABLE FactTransaction (ShopId INT, TransactionDateKey INT, UserId INT, Amount INT)
GO
IF OBJECT_ID('DimDate') IS NOT NULL
DROP TABLE DimDate
GO
CREATE TABLE DimDate(DateKey INT, FullDate DATE)
GO
IF OBJECT_ID('DimUser') IS NOT NULL
DROP TABLE DimUser
GO
CREATE TABLE DimUser(UserId INT, UserName VARCHAR(50))
GO
IF OBJECT_ID('DimShop') IS NOT NULL
DROP TABLE DimShop
GO
CREATE TABLE DimShop(ShopId INT, ShopName VARCHAR(50))
GO
--Shop 1
INSERT INTO FactTransaction values(1, 20210101, 1, 10)
INSERT INTO FactTransaction values(1, 20210101, 2, 5)
INSERT INTO FactTransaction values(1, 20210101, 3, 20)
INSERT INTO FactTransaction values(1, 20210102, 2, 10)
INSERT INTO FactTransaction values(1, 20210102, 4, 15)
INSERT INTO FactTransaction values(1, 20210103, 3, 5)
INSERT INTO FactTransaction values(1, 20210103, 4, 10)
INSERT INTO FactTransaction values(1, 20210103, 5, 20)
INSERT INTO FactTransaction values(1, 20210103, 1, 20)
--Shop 2
INSERT INTO FactTransaction values(2, 20210103, 2, 10)
INSERT INTO FactTransaction values(2, 20210103, 2, 5)
INSERT INTO FactTransaction values(2, 20210103, 2, 20)
GO
INSERT INTO DimDate VALUES(20210101, '2021-01-01')
INSERT INTO DimDate VALUES(20210102, '2021-01-02')
INSERT INTO DimDate VALUES(20210103, '2021-01-03')
GO
INSERT INTO DimUser VALUES(1, 'First')
INSERT INTO DimUser VALUES(2, 'Second')
INSERT INTO DimUser VALUES(3, 'Third')
INSERT INTO DimUser VALUES(4, 'Fourth')
INSERT INTO DimUser VALUES(5, 'Fifth')
GO
INSERT INTO DimShop VALUES(1, 'Shop 1')
INSERT INTO DimShop VALUES(2, 'Shop 2')
GO
【讨论】:
以上是关于在特定时间获取不同的用户计数 MDX QUERY的主要内容,如果未能解决你的问题,请参考以下文章
Google Big Query 按页面路径和 Google Analytics 数据的自定义维度获取用户计数
Django Query 获取 ArrayField 列的所有不同值的计数