http://www.pellesoft.se/communicate/user/member-statistics.aspx?uid=38 Uträkningen bör ju vara per tidsenhet då det är en färskvara. Sen är det antingen att man sätter upp olika värden för olika aktiviteter eller så jämför man med varandra så den som är mest aktiv har 8,0. Gjorde ett simpelt exempel med lineär värdeminskning över tiden, där en rating räknas fram så att den som leder poängligan alltid har 8 i rating: Vilket arbete du lagt ner, imponerad! Jag ser möjligheterna med dina beräkningar men samtidigt lite utmaningar. I stället för att skriva en massa varför, om och men och det där går inte. Skulle du kunna skriva en sp som beräknar detta för 1 person. Som han har gjort så lagras ju varje enskild poäng separat tillsammans med ett datum för att hålla koll på vilka poäng som är färska och vilka som är gamla. Jag antar att dagens system bara har en poäng per användare. SQL med siffror från excelen (det diffar lite på ratingen, vilket jag *tror* beror på att jag använt DAGAR365() i Excel för att räkna ut hur många dagar gammalt en event är). Bra gjort! Detta skall jag se om jag kan implementera framöver.Beräkna ett snittvärde för användare beroende på aktivitet
Alla ni användare har ju deltagit olika mycket och bidragen beräknas olika. En artikels värde är 200 poäng, bm ger 5 poäng per betald krona, att lösa någons inlägg ger 10 poäng osv. Summan blir vad som helst, i mitt fall 39.000 poäng, i någon annans fall 1400.
Jag skulle vilja hitta en beräkningsformel där max-värde skulle vara 8,0 (typ simhopparna) och på något sätt räknas ut. Jag skulle också vilja att det skall trigga en person att tjäna fler poäng och då påtala att om du gör si eller så når du till nästa nivå. Detta för att trigga oss att fortsätta vara duktiga och flitiga.
Är det någon av er som kan koppa på en bra koppling och regel här för pellesoft skulle det uppskattas. Jag är idel öra - inga regler är egentligen satta, jag vill dock hitta något som är meningsfullt att använda sig av.
//PelleSv: Beräkna ett snittvärde för användare beroende på aktivitet
Sv: Beräkna ett snittvärde för användare beroende på aktivitet
http://dl.dropbox.com/u/24636498/ex%20po%C3%A4ngv%C3%A4rdeminskning.xlsxSv:Beräkna ett snittvärde för användare beroende på aktivitet
Scenariot är att du har ett forum där någon postar, någon annan svarar och tag för löst. Det finns även inbetalt sponsorskap där man kan ge x poäng för varje krona, likaså postade tips eller i programarkivet och slutligen artiklar.
Artiklar, bonusmedlemskap, tips och program är ju lätt. Lite klurigare är forumet som då också innehåller 300.000 inlägg som skall beräknas varje gång. Här kanske behövs en trigger för att fylla ett fält i någon tabell för slippa beräkningar online..
Hur tänkte du fortsättningen från ditt ark? - dvs hur realiserar man detta på ett bra sätt?
//PelleSv: Beräkna ett snittvärde för användare beroende på aktivitet
Du måste alltså skapa en ny poängtabell där du lagrar poäng, användar-ID och datum och i den sparar du alla poäng som användaren får.
När man skriver i forumet så läggs poängen till vid postningen, då behöver inte hela forumet sökas igenom bara för att få fram nuvarande aktivitetsvärde.
Och innan det här är inlagt så känns väl 10 som ett lämpligare maxvärde.Sv:Beräkna ett snittvärde för användare beroende på aktivitet
Edit: verkar bli dubbelfnuttar av nån anledning?
Edit2: Tog bort cursorn
CREATE TABLE Users
(UserId int PRIMARY KEY NOT NULL,
UserName nvarchar(200),
Rating float)
CREATE TABLE PoangEvents
(PoangEventId int PRIMARY KEY NOT NULL,
UserId int,
IntjanandeDatum datetime,
Poang int)
INSERT INTO Users VALUES
(1, ''Fredrik Forumräv'', 1),
(2, ''Nisse Nybörjare'', 1),
(3, ''Erik'', 1)
INSERT INTO PoangEvents VALUES
(1, 1, ''2012-07-01'', 15),
(2, 1, ''2012-01-01'', 10),
(3, 1, ''2011-07-01'', 10),
(4, 1, ''2011-01-01'', 25),
(5, 1, ''2010-07-01'', 20),
(6, 1, ''2010-01-01'', 10),
(7, 1, ''2009-07-01'', 25),
(8, 1, ''2009-01-01'', 20),
(9, 1, ''2008-07-01'', 40),
(10, 2, ''2012-08-13'', 10),
(11, 2, ''2012-07-14'', 10),
(12, 2, ''2012-06-10'', 15),
(13, 2, ''2012-05-14'', 15),
(14, 2, ''2012-05-10'', 10),
(15, 3, GETDATE(), 76)
DECLARE @NYALDER int
DECLARE @GAMMALALDER int
DECLARE @MINSTAFRAKTION float
DECLARE @MAXRATING int
DECLARE @MINRATING int
SET @NYALDER = 30
SET @GAMMALALDER = 730
SET @MINSTAFRAKTION = 0.25
SET @MAXRATING = 8
SET @MINRATING = 1
DECLARE @dagstotal TABLE (UserId int, TotalPoang float)
INSERT INTO @dagstotal
SELECT u.UserId,
SUM(CASE
WHEN DATEDIFF(d, p.IntjanandeDatum, GETDATE()) > @GAMMALALDER THEN @MINSTAFRAKTION
WHEN DATEDIFF(d, p.IntjanandeDatum, GETDATE()) < @NYALDER THEN 1
ELSE (@GAMMALALDER - DATEDIFF(d, p.IntjanandeDatum, GETDATE())) * (1 - @MINSTAFRAKTION) / @GAMMALALDER + @MINSTAFRAKTION
END * p.Poang)
FROM Users u INNER JOIN PoangEvents p ON u.UserId = p.UserId
GROUP BY u.UserId
DECLARE @MaxPoang float
SELECT @MaxPoang = MAX(TotalPoang) FROM @dagstotal
UPDATE U SET U.Rating = dt.TotalPoang / @MaxPoang * (@MAXRATING - @MINRATING) + @MINRATING
FROM Users U INNER JOIN @dagstotal dt ON U.UserId = dt.UserId
Sv: Beräkna ett snittvärde för användare beroende på aktivitet
Skall kolla igenom dubbelfnutts-problemet!