According to data warehouse concepts, is it correct to have a relation (1-m or even m-m) between two fact tables?
Twetter scenario would be an example. We can suppose that we have two Fact tables (Tweets and Users). If we want to know which user has tweeted a tweet or the tweets were made by a use, we have to join this two fact tables. So is it a (m-m) relationship between Fact-tweets and Fact-user? Or there is another way to structure this issue?
No. You do not relate facts to each other. Every column in a fact table should be either a FK to the related dimension record, or be an intrinsic value of the event.
fFollowers should relate to User(Tweeter), Date(FollowDate), Time(FollowTime), User(Follower). You'll also need CancelDate/Time, which should point to the Unknown/Future date dimension record if the Subscription is active. The default measure would be count.
dTweet would likely be a degenerate dimension, tying the attributes that are not related to a dimension and are not a measurable value, such as the tweetId(the key) and the lat/long of where the tweet was sent. This dimension may not be necessary.
fTweet should relate to User(Tweeter), Date(TweetDate), Time(TweetTime), and dTweet if you deem that dimension is necessary. Count would be a measure. You may also have text length as a measure.
In your business problem. you want to count the number of followers at the time a tweet occurred. You'll need to write a measure expression for fTweet that retrieves fFollowers.Count where TweetDate/Time between FollowDate/Time and CancelDate/Time. I would name this RecipientCount and it would be a measure of the tweet. If this measure is on fTweet, when you slice by dTweet.ID, it should return see the number of recpients of a tweet.